python 自动备份 mysql数据库的脚本代码

python大有替代系统自带批处理脚本的趋势.
windows下的dos命令极其难用. 语法晦涩难懂.
linux下也好不到那里去.
所以写了一个python脚本.

import os
import sys  
# import glob 
import filecmp
import time
import datetime
import subprocess 
import sys 

databackup_dir_path = r'E:\databackup'
mysqldump_path = r'E:\Program Files\MariaDB 10.5\bin\mysqldump'
mysql_ip = '127.0.0.1'
mysql_username='root'
mysql_password='root'
mysql_port=3306

backDatabaseNames =  ["kwjl5","kwjl5c2","kwjl5ga" ]

def deleteOldFile(path,day):
    for eachfile in os.listdir(path):
        filename = os.path.join(path, eachfile)
        # backup_ 开头的文件才会被删除
        if os.path.isfile(filename) :  
            lastmodifytime = os.path.getmtime(filename)
            # 设置删除多久之前的文件
            endfiletime = time.time() - 3600 * 24 * day
            if endfiletime > lastmodifytime:
                if filename[0:7] == "backup_" and filename[-4:] == ".sql":
                    os.remove(filename)
                    print ("删除文件 %s 成功" % filename)
        # 如果是目录则递归调用当前函数
        elif os.path.isdir(filename):  
            deleteOldFile(filename,day)


def backupmysql(dbname): 
  time1_str = datetime.datetime.now().strftime('%Y_%m_%d')
  cmd =[]
  cmd.append("\"" + mysqldump_path + "\"")  
  cmd.append("--opt")
  cmd.append("--single-transaction=TRUE")
  cmd.append("--user="+ mysql_username)
  cmd.append("--password="+ mysql_password)
  cmd.append("--host="+ mysql_ip)
  cmd.append("--protocol=tcp")
  cmd.append("--port="+ str(mysql_port))
  cmd.append("--default-character-set=utf8")
  cmd.append("--single-transaction=TRUE")
  cmd.append("--routines")
  cmd.append("--events \"%s\" > \"%s\\backup_%s_%s.sql\" " % (dbname, databackup_dir_path, dbname,time1_str) )
  #cmd.append(" \n pause")
  strcmd = str.join(" ",cmd )
  print("cmd=>" + strcmd)
  # os.system(strcmd) 
  try: 
      retcode = subprocess.call(strcmd, shell=True) 
      if retcode < 0: 
        print(sys.stderr, "Child was terminated by signal", -retcode )
      else:
        print(sys.stderr, "Child returned", retcode )
  except OSError as e: 
      print(sys.stderr, "Execution failed:", e )


# 删除老文件 15天以前的文件会被删掉
deleteOldFile(databackup_dir_path,15)

#逐个数据库备份
for f in backDatabaseNames: 
  backupmysql(f)

print("执行完成")
 

脚本简单易懂, 就几句话. 改改参数即可.
如何在各系统下设置自动运行, 请各位自己百度吧. 我就不详细介绍了

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值