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("执行完成")
脚本简单易懂, 就几句话. 改改参数即可.
如何在各系统下设置自动运行, 请各位自己百度吧. 我就不详细介绍了