-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
60 lines (43 loc) · 2.12 KB
/
main.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
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
from datetime import datetime, timedelta
from config import *
from progressbar import Percentage, FileTransferSpeed, Bar, ETA, ProgressBar
import upyun
import tarfile
import os
import shutil
class ProgressBarHandler(object):
def __init__(self, totalsize, params):
widgets = [params, Percentage(), ' ', Bar(marker='=', left='[', right=']'), ' ', ETA(), ' ', FileTransferSpeed()]
self.pbar = ProgressBar(widgets=widgets, maxval=totalsize).start()
def update(self, readsofar):
self.pbar.update(readsofar)
def finish(self):
self.pbar.finish()
current_backup = backup_mark + '-' + (datetime.now()).strftime('%Y-%m-%d') + '.tar.gz'
outdated_backup = backup_mark + '-' + (datetime.now() - timedelta(days=3)).strftime('%Y-%m-%d') + '.tar.gz'
with tarfile.open(current_backup, 'w:gz') as tf:
for each_database in backup_database:
print('dumping database [{}]...'.format(each_database))
os.system('mysqldump -h{} --default-character-set={} -u{} -p{} {} > {}.sql'.format(mysql_host, mysql_charset[each_database], mysql_user, mysql_passwd, each_database, each_database))
print('taring sql file [{}]...'.format(each_database + '.sql'))
tf.add(each_database + '.sql')
os.remove(each_database + '.sql')
for each_dir in backup_dir:
print('taring dir [{}]'.format(each_dir))
tarFileName = shutil.make_archive(each_dir, 'gztar', root_dir=backup_pre_dir, base_dir=each_dir)
tf.add(tarFileName, os.path.basename(tarFileName))
os.remove(tarFileName)
endpoint_servers = {'AUTO': upyun.ED_AUTO, 'CT': upyun.ED_TELECOM, 'CU': upyun.ED_CNC, 'CM': upyun.ED_CTT}
up = upyun.UpYun(service_name, operator_user, operator_passwd, endpoint=endpoint_servers[server])
with open(current_backup, 'rb') as f:
res = up.put(current_backup, f, checksum=True, handler=ProgressBarHandler, params="uploading ")
print('deleting outdated backup...')
try:
up.delete(outdated_backup)
except Exception as e:
print('delete failed' + '\n' + str(e))
print('cleaning temp files...')
os.remove(current_backup)
print('done!')