Docker?下MySQL數(shù)據(jù)庫(kù)的備份和恢復(fù)的操作方法
docker
最近迷戀使用doker容器,在docker容器進(jìn)行部署MySQL,以前針對(duì)容器的安全性一直存在懷疑的態(tài)度,不過如果能夠通過容器也能數(shù)據(jù)庫(kù)備份問題,就這樣開始docker容器備份
備份和恢復(fù):
第一種方式
#全部備份 [root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /home/movice202302.sql #備份數(shù)據(jù)轉(zhuǎn)移 [root@localhost home]# docker cp /home/movice202302.sql salve-mysql:/var # salve-mysql 是容器 #全部恢復(fù) root@6faa12ee2d96:/# mysql -uroot -p123456 < /var/movice202302.sql #查看恢復(fù)數(shù)據(jù)庫(kù)情況: mysql -uroot -p123456 -e 'drop database SCHOOL;' mysql -uroot -p123456-e 'SHOW DATABASES;'
恢復(fù):
導(dǎo)出數(shù)據(jù)庫(kù)的表結(jié)構(gòu)和表數(shù)據(jù)
mysqldump -uroot -pdbpasswd db_name >db.sql;
[root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump -uroot -p123456 movice_fuli' > /home/movie0216.sql Warning: Using a password on the command line interface can be insecure.
導(dǎo)出數(shù)據(jù)庫(kù)表數(shù)據(jù) mysqldump -uroot -pdbpasswd -t db_name >db.sql; root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump -uroot -p123456 -t movice_fuli' > /home/movie.sql 導(dǎo)出數(shù)據(jù)庫(kù)表結(jié)構(gòu) mysqldump -uroot -pdbpasswd -d db_name >db.sql; root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump -uroot -p123456 -d movice_fuli' > /home/movie.sql 導(dǎo)出數(shù)據(jù)庫(kù)中某個(gè)表的表結(jié)構(gòu) mysqldump -uroot -pdbpasswd -d db_name table_name >db.sql root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump -uroot -p123456 -d movice_fuli user' > /home/movie.sql 導(dǎo)出數(shù)據(jù)庫(kù)中某個(gè)表的表結(jié)構(gòu)和表數(shù)據(jù) mysqldump -uroot -pdbpasswd db_name table_name >db.sql; root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump -uroot -p123456 movice_fuli user' > /home/movie.sql
自動(dòng)化備份mysql
1 創(chuàng)建目錄/usr/data用于存放mysql的數(shù)據(jù)存放
root@localhost ~]# cd /usr [root@localhost usr]# ls bin etc games include lib lib64 libexec local sbin share src tmp [root@localhost usr]# mkdir data [root@localhost usr]# ls bin data etc games include lib lib64 libexec local sbin share src tmp [root@localhost usr]# cd data [root@localhost data]# ls [root@localhost data]# touch back_clean.sh [root@localhost data]# touch backup .sh [root@localhost data]# mkdir logs [root@localhost data]# mkdir mysql_bak [root@localhost data]# ls back_clean.sh backup logs mysql_bak [root@localhost data]# rm backup rm:是否刪除普通空文件 "backup"?y [root@localhost data]# touch backup.sh [root@localhost data]# ls back_clean.sh backup.sh logs mysql_bak
2 編輯 備份腳本和清除大于給定期限的備份數(shù)據(jù)backup.sh,back_clearn.sh
vi backup.sh BACKUP_ROOT=/usr/data/ BACKUP_FILEDIR=$BACKUP_ROOT/mysql_bak #當(dāng)前日期 DATE=$(date +%Y%m%d) # 獲取容器 mysqlid=docker ps -aqf "name=c_mysql" #查詢所有數(shù)據(jù)庫(kù) DATABASES=$(docker exec -i ${mysqlid} mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql") #循環(huán)數(shù)據(jù)庫(kù)進(jìn)行備份 for db in $DATABASES do echo if [[ "${db}" =~ "+" ]] || [[ "${db}" =~ "|" ]];then echo "jump over ${db}" else echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN---------- docker exec -i ${mysqlid} mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz echo ${db} echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE---------- echo fi done echo "備份完成"
vi back_clear.sh echo ----------CLEAN BEGIN---------- find /usr/data/mysql_bak/ -mtime +7 -name "*.gz" -exec rm -rf {} \; echo ----------CLEAN COMPLETE---------
設(shè)置定時(shí)任務(wù)
利用Linux crontab 進(jìn)行設(shè)置定時(shí)任務(wù)
查看定時(shí)任務(wù)
crotab -l
修改定時(shí)任務(wù)
crontab -e
#每天02:00自動(dòng)清理大于7天的mysql備份 00 2 * * * /usr/data/backup_clean.sh > /usr/data/logs/backup_full_clean.log 2>&1 #每天11:00自動(dòng)備份mysql 00 11 * * * /usr/data/backup.sh > /usr/data/logs/backup.log 2>&1
到此這篇關(guān)于Docker 下MySQL數(shù)據(jù)庫(kù)的備份和恢復(fù)的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)庫(kù)的備份和恢復(fù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Vscode結(jié)合docker進(jìn)行開發(fā)的詳細(xì)過程
這篇文章主要介紹了如何使用Vscode結(jié)合docker進(jìn)行開發(fā),在本文中,我將提供一個(gè)在 Node 環(huán)境中運(yùn)行的 JavaScript 應(yīng)用程序示例。閱讀在容器內(nèi)開發(fā)以獲取所有技術(shù)堆棧的詳細(xì)文檔,需要的朋友可以參考下2021-07-07Docker容器化spring boot應(yīng)用詳解
本篇文章主要介紹了Docker容器化spring boot應(yīng)用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04Docker容器添加映射端口的兩種實(shí)現(xiàn)方法
本文主要介紹了Docker容器添加映射端口的兩種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目
這篇文章主要介紹了如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目,本文通過實(shí)例圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02