Docker 下MySQL数据库的备份和恢复的操作方法
|
docker
最近迷恋使用doker容器,在docker容器进行部署MySQL,以前针对容器的安全性一直存在怀疑的态度,不过如果能够通过容器也能数据库备份问题,就这样开始docker容器备份
备份和恢复:
第一种方式- #全部备份
- [root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /home/movice202302.sql
- #备份数据转移
- [root@localhost home]# docker cp /home/movice202302.sql salve-mysql:/var # salve-mysql 是容器
- #全部恢复
- root@6faa12ee2d96:/# mysql -uroot -p123456 < /var/movice202302.sql
- #查看恢复数据库情况:
- mysql -uroot -p123456 -e 'drop database SCHOOL;'
- mysql -uroot -p123456-e 'SHOW DATABASES;'
复制代码 恢复:
导出数据库的表结构和表数据
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.
复制代码- 导出数据库表数据
- 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
- 导出数据库表结构
- 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
- 导出数据库中某个表的表结构
- 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
- 导出数据库中某个表的表结构和表数据
- 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
复制代码 自动化备份mysql
1 创建目录/usr/data用于存放mysql的数据存放- 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 编辑 备份脚本和清除大于给定期限的备份数据backup.sh,back_clearn.sh- vi backup.sh
- BACKUP_ROOT=/usr/data/
- BACKUP_FILEDIR=$BACKUP_ROOT/mysql_bak
- #当前日期
- DATE=$(date +%Y%m%d)
- # 获取容器
- mysqlid=docker ps -aqf "name=c_mysql"
- #查询所有数据库
- DATABASES=$(docker exec -i ${mysqlid} mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")
- #循环数据库进行备份
- 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---------
复制代码 设置定时任务
利用Linux crontab 进行设置定时任务
查看定时任务
crotab -l
修改定时任务
crontab -e- #每天02:00自动清理大于7天的mysql备份
- 00 2 * * * /usr/data/backup_clean.sh > /usr/data/logs/backup_full_clean.log 2>&1
- #每天11:00自动备份mysql
- 00 11 * * * /usr/data/backup.sh > /usr/data/logs/backup.log 2>&1
复制代码 到此这篇关于Docker 下MySQL数据库的备份和恢复的文章就介绍到这了,更多相关MySQL数据库的备份和恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://www.jb51.net/article/275649.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|
|
|
发表于 2023-2-25 11:34:22
举报
回复
分享
|
|
|
|