MySQL備份python代碼

import os, time, pymysql, shutil

from apscheduler.schedulers.blocking import BlockingScheduler # 定時任務


def getDatabaseNames():
"""
連接數據庫
返回指定數據庫的所有的表
"""
conn = pymysql.connect(host='10.100.102.224', port=3316, db='indexdb', user='root', passwd='root')
cur = conn.cursor()
cur.execute('show tables;')
tables = cur.fetchall()
cur.close()
conn.close()
return tables


def db_bf(path):
"""
創建存儲路徑
並且備份指定數據庫下的表
"""
path = path.strip()
path = path.rstrip("\\")

if not os.path.exists(path): # 判斷系統是否存在該路徑
os.makedirs(path) # ,不存在則創建
tables = getDatabaseNames()
for table in tables:
try:
tablename = table[0]
# 導出db
cmd = "mysqldump -h%s -u%s -p%s %s > %s/%s.sql" % ('10.100.102.224','root', 'indexdb', tablename, folder, tablename)
print(cmd)
os.system(cmd)

except Exception as e:
print(e)
return True
else:
return False


def mysql_rm(path, timestr):
"""
刪除備份目錄下超過一定時長的文件
"""
# 列出目錄下所有的備份
f = list(os.listdir(path))
print(f)
now_time = timestr[0:8]
# 設置超過的時間
days = 3
for i in f:

exit_time = i[0:8]
update_time = int(exit_time) + days
# if update_time < int(now_time) or exit_time == now_time:
# 如果備份的數據超過規定的天數就刪除了
if update_time < int(now_time):
shutil.rmtree(path + i)
# with open(self.__filerm_log, 'a') as file_log:
# file_log.write("%s刪除備份文件%s \n" % (timestr[0:8], i))


# def hf_bf(path, db):
# """
# 把備份的數據恢復到指定的數據庫
# """
# f = list(os.listdir(path))
#
# # for x in f:
# cmd = "mysql-u%s -p%s %s < %s/%s" % ('root', 'root', db, path, f[0])
# print(cmd)
# os.system(cmd)


if __name__ == '__main__':
# 創建備份的存儲路徑,
timestr = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
folder = "mysql_data_bak/" + timestr
db_bf(folder)
# 恢復數據庫備份
# hf_bf("mysql_data_bak/20191028114943",'ceshi')
scheduler = BlockingScheduler()
# 函數將會在6,7,8,11,12月的第3個週五的1,2,3點運行
# scheduler.add_job(db_bf,args=[folder,], trigger='cron', month='6-8,11-12', day='3rd fri', hour='0-3')
# 截止到2019-12-30 00:00:00,每週一到週五早上五點半運行
# scheduler.add_job(db_bf,args=[folder,], trigger='cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2019-12-31')
# 每天14.39執行任務
scheduler.add_job(db_bf, args=[folder, ], trigger='cron', hour=14, minute=39)
try:
scheduler.start()
except (KeyboardInterrupt, SystemExit):
pass
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章