Maison >Opération et maintenance >Docker >docker MySQL réalise une sauvegarde automatique chaque jour !
Cet article explique principalement comment sauvegarder et restaurer la base de données Docker MySQL, et comment mettre en œuvre une sauvegarde automatique chaque jour. J'espère que cela sera utile aux amis dans le besoin !
Sauvegarde et restauration de la base de données Docker MySQL, ainsi que sauvegarde automatique planifiée quotidiennement
Première : Sauvegarde
Afficher Docker mysql
ubuntu@ubuntu:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a30ead8a26fc mysql:8.0.27 "docker-entrypoint.s…" 10 seconds ago Up 7 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
Première méthode :
Étape par étape, sauvegarde régulière, entrez dans le conteneur et utilisez mysqldump pour sauvegarder. [Apprentissage recommandé : tutoriel vidéo docker]
sudo docker exec -it mysql /bin/bash #进入mysql容器 mysqldump -uroot -p123456 --all-databases > emp_`date +%F`.sql #在容器中备份所有数据库,并以日期命名 exit #退出容器 sudo docker cp mysql:emp_2022-03-17.sql /var/backup/ #将容器中的备份文件,复制到本地备份文件夹中
s'affiche comme suit :
ubuntu@ubuntu:~$ sudo docker exec -it mysql /bin/bash root@a30ead8a26fc:/# mysqldump -uroot -p123456 --all-databases > emp_`date +%F`.sql mysqldump: [Warning] Using a password on the command line interface can be insecure. root@a30ead8a26fc:/# exit exit ubuntu@ubuntu:~$ sudo docker cp mysql:emp_2022-03-17.sql /var/backup/ ubuntu@ubuntu:~$ ll /var/backup/ total 11492 drwxrwxrwx 2 root root 4096 Mar 17 15:45 ./ drwxr-xr-x 14 root root 4096 Mar 14 17:49 ../ -rw-r--r-- 1 root root 3915599 Mar 17 15:42 emp_2022-03-17.sql
Méthode 2 :
Une étape, deux commandes sont disponibles
1) : (Recommandé, la restauration ne pose aucun problème)
sudo docker exec mysql(容器名) sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +%F`.sql
2) : (Non recommandé, il y a un problème avec la restauration)
La plupart des méthodes de sauvegarde sur Internet sont de cette façon, mais j'ai un problème avec la restauration. Vous pouvez essayer la version 5.7.
sudo docker exec -it mysql(容器名) mysqldump -uroot -p123456 --all-databases > /var/backup/music_`date +%F`.sql
Remarque : cela peut être dû à la version (ma version est 8.0). Il n'y a aucun problème avec ce type de sauvegarde, mais il y aura des problèmes avec la restauration. L'erreur est signalée comme suit :
ubuntu@ubuntu:~$ sudo mysql -uroot -p < emp_2022-03-15.sql Enter password: ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqldump: [Warning] Using a password on the command line interface can be insec' at line 1
Vous pouvez également entrer dans la base de données et utiliser la source de commande pour restaurer, mais l'erreur apparaîtra toujours, mais sera ignorée, ce qui entraînera finalement une récupération incomplète des données. Tout cela n'est pas recommandé.
Deux : Restaurer
1) : Restaurer dans un non-conteneur
1 : Commande directe pour restaurer
mysql -uroot -p123456 < /var/backup/emp_2022-03-15.sql
2 : Restauration de la source après avoir entré mysql
mysql -uroot -p source /var/backup/emp_2022-03-15.sql
2) : Restauration du conteneur mysql
Besoin d'entrer dans le conteneur mysql à restaurer.
#复制备份文件到容器中的var目录 sudo docker cp /var/backup/emp_2022-03-17.sql mysql:/var #进入容器 sudo docker exec -it mysql bin/bash #进入mysql mysql -uroot -p #使用备份sql恢复数据库 source /var/backup/emp_2022-03-15.sql #或者不进入mysql直接容器中还原 mysql -uroot -p123456 < /var/backup/emp_2022-03-15.sql
Trois : Tâches planifiées
1) : Définir des tâches planifiées
crontab -e
Le contenu est le suivant :
0 2 * * * find /backup/ -mtime +1 -name "*.sql" -delete && sudo docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +%F`.sql
Description de la commande :
Exécutée à 2 heures du matin tous les jours
find /backup/ -mtime +1 -name "*.sql" -delete #删除2天前的备份任务,即保留3个版本。根据需要自己选择。
2) : Les tâches planifiées ne sont pas exécutées
Mise à jour : Deuxièmement, il a été découvert qu'il n'y avait pas de fichier de sauvegarde, alors vérifiez le journal cron. Sinon, veuillez activer le journal cron. La méthode est la suivante :
#编辑系统日志文件 vim /etc/rsyslog.d/50-default.conf #去掉前面的#注释符号 cron.* /var/log/cron.log #重启日志服务 systemctl restart rsyslog.service
Vérifiez l'affichage de la tâche planifiée
cat /var/log/cron.log .... CRON[2015636]: (root) CMD (find /backup/ -mtime +1 -name "*.sql" -delete && sudo docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +) ....
et constatez que %F`.sql après la commande n'est pas affiché. La raison est que % est une variable et qu'un caractère d'échappement y est ajouté. conserver les personnages originaux.
0 2 * * * find /backup/ -mtime +1 -name "*.sql" -delete && sudo docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +\%F`.sql
Enregistrez et le test prendra effet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!