本篇文章主要給大家介紹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?&&?sudo?docker?exec?mysql?sh?-c?'exec?mysqldump?--all-databases?-uroot?-p123456?--all-databases'?>?/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?&&?sudo?docker?exec?mysql?sh?-c?'exec?mysqldump?--all-databases?-uroot?-p123456?--all-databases'?>?/var/backup/music_`date?+) ....
發現命令后面 %F`.sql 并沒有顯示,原因是%在里面為變量了,加上轉義符,讓保持原來的字符。
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
保存,測試生效。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦