Maison >Opération et maintenance >Docker >docker MySQL réalise une sauvegarde automatique chaque jour !

docker MySQL réalise une sauvegarde automatique chaque jour !

藏色散人
藏色散人avant
2022-12-08 16:56:493103parcourir

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 &#39;mysqldump: [Warning] Using a password on the command line interface can be insec&#39; 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 &#39;exec mysqldump --all-databases -uroot -p123456 --all-databases&#39; > /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 &#39;exec mysqldump --all-databases -uroot -p123456 --all-databases&#39; > /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 &#39;exec mysqldump --all-databases -uroot -p123456 --all-databases&#39; > /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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer