通过docker环境mysqldump全量备份mysql数据库

发布时间 2023-12-26 15:48:28作者: 06

应用场景:生产环境mysql数据库大小5G以内(超过15G推荐使用xtrabackup工具),在数据库以外的一台机器上做每天全量备份,以防止数据丢失

1.首先导入最新的mysql 镜像

可以联网的环境下

#下载docker镜像
docker pull mysql:5.7.44
#查看docker镜像
docker images

离线的情况下
在外网机器上

#下载docker镜像
docker pull mysql:5.7.44
#导出docker镜像
docker save -o mysql_5.7.44.tar 镜像id

然后把tar包传入内网机器

#导入docker镜像
docker load -i mysql_5.7.44.tar
#给镜像打tag
docker tag 镜像id mysql:5.7.44
#查看docker镜像
docker images

2.制作脚本

在/data/backups/script路径下新建mysqldump-full.sh脚本

脚本内容如下,这里为每天覆盖备份文件,不用在意删除旧文件问题

docker run --rm   -v /data/backups/mysql:/backups  mysql:5.7.44 \
mysqldump -h 需要备份的mysql ip -uroot -p'密码' --all-databases --max_allowed_packet=1GB --quick  --triggers --routines --events --single-transaction --result-file=/backups/xxxx_prod.sql

给脚本赋执行权限

chmod 755 mysqldump-full.sh

执行脚本,测试备份是否成功

 

3.新建crontab任务

crontab -e

这里的策略为,每晚3点全量备份

0 3 * * * sh /data/backups/script/mysqldump-full.sh >/data/backups/mysql/cron.log  2>&1

遇到的问题:

备份文件的生成为当天11点,定时任务为3点,Ubuntu的crontab执行时间相差8小时

问题原因:crontab的时区不对。系统时区是正常的

处理方法:

修改 contab 时区:

vim /etc/crontab

添加变量:

CRON_TZ=Asia/Shanghai

重启cron服务:

sudo service cron restart

 

参考文档:

https://www.jianshu.com/p/ca0a8561e537

https://blog.csdn.net/u012447842/article/details/103684585