应用场景:生产环境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