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

docker MySQL melaksanakan sandaran automatik setiap hari!

藏色散人
Lepaskan: 2022-12-08 20:33:01
ke hadapan
3093 orang telah melayarinya

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
Salin selepas log masuk

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/
#将容器中的备份文件,复制到本地备份文件夹中
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

2: Pulihkan sumber selepas masuk mysql

mysql -uroot -p
source /var/backup/emp_2022-03-15.sql
Salin selepas log masuk

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
Salin selepas log masuk

Tiga: Tugas berjadual

1): Tetapkan tugas berjadual

crontab -e
Salin selepas log masuk

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
Salin selepas log masuk

Arahan perihalan:

Dilaksanakan pada pukul 2 pagi setiap hari

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

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
Salin selepas log masuk

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 +)
....
Salin selepas log masuk

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
Salin selepas log masuk

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!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan