2009-03-02 21 views
10

Ich habe versucht, Backup-Cron-Job auf meinem Webserver mit FreeBSD zu machen. Derzeit sieht es so etwas wie dieses:Sicherer MySQL-Backup-Cron-Job - my.cnf wird nicht gelesen

/usr/local/bin/mysqldump --opt --single-transaction --comments --dump-date --no-autocommit --all-databases --result-file=/var/backups/mysql/all.sql

Es funktioniert gut, wenn ich es als root ausführen (da root eine .my.cnf mit dem Benutzernamen und Passwort verwendet zu verbinden, aber wenn der Auftrag ausgeführt wird von cron wird die my.cnf Datei nicht gelesen.

gibt es eine Möglichkeit, um das ohne Benutzernamen und Passwort in den Befehl zu setzen, die sich (da das irgendwie unsicher ist)?

Seltsamerweise habe ich das gleiche Setup mit PostgreSQL und einer Datei .pgpass, und das funktioniert wie ein Charme.

Antwort

16

Verwenden Sie die --defaults-extra-file Option, um es zu sagen, wo die .my.cnf Datei zu finden (vorausgesetzt, es lesbar ist egal von welcher Benutzer mysqldump läuft

+0

* seufz * zu einfach;) * upvote * – Node

+0

Ah, ja. Wie habe ich das vermisst? Ich werde das einfach bei meiner nächtlichen Arbeit festhalten. Ich freue mich darauf, die Nachricht zu bekommen, dass es, wenn ich schlafe :) – mikl

+0

tatsächlich war es nicht so einfach, in den MySQL-Online-Dokumenten zu finden. Keines der einzelnen Programme erwähnt diese Option in ihren Hilfeseiten. – Alnitak

2

Das ist seltsam eigentlich cron sollte die .my.cnf lesen. Wie führst du den Cronjob in/etc/crontab oder crontab -e aus? Sie könnten versuchen, AutoMySQLBackup verwenden, die ein kleines Shell-Skript mit mysqldump ist.

+0

Nun, eigentlich wird es nicht direkt von Cron, sondern von FreeBSDs 'periodischen' System ausgeführt. Es ist eigentlich eine Skriptdatei in/usr/local/etc/periodisch/täglich Die periodischen Cron-Jobs werden durch '/ etc/cron' wie folgt ausgeführt: >' 1 3 * * * root periodisch täglich – mikl

+0

Oh, Markdown ist in den Kommentaren nicht aktiviert. Hoffe, es ist sowieso lesbar :) – mikl

0

Unter FreeBSD können Sie fügen Sie folgendes:.

security.bsd.see_other_uids=0 

/etc /sysctl.conf und Neustart oder

sysctl security.bsd.see_other_uids=0 

verwenden Um den sysctl Wert gesetzt.

Jetzt können andere Benutzer als root nur ihre eigenen Prozesse anzeigen. Daher ist es weniger riskant, das Passwort in die Befehlszeile zu schreiben.

Wie läuft Crontab? Hast du es mit crontab -e -u root zur root-Benutzer crontab hinzugefügt oder hast du es zu/etc/crontab hinzugefügt?

Stellen Sie sicher, dass die richtigen Berechtigungen auf der .my.cnf festgelegt sind und welche Umgebungsvariablen von crontab gesetzt werden, da dies dazu führen kann, dass sie an einem anderen Ort als Ihrem Home-Verzeichnis (für Root auf FreeBSD) ist. Wurzel).

2

Ich bin gerade auch in diese gelaufen.

Es scheint, dass MySQL hardcoded ist, um nach '~/.my.cnf' statt nach '$ HOME/.my.cnf' zu suchen.

auf FreeBSD, Cronjobs von/etc genannt/crontab die Tilde ‚~‘ Zeichen ignorieren und damit einen Wert wie ~/.my.cnf

Tatsächlich ignorieren, wird die folgende für nicht funktioniert mich überhaupt:

mysql --defaults-extra-file = ~/.my.cnf

jedoch ein $ HOME Variable funktioniert:

HOME =/home/admin mysql - -defaults-extra-file = $ HOME/.my.cnf

Als Alternative funktioniert mein Cronjob, wenn ich ihn von/etc/crontab nach/var/cron/tabs/root verschiebe (mit 'crontab -e' als root).

Verwandte Themen