Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  docker MySQL melaksanakan sandaran automatik setiap hari!

docker MySQL melaksanakan sandaran automatik setiap hari!

藏色散人
藏色散人ke hadapan
2022-12-08 16:56:493060semak imbas

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

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam