In diesem Artikel wird hauptsächlich beschrieben, wie Sie die Docker-MySQL-Datenbank sichern und wiederherstellen und wie Sie jeden Tag eine automatische Sicherung implementieren. Ich hoffe, dass er Freunden in Not hilfreich sein wird!
Sicherung und Wiederherstellung der Docker-MySQL-Datenbank sowie täglich geplante automatische Sicherung
Eins: Sicherung
Docker-MySQL anzeigen
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
Methode eins:
Schritt für Schritt, regelmäßige Sicherung, betreten Sie den Container und verwenden Sie mysqldump sichern. [Empfohlenes Lernen: Docker-Video-Tutorial]
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/ #将容器中的备份文件,复制到本地备份文件夹中
wird wie folgt angezeigt:
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
Methode 2:
Ein Schritt, hier sind zwei mögliche Befehle
1): (Empfohlen, Wiederherstellung ist kein Problem)
sudo docker exec mysql(容器名) sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +%F`.sql
2) : (Nicht empfohlen, es gibt ein Problem mit der Wiederherstellung)
Die meisten Sicherungsmethoden im Internet funktionieren auf diese Weise, aber ich habe ein Problem mit der Wiederherstellung. Sie können die Version 5.7 ausprobieren.
sudo docker exec -it mysql(容器名) mysqldump -uroot -p123456 --all-databases > /var/backup/music_`date +%F`.sql
Hinweis: Es kann an der Version liegen (meine Version ist 8.0). Es gibt kein Problem mit dieser Art der Sicherung, aber es wird Probleme mit der Wiederherstellung geben. Der Fehler wird wie folgt gemeldet:
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
Sie können auch die Datenbank aufrufen und die Befehlsquelle zum Wiederherstellen verwenden, der Fehler wird jedoch weiterhin angezeigt, aber ignoriert, was letztendlich zu einer unvollständigen Datenwiederherstellung führt. All dies ist nicht zu empfehlen. Zwei: Wiederherstellen wiederherstellen.
mysql -uroot -p123456 < /var/backup/emp_2022-03-15.sql
Drei: Geplante Aufgaben
1): Geplante Aufgaben festlegen
mysql -uroot -p source /var/backup/emp_2022-03-15.sql
Der Inhalt ist wie folgt:
#复制备份文件到容器中的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
Befehlsbeschreibung:
Jeden Tag um 2 Uhr morgens ausführen
crontab -e
2): Geplante Aufgaben werden nicht ausgeführt
Update: Zweitens wurde festgestellt, dass keine Sicherungsdatei vorhanden war. Überprüfen Sie daher das Cron-Protokoll. Wenn nicht, aktivieren Sie bitte das Cron-Protokoll. Die Methode lautet wie folgt:
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
Überprüfen Sie die Anzeige der geplanten Aufgabe
find /backup/ -mtime +1 -name "*.sql" -delete #删除2天前的备份任务,即保留3个版本。根据需要自己选择。
und stellen Sie fest, dass %F`.sql nach dem Befehl nicht angezeigt wird. Der Grund dafür ist, dass % darin eine Variable ist und ein Escape-Zeichen hinzugefügt wird Behalten Sie die Originalcharaktere bei.
#编辑系统日志文件 vim /etc/rsyslog.d/50-default.conf #去掉前面的#注释符号 cron.* /var/log/cron.log #重启日志服务 systemctl restart rsyslog.service
Speichern und der Test wird wirksam.
Das obige ist der detaillierte Inhalt vonDocker MySQL implementiert jeden Tag ein automatisches Backup!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!