|
|
|
@ -1209,389 +1209,6 @@ def getTotalStatistics(): |
|
|
|
|
return mw.returnJson(False, 'fail', data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def findBinlogDoDb(): |
|
|
|
|
conf = getConf() |
|
|
|
|
con = mw.readFile(conf) |
|
|
|
|
rep = r"binlog-do-db\s*?=\s*?(.*)" |
|
|
|
|
dodb = re.findall(rep, con, re.M) |
|
|
|
|
return dodb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def findBinlogSlaveDoDb(): |
|
|
|
|
conf = getConf() |
|
|
|
|
con = mw.readFile(conf) |
|
|
|
|
rep = r"replicate-do-db\s*?=\s*?(.*)" |
|
|
|
|
dodb = re.findall(rep, con, re.M) |
|
|
|
|
return dodb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getMasterDbList(version=''): |
|
|
|
|
args = getArgs() |
|
|
|
|
page = 1 |
|
|
|
|
page_size = 10 |
|
|
|
|
search = '' |
|
|
|
|
data = {} |
|
|
|
|
if 'page' in args: |
|
|
|
|
page = int(args['page']) |
|
|
|
|
|
|
|
|
|
if 'page_size' in args: |
|
|
|
|
page_size = int(args['page_size']) |
|
|
|
|
|
|
|
|
|
if 'search' in args: |
|
|
|
|
search = args['search'] |
|
|
|
|
|
|
|
|
|
conn = pSqliteDb('databases') |
|
|
|
|
limit = str((page - 1) * page_size) + ',' + str(page_size) |
|
|
|
|
condition = '' |
|
|
|
|
dodb = findBinlogDoDb() |
|
|
|
|
data['dodb'] = dodb |
|
|
|
|
|
|
|
|
|
slave_dodb = findBinlogSlaveDoDb() |
|
|
|
|
|
|
|
|
|
if not search == '': |
|
|
|
|
condition = "name like '%" + search + "%'" |
|
|
|
|
field = 'id,pid,name,username,password,accept,ps,addtime' |
|
|
|
|
clist = conn.where(condition, ()).field( |
|
|
|
|
field).limit(limit).order('id desc').select() |
|
|
|
|
count = conn.where(condition, ()).count() |
|
|
|
|
|
|
|
|
|
for x in range(0, len(clist)): |
|
|
|
|
if clist[x]['name'] in dodb: |
|
|
|
|
clist[x]['master'] = 1 |
|
|
|
|
else: |
|
|
|
|
clist[x]['master'] = 0 |
|
|
|
|
|
|
|
|
|
if clist[x]['name'] in slave_dodb: |
|
|
|
|
clist[x]['slave'] = 1 |
|
|
|
|
else: |
|
|
|
|
clist[x]['slave'] = 0 |
|
|
|
|
|
|
|
|
|
_page = {} |
|
|
|
|
_page['count'] = count |
|
|
|
|
_page['p'] = page |
|
|
|
|
_page['row'] = page_size |
|
|
|
|
_page['tojs'] = 'dbList' |
|
|
|
|
data['page'] = mw.getPage(_page) |
|
|
|
|
data['data'] = clist |
|
|
|
|
|
|
|
|
|
return mw.getJson(data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def setDbMaster(version): |
|
|
|
|
args = getArgs() |
|
|
|
|
data = checkArgs(args, ['name']) |
|
|
|
|
if not data[0]: |
|
|
|
|
return data[1] |
|
|
|
|
|
|
|
|
|
conf = getConf() |
|
|
|
|
con = mw.readFile(conf) |
|
|
|
|
rep = r"(binlog-do-db\s*?=\s*?(.*))" |
|
|
|
|
dodb = re.findall(rep, con, re.M) |
|
|
|
|
|
|
|
|
|
isHas = False |
|
|
|
|
for x in range(0, len(dodb)): |
|
|
|
|
|
|
|
|
|
if dodb[x][1] == args['name']: |
|
|
|
|
isHas = True |
|
|
|
|
|
|
|
|
|
con = con.replace(dodb[x][0] + "\n", '') |
|
|
|
|
mw.writeFile(conf, con) |
|
|
|
|
|
|
|
|
|
if not isHas: |
|
|
|
|
prefix = '#binlog-do-db' |
|
|
|
|
con = con.replace( |
|
|
|
|
prefix, prefix + "\nbinlog-do-db=" + args['name']) |
|
|
|
|
mw.writeFile(conf, con) |
|
|
|
|
|
|
|
|
|
restart(version) |
|
|
|
|
time.sleep(4) |
|
|
|
|
return mw.returnJson(True, '设置成功', [args, dodb]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def setDbSlave(version): |
|
|
|
|
args = getArgs() |
|
|
|
|
data = checkArgs(args, ['name']) |
|
|
|
|
if not data[0]: |
|
|
|
|
return data[1] |
|
|
|
|
|
|
|
|
|
conf = getConf() |
|
|
|
|
con = mw.readFile(conf) |
|
|
|
|
rep = r"(replicate-do-db\s*?=\s*?(.*))" |
|
|
|
|
dodb = re.findall(rep, con, re.M) |
|
|
|
|
|
|
|
|
|
isHas = False |
|
|
|
|
for x in range(0, len(dodb)): |
|
|
|
|
if dodb[x][1] == args['name']: |
|
|
|
|
isHas = True |
|
|
|
|
|
|
|
|
|
con = con.replace(dodb[x][0] + "\n", '') |
|
|
|
|
mw.writeFile(conf, con) |
|
|
|
|
|
|
|
|
|
if not isHas: |
|
|
|
|
prefix = '#replicate-do-db' |
|
|
|
|
con = con.replace( |
|
|
|
|
prefix, prefix + "\nreplicate-do-db=" + args['name']) |
|
|
|
|
mw.writeFile(conf, con) |
|
|
|
|
|
|
|
|
|
restart(version) |
|
|
|
|
time.sleep(4) |
|
|
|
|
return mw.returnJson(True, '设置成功', [args, dodb]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getMasterStatus(version=''): |
|
|
|
|
|
|
|
|
|
if status(version) == 'stop': |
|
|
|
|
return mw.returnJson(False, 'MySQL未启动,或正在启动中...!', []) |
|
|
|
|
|
|
|
|
|
conf = getConf() |
|
|
|
|
con = mw.readFile(conf) |
|
|
|
|
master_status = False |
|
|
|
|
if con.find('#log-bin') == -1 and con.find('log-bin') > 1: |
|
|
|
|
dodb = findBinlogDoDb() |
|
|
|
|
if len(dodb) > 0: |
|
|
|
|
master_status = True |
|
|
|
|
data = {} |
|
|
|
|
data['status'] = master_status |
|
|
|
|
|
|
|
|
|
db = pMysqlDb() |
|
|
|
|
dlist = db.query('show slave status') |
|
|
|
|
# print(dlist, len(dlist)) |
|
|
|
|
if len(dlist) > 0 and (dlist[0][10] == 'Yes' or dlist[0][11] == 'Yes'): |
|
|
|
|
data['slave_status'] = True |
|
|
|
|
|
|
|
|
|
return mw.returnJson(master_status, '设置成功', data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def setMasterStatus(version=''): |
|
|
|
|
|
|
|
|
|
conf = getConf() |
|
|
|
|
con = mw.readFile(conf) |
|
|
|
|
|
|
|
|
|
if con.find('#log-bin') != -1: |
|
|
|
|
return mw.returnJson(False, '必须开启二进制日志') |
|
|
|
|
|
|
|
|
|
sign = 'mdserver_ms_open' |
|
|
|
|
|
|
|
|
|
dodb = findBinlogDoDb() |
|
|
|
|
if not sign in dodb: |
|
|
|
|
prefix = '#binlog-do-db' |
|
|
|
|
con = con.replace(prefix, prefix + "\nbinlog-do-db=" + sign) |
|
|
|
|
mw.writeFile(conf, con) |
|
|
|
|
else: |
|
|
|
|
con = con.replace("binlog-do-db=" + sign + "\n", '') |
|
|
|
|
rep = r"(binlog-do-db\s*?=\s*?(.*))" |
|
|
|
|
dodb = re.findall(rep, con, re.M) |
|
|
|
|
for x in range(0, len(dodb)): |
|
|
|
|
con = con.replace(dodb[x][0] + "\n", '') |
|
|
|
|
mw.writeFile(conf, con) |
|
|
|
|
|
|
|
|
|
restart(version) |
|
|
|
|
return mw.returnJson(True, '设置成功') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getMasterRepSlaveList(version=''): |
|
|
|
|
args = getArgs() |
|
|
|
|
page = 1 |
|
|
|
|
page_size = 10 |
|
|
|
|
search = '' |
|
|
|
|
data = {} |
|
|
|
|
if 'page' in args: |
|
|
|
|
page = int(args['page']) |
|
|
|
|
|
|
|
|
|
if 'page_size' in args: |
|
|
|
|
page_size = int(args['page_size']) |
|
|
|
|
|
|
|
|
|
if 'search' in args: |
|
|
|
|
search = args['search'] |
|
|
|
|
|
|
|
|
|
conn = pSqliteDb('master_replication_user') |
|
|
|
|
limit = str((page - 1) * page_size) + ',' + str(page_size) |
|
|
|
|
condition = '' |
|
|
|
|
|
|
|
|
|
if not search == '': |
|
|
|
|
condition = "name like '%" + search + "%'" |
|
|
|
|
field = 'id,username,password,accept,ps,addtime' |
|
|
|
|
clist = conn.where(condition, ()).field( |
|
|
|
|
field).limit(limit).order('id desc').select() |
|
|
|
|
count = conn.where(condition, ()).count() |
|
|
|
|
|
|
|
|
|
_page = {} |
|
|
|
|
_page['count'] = count |
|
|
|
|
_page['p'] = page |
|
|
|
|
_page['row'] = page_size |
|
|
|
|
_page['tojs'] = 'getMasterRepSlaveList' |
|
|
|
|
data['page'] = mw.getPage(_page) |
|
|
|
|
data['data'] = clist |
|
|
|
|
|
|
|
|
|
return mw.getJson(data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def addMasterRepSlaveUser(version=''): |
|
|
|
|
args = getArgs() |
|
|
|
|
data = checkArgs(args, |
|
|
|
|
['username', 'password']) |
|
|
|
|
if not data[0]: |
|
|
|
|
return data[1] |
|
|
|
|
|
|
|
|
|
if not 'address' in args: |
|
|
|
|
address = '' |
|
|
|
|
else: |
|
|
|
|
address = args['address'].strip() |
|
|
|
|
|
|
|
|
|
username = args['username'].strip() |
|
|
|
|
password = args['password'].strip() |
|
|
|
|
# ps = args['ps'].strip() |
|
|
|
|
# address = args['address'].strip() |
|
|
|
|
# dataAccess = args['dataAccess'].strip() |
|
|
|
|
|
|
|
|
|
reg = "^[\w\.-]+$" |
|
|
|
|
if not re.match(reg, username): |
|
|
|
|
return mw.returnJson(False, '用户名不能带有特殊符号!') |
|
|
|
|
checks = ['root', 'mysql', 'test', 'sys', 'panel_logs'] |
|
|
|
|
if username in checks or len(username) < 1: |
|
|
|
|
return mw.returnJson(False, '用户名不合法!') |
|
|
|
|
if password in checks or len(password) < 1: |
|
|
|
|
return mw.returnJson(False, '密码不合法!') |
|
|
|
|
|
|
|
|
|
if len(password) < 1: |
|
|
|
|
password = mw.md5(time.time())[0:8] |
|
|
|
|
|
|
|
|
|
pdb = pMysqlDb() |
|
|
|
|
psdb = pSqliteDb('master_replication_user') |
|
|
|
|
|
|
|
|
|
if psdb.where("username=?", (username)).count(): |
|
|
|
|
return mw.returnJson(False, '用户已存在!') |
|
|
|
|
|
|
|
|
|
result = pdb.execute("GRANT REPLICATION SLAVE ON *.* TO '" + |
|
|
|
|
username + "'@'%' identified by '" + password + "';FLUSH PRIVILEGES;") |
|
|
|
|
# print result |
|
|
|
|
isError = isSqlError(result) |
|
|
|
|
if isError != None: |
|
|
|
|
return isError |
|
|
|
|
|
|
|
|
|
addTime = time.strftime('%Y-%m-%d %X', time.localtime()) |
|
|
|
|
psdb.add('username,password,accept,ps,addtime', |
|
|
|
|
(username, password, '%', '', addTime)) |
|
|
|
|
return mw.returnJson(True, '添加成功!') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getMasterRepSlaveUserCmd(version): |
|
|
|
|
args = getArgs() |
|
|
|
|
data = checkArgs(args, ['username', 'db']) |
|
|
|
|
if not data[0]: |
|
|
|
|
return data[1] |
|
|
|
|
|
|
|
|
|
psdb = pSqliteDb('master_replication_user') |
|
|
|
|
f = 'username,password' |
|
|
|
|
if args['username'] == '': |
|
|
|
|
|
|
|
|
|
count = psdb.count() |
|
|
|
|
|
|
|
|
|
if count == 0: |
|
|
|
|
return mw.returnJson(False, '请添加同步账户!') |
|
|
|
|
|
|
|
|
|
clist = psdb.field(f).limit('1').order('id desc').select() |
|
|
|
|
else: |
|
|
|
|
clist = psdb.field(f).where("username=?", (args['username'],)).limit( |
|
|
|
|
'1').order('id desc').select() |
|
|
|
|
|
|
|
|
|
ip = mw.getLocalIp() |
|
|
|
|
port = getMyPort() |
|
|
|
|
|
|
|
|
|
db = pMysqlDb() |
|
|
|
|
tmp = db.query('show master status') |
|
|
|
|
|
|
|
|
|
if len(tmp) == 0: |
|
|
|
|
return mw.returnJson(False, '未开启!') |
|
|
|
|
|
|
|
|
|
sql = "CHANGE MASTER TO MASTER_HOST='" + ip + "', MASTER_PORT=" + port + ", MASTER_USER='" + \ |
|
|
|
|
clist[0]['username'] + "', MASTER_PASSWORD='" + \ |
|
|
|
|
clist[0]['password'] + \ |
|
|
|
|
"', MASTER_LOG_FILE='" + tmp[0][0] + \ |
|
|
|
|
"',MASTER_LOG_POS=" + str(tmp[0][1]) + "" |
|
|
|
|
|
|
|
|
|
# if args['db'] != '': |
|
|
|
|
# replicate-do-table |
|
|
|
|
|
|
|
|
|
return mw.returnJson(True, 'OK!', sql) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def delMasterRepSlaveUser(version=''): |
|
|
|
|
args = getArgs() |
|
|
|
|
data = checkArgs(args, ['username']) |
|
|
|
|
if not data[0]: |
|
|
|
|
return data[1] |
|
|
|
|
|
|
|
|
|
pdb = pMysqlDb() |
|
|
|
|
psdb = pSqliteDb('master_replication_user') |
|
|
|
|
pdb.execute("drop user '" + args['username'] + "'@'%'") |
|
|
|
|
psdb.where("username=?", (args['username'],)).delete() |
|
|
|
|
|
|
|
|
|
return mw.returnJson(True, '删除成功!') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def updateMasterRepSlaveUser(version=''): |
|
|
|
|
args = getArgs() |
|
|
|
|
data = checkArgs(args, ['username', 'password']) |
|
|
|
|
if not data[0]: |
|
|
|
|
return data[1] |
|
|
|
|
|
|
|
|
|
pdb = pMysqlDb() |
|
|
|
|
psdb = pSqliteDb('master_replication_user') |
|
|
|
|
pdb.execute("drop user '" + args['username'] + "'@'%'") |
|
|
|
|
|
|
|
|
|
pdb.execute("GRANT REPLICATION SLAVE ON *.* TO '" + |
|
|
|
|
args['username'] + "'@'%' identified by '" + args['password'] + "'") |
|
|
|
|
|
|
|
|
|
psdb.where("username=?", (args['username'],)).save( |
|
|
|
|
'password', args['password']) |
|
|
|
|
|
|
|
|
|
return mw.returnJson(True, '更新成功!') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getSlaveList(version=''): |
|
|
|
|
|
|
|
|
|
db = pMysqlDb() |
|
|
|
|
dlist = db.query('show slave status') |
|
|
|
|
|
|
|
|
|
# print(dlist) |
|
|
|
|
ret = [] |
|
|
|
|
for x in range(0, len(dlist)): |
|
|
|
|
tmp = {} |
|
|
|
|
tmp['Master_User'] = dlist[x][2] |
|
|
|
|
tmp['Master_Host'] = dlist[x][1] |
|
|
|
|
tmp['Master_Port'] = dlist[x][3] |
|
|
|
|
tmp['Master_Log_File'] = dlist[x][5] |
|
|
|
|
tmp['Slave_IO_Running'] = dlist[x][10] |
|
|
|
|
tmp['Slave_SQL_Running'] = dlist[x][11] |
|
|
|
|
ret.append(tmp) |
|
|
|
|
data = {} |
|
|
|
|
data['data'] = ret |
|
|
|
|
|
|
|
|
|
return mw.getJson(data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def setSlaveStatus(version=''): |
|
|
|
|
db = pMysqlDb() |
|
|
|
|
dlist = db.query('show slave status') |
|
|
|
|
|
|
|
|
|
if len(dlist) == 0: |
|
|
|
|
return mw.returnJson(False, '需要手动添加主服务同步命令!') |
|
|
|
|
|
|
|
|
|
if len(dlist) > 0 and (dlist[0][10] == 'Yes' or dlist[0][11] == 'Yes'): |
|
|
|
|
db.query('stop slave') |
|
|
|
|
else: |
|
|
|
|
db.query('start slave') |
|
|
|
|
|
|
|
|
|
return mw.returnJson(True, '设置成功!') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def deleteSlave(version=''): |
|
|
|
|
db = pMysqlDb() |
|
|
|
|
dlist = db.query('stop slave;reset slave all') |
|
|
|
|
return mw.returnJson(True, '删除成功!') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def dumpMysqlData(version): |
|
|
|
|
|
|
|
|
|
args = getArgs() |
|
|
|
@ -1616,151 +1233,6 @@ def dumpMysqlData(version): |
|
|
|
|
return 'fail' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from threading import Thread |
|
|
|
|
from time import sleep |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def mw_async(f): |
|
|
|
|
def wrapper(*args, **kwargs): |
|
|
|
|
thr = Thread(target=f, args=args, kwargs=kwargs) |
|
|
|
|
thr.start() |
|
|
|
|
return wrapper |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def doFullSync(): |
|
|
|
|
|
|
|
|
|
args = getArgs() |
|
|
|
|
data = checkArgs(args, ['db']) |
|
|
|
|
if not data[0]: |
|
|
|
|
return data[1] |
|
|
|
|
|
|
|
|
|
status_data = {} |
|
|
|
|
status_data['progress'] = 5 |
|
|
|
|
|
|
|
|
|
db = pMysqlDb() |
|
|
|
|
|
|
|
|
|
dlist = db.query('show slave status') |
|
|
|
|
if len(dlist) == 0: |
|
|
|
|
status_data['code'] = -1 |
|
|
|
|
status_data['msg'] = '没有启动...' |
|
|
|
|
|
|
|
|
|
ip = dlist[0][1] |
|
|
|
|
print(ip) |
|
|
|
|
|
|
|
|
|
status_file = '/tmp/db_async_status.txt' |
|
|
|
|
|
|
|
|
|
status_data['code'] = 0 |
|
|
|
|
status_data['msg'] = '运行中...' |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
|
|
|
|
|
import paramiko |
|
|
|
|
paramiko.util.log_to_file('paramiko.log') |
|
|
|
|
ssh = paramiko.SSHClient() |
|
|
|
|
|
|
|
|
|
SSH_PRIVATE_KEY = '/root/.ssh/id_rsa' |
|
|
|
|
|
|
|
|
|
if mw.getOs() == 'darwin': |
|
|
|
|
user = mw.execShell( |
|
|
|
|
"who | sed -n '2, 1p' |awk '{print $1}'")[0].strip() |
|
|
|
|
SSH_PRIVATE_KEY = '/Users/' + user + '/.ssh/id_rsa' |
|
|
|
|
|
|
|
|
|
print(SSH_PRIVATE_KEY) |
|
|
|
|
if not os.path.exists(SSH_PRIVATE_KEY): |
|
|
|
|
status_data['code'] = 0 |
|
|
|
|
status_data['msg'] = '需要配置免登录...' |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
key = paramiko.RSAKey.from_private_key_file(SSH_PRIVATE_KEY) |
|
|
|
|
# ssh.load_system_host_keys() |
|
|
|
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) |
|
|
|
|
ssh.connect(hostname=ip, port=22, username='root', pkey=key) |
|
|
|
|
except Exception as e: |
|
|
|
|
status_data['code'] = 0 |
|
|
|
|
status_data['msg'] = '需要配置免登录....' |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
cmd = "cd /www/server/mdserver-web && python /www/server/mdserver-web/plugins/mysql/index.py dump_mysql_data {\"db\":'" + args[ |
|
|
|
|
'db'] + "'}" |
|
|
|
|
stdin, stdout, stderr = ssh.exec_command(cmd) |
|
|
|
|
result = stdout.read() |
|
|
|
|
result_err = stderr.read() |
|
|
|
|
|
|
|
|
|
if result == 'ok': |
|
|
|
|
status_data['code'] = 1 |
|
|
|
|
status_data['msg'] = '主服务器备份完成...' |
|
|
|
|
status_data['progress'] = 30 |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
|
|
|
|
|
r = mw.execShell('scp root@' + ip + ':/tmp/dump.sql /tmp') |
|
|
|
|
if r[0] == '': |
|
|
|
|
status_data['code'] = 2 |
|
|
|
|
status_data['msg'] = '数据同步本地完成...' |
|
|
|
|
status_data['progress'] = 40 |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
|
|
|
|
|
cmd = 'cd /www/server/mdserver-web && python /www/server/mdserver-web/plugins/mysql/index.py get_master_rep_slave_user_cmd {"username":"","db":""}' |
|
|
|
|
stdin, stdout, stderr = ssh.exec_command(cmd) |
|
|
|
|
result = stdout.read() |
|
|
|
|
result_err = stderr.read() |
|
|
|
|
cmd_data = json.loads(result) |
|
|
|
|
|
|
|
|
|
db.query('stop slave') |
|
|
|
|
status_data['code'] = 3 |
|
|
|
|
status_data['msg'] = '停止从库完成...' |
|
|
|
|
status_data['progress'] = 45 |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
|
|
|
|
|
dlist = db.query(cmd_data['data']) |
|
|
|
|
status_data['code'] = 4 |
|
|
|
|
status_data['msg'] = '刷新库信息完成...' |
|
|
|
|
status_data['progress'] = 50 |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
|
|
|
|
|
pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root') |
|
|
|
|
cmd = getServerDir() + "/bin/mysql -uroot -p" + pwd + " < /tmp/dump.sql" |
|
|
|
|
print(mw.execShell(cmd)) |
|
|
|
|
status_data['code'] = 5 |
|
|
|
|
status_data['msg'] = '同步数据完成...' |
|
|
|
|
status_data['progress'] = 90 |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
|
|
|
|
|
db.query('start slave') |
|
|
|
|
status_data['code'] = 6 |
|
|
|
|
status_data['msg'] = '从库重启完成...' |
|
|
|
|
status_data['progress'] = 100 |
|
|
|
|
mw.writeFile(status_file, json.dumps(status_data)) |
|
|
|
|
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def fullSync(version=''): |
|
|
|
|
args = getArgs() |
|
|
|
|
data = checkArgs(args, ['db', 'begin']) |
|
|
|
|
if not data[0]: |
|
|
|
|
return data[1] |
|
|
|
|
|
|
|
|
|
status_file = '/tmp/db_async_status.txt' |
|
|
|
|
if args['begin'] == '1': |
|
|
|
|
cmd = 'cd ' + mw.getRunDir() + ' && python ' + \ |
|
|
|
|
getPluginDir() + \ |
|
|
|
|
'/index.py do_full_sync {"db":"' + args['db'] + '"} &' |
|
|
|
|
mw.execShell(cmd) |
|
|
|
|
return json.dumps({'code': 0, 'msg': '同步数据中!', 'progress': 0}) |
|
|
|
|
|
|
|
|
|
if os.path.exists(status_file): |
|
|
|
|
c = mw.readFile(status_file) |
|
|
|
|
d = json.loads(c) |
|
|
|
|
|
|
|
|
|
if d['code'] == 6: |
|
|
|
|
os.remove(status_file) |
|
|
|
|
return c |
|
|
|
|
|
|
|
|
|
return json.dumps({'code': 0, 'msg': '点击开始,开始同步!', 'progress': 0}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def uninstallPreInspection(version): |
|
|
|
|
# return "请手动删除MySQL[{}]".format(version) |
|
|
|
|
return 'ok' |
|
|
|
|