docker MySQL實現每天定時自動備份!

本篇文章主要給大家介紹docker mysql數據庫是如何備份與還原,以及如何實現每天定時自動備份的,希望對需要的朋友有所幫助!

docker mysql數據庫的備份與還原,以及每天定時自動備份

一:備份

查看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

方法一:

一步一步來,常規備份,進入容器中,用mysqldump備份。【推薦學習: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/ #將容器中的備份文件,復制到本地備份文件夾中

顯示如下:

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

方法二:

一步到位,這里有兩種命令可行

1):(推薦,還原沒問題)

sudo?docker?exec?mysql(容器名)?sh?-c?'exec?mysqldump?--all-databases?-uroot?-p123456?--all-databases'?>?/var/backup/music_`date?+%F`.sql

2):(不推薦,還原有問題)

網上大多數是這種備份方法,但是我還原有問題,5.7版本的可以試試。

sudo?docker?exec?-it?mysql(容器名)?mysqldump?-uroot?-p123456?--all-databases?>?/var/backup/music_`date?+%F`.sql

注:可能版本原因(本人版本8.0),這種備份時沒問題,但是還原會出問題。報錯如下:

ubuntu@ubuntu:~$?sudo?mysql?-uroot?-p?<p>也可以用進入數據庫,用命令source還原,但是報錯還是會出現,但是會忽略,導致最后恢復數據不完整。所有這種不推薦。</p><p>二:還原</p><p>1):非容器中還原</p><p>1:直接命令還原</p><pre class="brush:php;toolbar:false">mysql?-uroot?-p123456?<p>2:進入mysql后source還原</p><pre class="brush:php;toolbar:false">mysql?-uroot?-p source?/var/backup/emp_2022-03-15.sql

2):容器mysql還原

需要進入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?<p>三:定時任務</p><p>1):設置定時任務</p><pre class="brush:php;toolbar:false">crontab?-e

內容如下:

0?2?*?*?*?find?/backup/?-mtime?+1?-name?"*.sql"?-delete?&amp;&amp;?sudo?docker?exec?mysql?sh?-c?'exec?mysqldump?--all-databases?-uroot?-p123456?--all-databases'?&gt;?/var/backup/music_`date?+%F`.sql

命令說明:

每天凌晨2點執行

find?/backup/?-mtime?+1?-name?"*.sql"?-delete #刪除2天前的備份任務,即保留3個版本。根據需要自己選擇。

2):定時任務不執行

更新:第二天發現沒有備份文件,查看cron日志。如沒有,請開啟cron日志。方法如下:

#編輯系統日志文件 vim?/etc/rsyslog.d/50-default.conf #去掉前面的#注釋符號 cron.*??????/var/log/cron.log #重啟日志服務 systemctl?restart?rsyslog.service

查看定時任務顯示

cat?/var/log/cron.log? .... CRON[2015636]:?(root)?CMD?(find?/backup/?-mtime?+1?-name?"*.sql"?-delete?&amp;&amp;?sudo?docker?exec?mysql?sh?-c?'exec?mysqldump?--all-databases?-uroot?-p123456?--all-databases'?&gt;?/var/backup/music_`date?+) ....

發現命令后面 %F`.sql 并沒有顯示,原因是%在里面為變量了,加上轉義符,讓保持原來的字符。

0?2?*?*?*?find?/backup/?-mtime?+1?-name?"*.sql"?-delete?&amp;&amp;?sudo?docker?exec?mysql?sh?-c?'exec?mysqldump?--all-databases?-uroot?-p123456?--all-databases'?&gt;?/var/backup/music_`date?+%F`.sql

保存,測試生效。

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享