-
Notifications
You must be signed in to change notification settings - Fork 0
/
XBackup.py
executable file
·98 lines (87 loc) · 2.76 KB
/
XBackup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# -*- coding: utf-8 -*-
import util.exec
from util.tools import timer
import util.tools
import util.logger
import sys
import os
import shutil
logger = util.logger.set_logger(__name__)
@timer
def exec_full_backup_cmd(setting):
"""数据库全量备份"""
cmd = [
'innobackupex',
'--defaults-file=' + setting['defaults-file'],
'--user=' + setting['user'],
'--password=' + setting['password'],
'--socket=' + setting['socket'],
'--parallel=' + str(setting['parallel']),
'--no-lock',
'--no-timestamp',
'--slave-info',
'--safe-slave-backup',
setting['backup-dir']]
util.exec.exec_cmd(cmd, exec_full_backup_cmd.__doc__)
@timer
def exec_partial_backup_cmd(setting):
"""数据库部分备份"""
cmd = [
'innobackupex',
'--defaults-file=' + setting['defaults-file'],
'--user=' + setting['user'],
'--password=' + setting['password'],
'--socket=' + setting['socket'],
'--parallel=' + str(setting['parallel']),
'--no-lock',
'--no-timestamp',
'--slave-info',
'--safe-slave-backup',
'--tables-file=' + str(setting['tmp-table-list']),
setting['backup-dir']]
util.exec.exec_cmd(cmd, exec_full_backup_cmd.__doc__)
@timer
def exec_inc_backup_cmd(setting, to_lsn):
"""数据库增量备份"""
cmd = [
'innobackupex',
'--defaults-file=' + setting['defaults-file'],
'--user=' + setting['user'],
'--password=' + setting['password'],
'--socket=' + setting['socket'],
'--parallel=' + str(setting['parallel']),
'--no-lock',
'--no-timestamp',
'--slave-info',
'--safe-slave-backup',
'--incremental-lsn=' + str(to_lsn),
'--incremental',
setting['backup-dir']]
util.exec.exec_cmd(cmd, exec_inc_backup_cmd.__doc__)
@timer
def exec_compression(setting, threads_num=1):
"""压缩备份"""
env = None
cwd = os.path.dirname(setting['backup-dir'])
if setting['compress-type'] == 'gz':
args_str = '-zcvf'
elif setting['compress-type'] == 'xz':
args_str = '-Jcvf'
env = {'XZ_OPT': '-T' + str(threads_num)}
else:
logger.info('不支持该压缩方式: ' + setting['compress-type'])
sys.exit(1)
cmd = [
'tar',
args_str,
setting['backup-name'] + '.tar.' + setting['compress-type'],
setting['backup-name']]
util.exec.exec_cmd(cmd, exec_compression.__doc__, env, cwd)
def remove_backup_dir(path):
"""删除备份的文件夹"""
try:
shutil.rmtree(path)
logger.info('备份目录 ' + path + ' 已删除')
except Exception as e:
logger.error('删除备份的文件夹失败')
sys.exit(1)