在docker中的mysql定时备份

这篇博客介绍了如何使用Python的`sched`模块和Shell脚本实现定期数据库备份并自动清理过期文件的系统。通过`dbcorn.py`脚本,程序会每隔设定的时间间隔执行一次数据库备份,并利用`delete()`函数删除30天前的旧备份。`dmb.sh`脚本则负责执行mysqldump进行实际的数据库备份操作。`start.sh`脚本用于启动整个流程,确保进程在后台持续运行。
摘要由CSDN通过智能技术生成

目录结构如下:

 

dbcorn.py

if __name__ == "__main__":
    from datetime import datetime
    import sched
    import time,os
    from datetime import datetime

    retval = os.getcwd()
    # 初始化sched模块的 scheduler 类
    # 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
    schedule = sched.scheduler(time.time, time.sleep)
    def delete():
        import os, datetime
        ds = list(os.walk("./backup"))  # 获得所有文件夹的信息列表
        delta = datetime.timedelta(days=30)  # 这里方便测试可以设置成0,也就是把这个文件夹下的所有文件都删除了
        now = datetime.datetime.now()  # 获取当前时间

        for d in ds:  # 遍历该列表
            os.chdir(d[0])  # 进入本级路径,防止找不到文件而报错
            if d[2] != []:  # 如果该路径下有文件
                for x in d[2]:  # 遍历这些文件
                    # print(x)
                    ctime = datetime.datetime.fromtimestamp(os.path.getctime(x))  # 获取文件创建时间
                    # print(ctime)
                    if ctime < (now - delta):  # 若创建于delta天前
                        os.remove(x)  # 则删掉
        os.chdir(retval)  # 进入本级路径,防止找不到文件而报错
    # 被周期性调度触发的函数
    def backsql(inc):
        os.system("./dmb.sh")
        delete()
        schedule.enter(inc, 0, backsql, (inc,))

    # 默认参数60s
    def main(inc=60):
        # enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,
        # 给该触发函数的参数(tuple形式)
        schedule.enter(0, 0, backsql, (inc,))
        schedule.run()

    # 立马执行一次 2个小时备份一次
    main(7200)

dmb.sh

#!/usr/bin/env bash
CRTDIR=$(pwd)

# 判断是否有upload文件夹,没有则创建,用于存储图片
if [ ! -d "${CRTDIR}/backup" ]; then
  mkdir ${CRTDIR}/backup
fi

DATE=`date +%Y%m%d%H%M%S`
BACK_DATA=backup-${DATE}.sql

docker exec -i db  mysqldump -uroot -ppassword mytestdb  > ${CRTDIR}/backup/${BACK_DATA}
# docker exec -i [容器名字] mysqldump -uroot -p[密码] [数据名字]> ${CRTDIR}/backup/${BACK_DATA}

start.sh

#! /bin/sh
PROCESS=`ps -ef|grep dbcorn.py|grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
  echo "Kill the dbcorn process [ $i ]"
  kill -9 $i
done
cd /mnt/disk/home/mysql # cd到脚本所在目录
nohup python3 -u dbcorn.py > nohup.log 2>&1 &

然后给这两个sh脚本执行权限

然后执行 ./start.sh 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值