定期备份Docker下的mysql数据库
话不多说直接进入主题
1.新建脚本,编写脚本内容
vi /usr/mysqlBackup.sh
#!/bin/bash
# 设置mysql的登录用户名和密码(根据实际情况填写)
mysql_user="root" #MySQL备份用户
mysql_password="root" #MySQL备份用户密码
mysql_host="localhost"
mysql_port="3306" #MySQL端口号
mysql_charset="utf8mb4" #MySQL编码方式
# 备份文件存放地址(根据实际情况填写)
backup_location=/usr/mysql #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
# 是否删除过期数据
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=7 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
backup_dir=$backup_location
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
# 备份指定数据库中数据(此处假设数据库是test)
docker exec -it 容器名/容器ID mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B test1 > $backup_dir/test-$backup_time.sql
# 删除过期数据
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
`find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
编写完毕后,保存退出
接下来我们测试一下编写的脚本是否可用(直接进入文件目录)
. mysqlBackup.sh
执行之后,发现报如下错误
报错:the input device is not a TTY
执行docker命令的脚本的时候报错如上标题,tty(终端设备的统称): tty一词源于Teletypes,或teletypewriters。这个的意思是说后台linux执行的时候没有终端设备。我们一般执行docker里的命令时候都喜欢加上-it 这个参数,这里的-it 就是表示终端设备。所以我们在脚本的命令中去掉t
docker exec -i 容器名/容器ID mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B test1 > $backup_dir/test-$backup_time.sql
改写完毕之后,保存退出vi,重新执行一下脚本文件,进入备份文件存放地址,我们就会发现已经有一份数据库备份文件存在。
接下来我们需要做的就是定时备份
这时候需要使用crontab命令来定时执行备份任务
执行之前我们先来了解一下 crontab的文件

前四行是用来配置crontab任务运行的环境变量
第一行SHELL变量指定了系统要使用哪个shell,这里是bash
第二行PATH变量指定了系统执行命令的路径
第三行MAILTO变量指定了crontab的任务执行信息将通过电子邮件发送给root用户
如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
再使用crontab时需注意一下问题:
数字的表示最好用2为阿拉伯数字显示
周和日最好不要同时用
定时任务要加注解
可以定向到日志文件或者空文件
定时任务一定是绝对路径,且目录必须存在才能出结果
crontab 服务一定要开启运行
网上练习参考
##每月每天凌晨3点30分和中午12点20分执行test.sh脚本
30 3,12 * * * /home/test.sh
##每月每天每隔6小时的每30分钟执行test.sh脚本
30 */6 * * * /home/test.sh
##每月每天早上8点到下午18点每隔2小时的每30分钟执行test.sh脚本
30 8-18/2 * * * /etc/init.d/network restart
##每月每天晚上21点30分执行test.sh脚本
30 21 * * * /etc/init.d/network restart
##每月1号、10号、22号凌晨4点45分执行test.sh脚本
45 4 1,10,22 * * /etc/init.d/network restart
##8月份周一、周日凌晨1点10分执行test.sh脚本
10 1 * 8 6,0 /etc/init.d/network restart
##每月每天每小时整点执行test.sh脚本
00 */1 * * * /etc/init.d/network restart
2.新建定时任务
#新建定时任务命令
crontab -e
编写任务文件(每隔六小时备份一次)
1 */6 * * * cd /usr;sh mysqlBackupsh >> log.txt 2>>log.txt
#查看定时任务命令
crontab -l
#删除所有定时任务命令
crontab -r
本文介绍了如何在Docker环境下定期备份mysql数据库。首先,创建一个备份脚本,处理执行时的TTY错误。然后,利用crontab设置定时任务,详细讲解了crontab语法,并给出了不同场景下的定时任务示例,确保数据库备份的自动化和可靠性。
2465

被折叠的 条评论
为什么被折叠?



