Maison > Opération et maintenance > Docker > le corps du texte

docker MySQL réalise une sauvegarde automatique chaque jour !

藏色散人
Libérer: 2022-12-08 20:33:01
avant
3012 Les gens l'ont consulté

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
Copier après la connexion

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/
#将容器中的备份文件,复制到本地备份文件夹中
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

2 : Restauration de la source après avoir entré mysql

mysql -uroot -p
source /var/backup/emp_2022-03-15.sql
Copier après la connexion

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
Copier après la connexion

Trois : Tâches planifiées

1) : Définir des tâches planifiées

crontab -e
Copier après la connexion

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
Copier après la connexion

Description de la commande :

Exécutée à 2 heures du matin tous les jours

find /backup/ -mtime +1 -name "*.sql" -delete
#删除2天前的备份任务,即保留3个版本。根据需要自己选择。
Copier après la connexion

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
Copier après la connexion

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 +)
....
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!