web-dev-qa-db-fra.com

mysqldump ne fonctionne pas dans crontab

J'essaie d'ajouter une tâche cron dans la crontab (serveur Ubuntu) qui sauvegarde la base de données mysql.

L'exécution du script dans le terminal en tant que root fonctionne bien, mais rien ne se passe dans la crontab. J'ai essayé de l'exécuter toutes les minutes, mais aucun fichier ne figure dans le dossier/var/db_backups.

(Les autres tâches fonctionnent bien)

Voici le cronjob:

* * * * * mysqldump -u racine -PHERE IT THE IS MON MOT DE PASSE --all-database | gzip>/var/db_backups/database_`date +% d% m% y`.sql.gz

quel peut être le problème?

15
xspecial

Vous devez échapper à% caractère avec \

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

Vérifiez les journaux cron (devrait être dans/var/log/syslog) Vous pouvez utiliser grep pour les filtrer.

grep CRON/var/log/syslog

Aussi, vous pouvez vérifier votre boîte aux lettres locale pour voir s'il y a des mails cron 

/ var/mail/nom d'utilisateur 

Vous pouvez également configurer un autre courrier de réception dans votre fichier crontab

[email protected]

5
adam187

J'essayais la même chose mais j'ai trouvé que le dump avait été créé avec 0KB. J'ai donc eu connaissance de la solution qui m'a permis de gagner du temps.

Commande:

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

REMARQUE: 1) Vous pouvez modifier le réglage de l'heure selon vos besoins. J'ai mis tous les jours dans la commande ci-dessus.

2) Assurez-vous de saisir votre nom d'utilisateur, mot de passe et base de données dans les guillemets simples (').

3) Notez la commande ci-dessus dans Crontab.

J'espère que ça aidera quelqu'un.

2
Krupal Patel

Vous pouvez également créer une commande personnalisée mycommand . À quoi vous pouvez ajouter plus d'options. Vous devez donner des autorisations d'exécution.

Il est préférable de disposer d'un dossier dans lequel toutes vos sauvegardes sont stockées, dans ce cas, utilisez un dossier en écriture "sauvegarde" qui sera d'abord créé dans "votre maison" par exemple.

Ma commande dans "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: Exécute le 1er jour de chaque mois.

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

J'espère que ça aide un peu.

1
alditis

Créez un nouveau fichier et exécutez-y le code pour le vider dans un emplacement de fichier et le compresser Exécuter ce script via un cron

0
user3277973

J'utilise Percona Server (un fork de MySQL) sur Ubuntu. Le paquet (très probablement aussi le paquet MySQL habituel) est fourni avec un compte de maintenance appelé debian-sys-maint. Pour que ce compte puisse être utilisé, les informations d'identification sont créées lors de l'installation du package. et ils sont stockés dans /etc/mysql/debian.cnf.

Et maintenant la surprise: Un lien symbolique /root/.my.cnf pointant vers /etc/mysql/debian.cnf est également installé.

Ce fichier est un fichier d’option lu automatiquement lors de l’utilisation de mysql ou mysqldump. Donc, fondamentalement, vous avez ensuite reçu deux fois vos identifiants de connexion - dans ce fichier et en ligne de commande. C'était le problème que j'avais.

Donc, une solution pour éviter cette condition consiste à utiliser --no-defaults option pour mysqldump. Le fichier d'options ne sera alors pas lu. Cependant, vous fournissez les informations d'identification via la ligne de commande. Ainsi, toute personne pouvant émettre une ps peut voir le mot de passe une fois la sauvegarde exécutée. Il est donc préférable de créer un fichier d’option propre avec nom d’utilisateur et mot de passe et de le transmettre à mysqldump via --defaults-file .

Vous pouvez créer le fichier d'options en utilisant mysql_config_editor ou tout simplement dans n'importe quel éditeur.

Exécuter mysqldump via Sudo à partir de la ligne de commande en tant que root fonctionne, simplement parce que Sudo ne change généralement pas $HOME, donc .my.cnf est introuvable. Lorsque vous exécutez une tâche cron, c'est le cas.

0
Shi

Ok, j'ai eu un problème similaire et j'ai pu le réparer.

Dans votre cas, vous pouvez insérer cette commande mysqldump dans un script Puis rechercher le profil de l'utilisateur qui exécute la commande mysqldump , Par exemple: 

. /home/bla/.bash_profile

puis utilisez le chemin absolu de la commande 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