我们知道MySQL是自带数据库备份功能的,但是这个功能在Windows下很受限制。如果你完整备份整个数据库,就需要还原整个数据库,而这时你会发现有多么无助,可能你还原了50%,突然报错,你又得重新还原,而且时间巨长。如果单表备份,你不仅需要把每个表的名字写一遍,新建的表还需要反复修改备份命令。所以,我想到一个Python逐表备份的方法,这样即使出什么问题,你只需要还原指定的表就可以了。
下面请看具体实施方法:
import pymysql
import os
import datetime
# 获取当前时间
t = datetime.datetime.now()
# 获取当前日期
dt = t.date()
dt = datetime.datetime.strftime(dt,"%Y%m%d")
path = 'E:/Mysqlbackup/Test_%s/' % dt
# 判断要创建的文件夹是否已经存在
a = os.path.exists(path)
if a == False:
# 如果文件夹不存在则创建
os.mkdir(path)
conn = pymysql.connect(host=localhost,user='Admin',passwd='pwd',db='Test',port=3306,charset='utf8mb4')
cur = conn.cursor()
# 获取指定数据库中所有表的信息
sql = "show table status where Engine is not null "
cur.execute(sql)
result = cur.fetchall()
# 编写命令行
cmd1 = "mysqldump -u root -ppwd %s --default-character-set=gbk > %s%s.sql"
# 如果要压缩备份好的表,安装WinRAR,并配置好环境变量
cmd2 = "WinRAR m -r -ep1 %s%s.rar %s%s.sql"
cmd3 = "@echo off"
cmd4 = "@echo on"
os.system(cmd3)
for i in result:
# 做个备份数据库中的表
os.system(cmd1 % (i[0], path, i[0]))
# 将备份好的数据库表进行压缩
os.system(cmd2 % (path, i[0], path, i[0]))
os.system(cmd4)
cur.close()
conn.close()
上面的Python脚本写好以后,你在Windows环境下的服务器上,设置好计划任务,这样就可以每天看到新鲜出炉的备份文件了。