定期备份Docker下的mysql数据库

本文介绍了如何在Docker环境下定期备份mysql数据库。首先,创建一个备份脚本,处理执行时的TTY错误。然后,利用crontab设置定时任务,详细讲解了crontab语法,并给出了不同场景下的定时任务示例,确保数据库备份的自动化和可靠性。

定期备份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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值