docker
最近迷恋使用doker容器,在docker容器进行部署MySQL,以前针对容器的安全性一直存在怀疑的态度,不过如果能够通过容器也能数据库备份问题,就这样开始docker容器备份
备份和恢复:
第一种方式
1
2
3
4
5
6
7
8
9
10
|
#全部备份 [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;
1
2
|
[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. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
导出数据库表数据 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的数据存放
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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 "备份完成" |
1
2
3
4
|
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
1
2
3
4
5
|
#每天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.cnblogs.com/pushuiyu/archive/2023/02/17/17129487.html