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?
Vous devez échapper à% caractère avec \
mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql
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
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.
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.
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
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.
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