Linux-Docker定时备份Mysql数据库

1.建立备份文件夹data和日志文件夹logs

mkdir /home/docker/mysql/backup/data
mkdir /home/docker/mysql/backup/logs

2.在/home/docker/mysql/backup下建立backup.sh脚本

#/bin/bash
BACKUP_ROOT=/home/docker/mysql
BACKUP_FILEDIR=$BACKUP_ROOT/backup/data

DATE=$(date +%Y%m%d)

#查询所有数据库
DATABASES=("user" "system")
#循环数据库进行备份
for db in ${DATABASES[@]}
do
        echo [$(date +%Y-%m-%d#%H:%M:%S)]----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
        docker exec -i "mysql镜像名称" mysqldump -uroot -pXXXX --default-character-set=utf8 -q -R -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
        echo [$(date +%Y-%m-%d#%H:%M:%S)]----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
        echo [$(date +%Y-%m-%d#%H:%M:%S)]----------删除历史备份---------------------------
        rm -f $BACKUP_FILEDIR/${db}_$(date -d -7day +%Y%m%d).sql.gz
        echo [$(date +%Y-%m-%d#%H:%M:%S)]----------删除成功-------------------------------
done
echo "done"

3.参数说明

  • BACKUP_ROOT:备份根路径
  • BACKUP_FILEDIR:存放备份路径
  • DATE:当前时间
  • DATABASES:数据库名称数组 多个数据库以空格分隔
  • mysql镜像名称:docker ps 查看mysql的镜像名称
  • -pXXXX:数据库密码
  • rm -f $BACKUP_FILEDIR/${db}_$(date -d -7day +%Y%m%d).sql.gz: -7day删除七天前的备份历史数据

4.通过chmod命令赋予该脚本的执行权限

chmod 755 backup.sh

5.手动执行脚本 在/home/docker/mysql/backup/data文件下生成【数据库名称_日期.sql】.tar则说明备份成功。

sh /home/docker/mysql/backup/backup.sh>> /home/docker/mysql/backup/logs/backup.log
或
sh /home/docker/mysql/backup/backup.sh> /home/docker/mysql/backup/logs/backup.log

其中“>> ”符号表示打印执行日志到backup.log文件,如果目录下存在该文件,不会覆盖原来存在的backup.log文件,其中“> ”符号表示覆盖打印执行日志到backup.log文件,如果目录下存在该文件,则覆盖打印最新的日志。

5.建立定时任务脚本 每天凌晨1:30备份数据库  填写之后 shift+i 输入wq保存并退出

[root@ ~]# vi /etc/crontab
vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
#凌晨1:30执行数据库备份
30  1  *  *  * root sh /home/docker/mysql/backup/backup.sh> /home/docker/mysql/backup/logs/backup.log                                             

6.执行定时任务命令

service crond reload 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄鸭技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值