Artikel ini terutamanya memperkenalkan cara membuat sandaran dan memulihkan pangkalan data MySQL docker, dan cara melaksanakan sandaran automatik setiap hari saya harap ia akan membantu rakan yang memerlukan.
Sandarkan dan pulihkan pangkalan data MySQL docker, dan sandaran harian automatik
1: Sandaran
Lihat 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
Kaedah 1:
Langkah demi langkah, lakukan sandaran biasa, masukkan bekas dan gunakan mysqldump untuk membuat sandaran. [Pembelajaran yang disyorkan: tutorial video 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/ #将容器中的备份文件,复制到本地备份文件夹中
ditunjukkan seperti berikut:
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
Kaedah 2:
Satu langkah, di sini adalah dua Perintah ini boleh dilaksanakan
1): (Disyorkan, tiada masalah dengan pemulihan)
sudo docker exec mysql(容器名) sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +%F`.sql
2): (Tidak disyorkan, ada masalah dengan pemulihan)
Kebanyakan dalam talian adalah seperti ini. Terdapat kaedah sandaran, tetapi saya menghadapi masalah untuk memulihkannya. Anda boleh mencuba versi 5.7.
sudo docker exec -it mysql(容器名) mysqldump -uroot -p123456 --all-databases > /var/backup/music_`date +%F`.sql
Nota: Ini mungkin disebabkan oleh versi (versi saya ialah 8.0 Tiada masalah dengan sandaran seperti ini, tetapi akan ada masalah dengan pemulihan). Ralat dilaporkan seperti berikut:
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
Anda juga boleh memasukkan pangkalan data dan menggunakan sumber arahan untuk memulihkan, tetapi ralat masih akan muncul, tetapi akan diabaikan, mengakibatkan pemulihan data tidak lengkap pada akhirnya . Semua ini tidak digalakkan.
Dua: Pulihkan
1): Pulihkan dalam bukan bekas
1: Perintah langsung untuk memulihkan
mysql -uroot -p123456 < /var/backup/emp_2022-03-15.sql
2: Pulihkan sumber selepas masuk mysql
mysql -uroot -p source /var/backup/emp_2022-03-15.sql
2): Pemulihan mysql bekas
perlu dipulihkan dalam bekas mysql.
#复制备份文件到容器中的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
Tiga: Tugas berjadual
1): Tetapkan tugas berjadual
crontab -e
Kandungan adalah seperti berikut:
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
Arahan perihalan:
Dilaksanakan pada pukul 2 pagi setiap hari
find /backup/ -mtime +1 -name "*.sql" -delete #删除2天前的备份任务,即保留3个版本。根据需要自己选择。
2): Tugasan yang dijadualkan tidak dilaksanakan
Kemas kini: Saya tidak menemui fail sandaran pada hari berikutnya, semak log cron. Jika tidak, sila dayakan log cron. Kaedahnya adalah seperti berikut:
#编辑系统日志文件 vim /etc/rsyslog.d/50-default.conf #去掉前面的#注释符号 cron.* /var/log/cron.log #重启日志服务 systemctl restart rsyslog.service
Lihat paparan tugas berjadual
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 +) ....
Saya mendapati bahawa %F`.sql selepas arahan tidak dipaparkan kerana % ialah pembolehubah di dalamnya dan melarikan watak untuk mengekalkan watak asal.
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
Simpan dan ujian akan berkuat kuasa.
Atas ialah kandungan terperinci docker MySQL melaksanakan sandaran automatik setiap hari!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!