it-swarm.com.de

mysqldump funktioniert nicht in crontab

Ich versuche, einen cronjob in der crontab (Ubuntu-Server) hinzuzufügen, der die MySQL-Datenbank sichert.

Die Ausführung des Skripts im Terminal als root funktioniert gut, aber in der Crontab eingefügt passiert nichts. Ich habe versucht, es alle Minuten auszuführen, aber im Ordner/var/db_backups werden keine Dateien angezeigt.

(Andere Cronjobs funktionieren gut)

Hier ist der Cronjob:

* * * * * mysqldump -u root -pHERE THERE IS MEIN PASSWORT --all-database | gzip>/var/db_backups/database_`date +% d% m% y`.sql.gz

was kann das problem sein

15
xspecial

Sie müssen das Zeichen% mit \

mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql
59
The Java Guy

Überprüfen Sie die Cron-Protokolle (sollte sich in/var/log/syslog befinden) Sie können sie mithilfe von grep herausfiltern.

grep CRON/var/log/syslog

Sie können auch in Ihrem lokalen Postfach nachsehen, ob es Cron-Mails gibt 

/ var/mail/Benutzername 

Sie können auch andere empfangende E-Mails in Ihrer Crontab-Datei einrichten

[email protected]

5
adam187

Ich habe das gleiche versucht, aber ich fand, dass dump mit 0KB erstellt wurde. Daher habe ich die Lösung kennen gelernt, die meine Zeit gespart hat.

Befehl :

0 0 * * * mysqldump -u 'USERNAME' -p'PASSWORD' DATEBASE > /root/liveDB_`date +\%Y\%m\%d_\%H\%M\%S`.sql

HINWEIS: 1) Sie können die Zeiteinstellung nach Ihren Wünschen ändern. Ich habe jeden Tag oben Befehl gesetzt.

2) Vergewissern Sie sich, dass Sie USERNAME, PASSWORD und DATABASE in einem einfachen Anführungszeichen (') eingeben.

3) Schreiben Sie den obigen Befehl in Crontab auf.

Ich hoffe das hilft jemandem.

2
Krupal Patel

Alternativ können Sie einen benutzerdefinierten Befehl meinBefehl erstellen. Zu denen Sie weitere Optionen hinzufügen können. Sie müssen Ausführungsberechtigungen erteilen.

Es ist vorzuziehen, über einen Ordner zu verfügen, in dem alle Ihre Sicherungen gespeichert werden. In diesem Fall verwenden Sie einen beschreibbaren Ordner "backup", der zum Beispiel zuerst bei "zu Hause" erstellt wird.

Mein Befehl in "usr/local/bin/mycommand":

#!/bin/bash
MY_USER="your_user"
MY_PASSWORD="your_pass"
MY_HOME="your_home"
case $1 in 
"backupall")
    cd $MY_HOME/backup
    mysqldump --opt --password=$MY_PASSWORD --user=$MY_USER  --all-databases > bckp_all_$(date +%d%m%y).sql
    tar -zcvf bckp_all_$(date +%d%m%y).tgz bckp_all_$(date +%d%m%y).sql
    rm bckp_all_$(date +%d%m%y).sql;;
*)  echo "Others";;
esac

Cron: Führt den 1. Tag jedes Monats aus.

0 0 1 * * /usr/local/bin/mycommand backupall

Ich hoffe es hilft etwas.

1
alditis

Erstellen Sie eine neue Datei und führen Sie den Code dort aus, um ihn in einen Dateispeicherort zu kopieren und zu komprimieren. Führen Sie das Skript über einen Cron aus

0
user3277973

Ich benutze Percona Server (einen MySQL-Zweig) auf Ubuntu. Das Paket (sehr wahrscheinlich auch das reguläre MySQL-Paket) wird mit einem Wartungskonto namens debian-sys-maint geliefert. Damit dieses Konto verwendet werden kann, werden die Berechtigungsnachweise bei der Installation des Pakets erstellt. und sie werden in /etc/mysql/debian.cnf gespeichert.

Und jetzt die Überraschung: Ein Symlink /root/.my.cnf, der auf /etc/mysql/debian.cnf zeigt, wird ebenfalls installiert.

Diese Datei ist eine Optionsdatei wird automatisch gelesen, wenn mysql oder mysqldump verwendet wird. Im Grunde hatten Sie dann zweimal Anmeldeinformationen - in dieser Datei und in der Befehlszeile. Dies war das Problem, das ich hatte.

Eine Lösung, um diese Bedingung zu vermeiden, ist die Verwendung der Option --no-defaults für mysqldump. Die Optionsdatei wird dann nicht gelesen. Sie geben jedoch Anmeldeinformationen über die Befehlszeile an, sodass jeder, der eine ps ausgeben kann, das Kennwort tatsächlich sehen kann, sobald die Sicherung ausgeführt wird. Es empfiehlt sich also, eine eigene Optionsdatei mit Benutzername und Passwort anzulegen und diese über --defaults-file an mysqldump zu übergeben.

Sie können die Optionsdatei mit mysql_config_editor oder einfach in einem beliebigen Editor erstellen.

Das Ausführen von mysqldump über Sudo von der Befehlszeile aus, da root funktioniert, nur weil Sudo normalerweise $HOME nicht ändert, sodass .my.cnf dann nicht gefunden wird. Wenn es als Cronjob läuft, ist es das.

0
Shi

Local Host mysql Backup: 0 1 * * */usr/local/mysql/bin/mysqldump -uroot -ppassword --opt Datenbank> /path/to/directory/filename.sql

(Zwischen -p und Passwort oder -u und Benutzername ist kein Leerzeichen. Ersetzen Sie root durch einen korrekten Datenbank-Benutzernamen.)

Für mich geht das. Kein Leerzeichen zwischen -p und Passwort oder -u und Benutzername

0
张春吉

Ok, ich hatte ein ähnliches Problem und konnte das Problem beheben.

In Ihrem Fall könnten Sie den Befehl mysqldump in ein Skript Einfügen und dann das Profil des Benutzers aufrufen, der den Befehl mysqldump Ausführt, z. B .: 

. /home/bla/.bash_profile

verwenden Sie dann den absoluten Pfad des Befehls mysqldump

/usr/local/mysql/bin/mysqldump -u root -pHERE THERE IS MY PASSWORD --all-databases | gzip > /var/db_backups/database_`date +%d%m%y`.sql.gz
0
niroshan.l