代码拉取完成,页面将自动刷新
同步操作将从 code4everything/auto_backup 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# coding:utf-8
import json
import os
import tarfile
import time
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
# MySQL备份命令
dump_cmd = "{prefix}mysqldump --user={user} --password={password} --skip-lock-tables --host={host} {database} > {file}"
# 读取配置文件
config = json.load(open('mysql_config.json', 'r'))
def check_folder(path):
"""
检查路径是否存在
"""
if not os.path.exists(path):
os.makedirs(path)
def delete_expired():
"""
删除过期文件
"""
files = [f for f in os.listdir(config['path'])]
for file in files:
full_path = config['path'] + "/" + file
# 文件是否过期
is_expired = os.stat(full_path).st_mtime < (time.time() - eval(config['expired']))
if is_expired:
# 删除过期文件
os.remove(full_path)
print('[%s] delete expired dumped file(s) success' % get_custom_date())
def dump(database="mysql", node=None):
"""
开始备份数据库
"""
# 文件名
if node is None:
node = {}
filename = "{database}-{date}.sql".format(database=database, date=get_custom_date(config['dateFormat']))
# 文件绝对路径
path = config['path']
check_folder(path)
file = "{path}/{filename}".format(path=path, filename=filename)
# 备份
os.system(
dump_cmd.format(prefix=config['mysqldump'], user=node['user'], password=node['password'], host=node['host'],
database=database, file=file))
# 压缩
tar = tarfile.open(file[0:len(file) - 3] + 'gz', 'w')
tar.add(file, arcname=filename)
tar.close()
# 删除SQL文件
os.remove(file)
def parse_node(node):
"""
解析节点数据
"""
dbs = node['dbs']
if isinstance(dbs, list):
for db in dbs:
dump(db, node)
else:
dump(dbs, node)
def pre_dump():
"""
检查配置,准备备份数据库
"""
global config
config = json.load(open('mysql_config.json', 'r'))
nodes = config['nodes']
if isinstance(nodes, list):
for node in nodes:
parse_node(node)
else:
parse_node(nodes)
print('[%s] dump success' % get_custom_date())
delete_expired()
def get_custom_date(date_format="%Y-%m-%d %H:%M:%S"):
return datetime.now().strftime(date_format)
if __name__ == "__main__":
"""
程序入口
"""
params = config['schedulerParams']
# 开启定时任务
scheduler = BlockingScheduler()
if params['cron']:
scheduler.add_job(pre_dump, 'cron', day_of_week=params['dayOfWeek'], hour=params['hour'],
minute=params['minute'])
else:
scheduler.add_job(pre_dump, 'interval', seconds=params['seconds'])
print('[%s] starting mysql auto backup' % get_custom_date())
scheduler.start()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。