mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-10 04:19:26 +08:00
update
This commit is contained in:
@@ -2303,6 +2303,56 @@ def getSlaveList(version=''):
|
||||
data['data'] = dlist
|
||||
return mw.getJson(data)
|
||||
|
||||
def trySlaveSyncBugfix(version=''):
|
||||
if status(version) == 'stop':
|
||||
return mw.returnJson(False, 'MySQL未启动', [])
|
||||
|
||||
mode_file = getSyncModeFile()
|
||||
if not os.path.exists(mode_file):
|
||||
return mw.returnJson(False, '需要先设置同步配置')
|
||||
|
||||
mode = mw.readFile(mode_file)
|
||||
if mode != 'sync-user':
|
||||
return mw.returnJson(False, '仅支持【同步账户】模式')
|
||||
|
||||
conn = pSqliteDb('slave_sync_user')
|
||||
slave_sync_data = conn.field('ip,port,user,pass,mode,cmd').select()
|
||||
if len(slave_sync_data) < 1:
|
||||
return mw.returnJson(False, '需要先添加【同步用户】配置!')
|
||||
|
||||
# print(slave_sync_data)
|
||||
# 本地从库
|
||||
sdb = pMysqlDb()
|
||||
|
||||
gtid_purged = ''
|
||||
|
||||
for i in range(len(slave_sync_data)):
|
||||
port = slave_sync_data[i]['port']
|
||||
password = slave_sync_data[i]['pass']
|
||||
host = slave_sync_data[i]['ip']
|
||||
user = slave_sync_data[i]['user']
|
||||
|
||||
# print(port, password, host)
|
||||
|
||||
mdb = mw.getMyORM()
|
||||
mdb.setHost(host)
|
||||
mdb.setPort(port)
|
||||
mdb.setUser(user)
|
||||
mdb.setPwd(password)
|
||||
mdb.setSocket('')
|
||||
|
||||
var_gtid = mdb.query('show VARIABLES like "%gtid_purged%"')
|
||||
if len(var_gtid) > 0:
|
||||
gtid_purged += var_gtid[0]['Value'] + ','
|
||||
|
||||
gtid_purged = gtid_purged.strip(',')
|
||||
sql = "set @@global.gtid_purged='" + gtid_purged + "'"
|
||||
|
||||
sdb.query('stop slave')
|
||||
# print(sql)
|
||||
sdb.query(sql)
|
||||
sdb.query('start slave')
|
||||
return mw.returnJson(True, '修复成功!')
|
||||
|
||||
def getSlaveSyncCmd(version=''):
|
||||
|
||||
@@ -2982,6 +3032,8 @@ if __name__ == "__main__":
|
||||
print(getMasterRepSlaveUserCmd(version))
|
||||
elif func == 'get_slave_list':
|
||||
print(getSlaveList(version))
|
||||
elif func == 'try_slave_sync_bugfix':
|
||||
print(trySlaveSyncBugfix(version))
|
||||
elif func == 'get_slave_sync_cmd':
|
||||
print(getSlaveSyncCmd(version))
|
||||
elif func == 'get_slave_ssh_list':
|
||||
|
||||
@@ -2568,11 +2568,15 @@ function masterOrSlaveConf(version=''){
|
||||
<td>"+(info['Slave_SQL_Running_State'] == '' ? '无':info['Slave_SQL_Running_State']) +"</td>\
|
||||
</tr>";
|
||||
|
||||
var btn_list = ['复制错误',"取消"];
|
||||
if (info['Last_IO_Error'].search(/1236/i)>0){
|
||||
btn_list = ['复制错误',"取消","尝试修复"];
|
||||
}
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '同步异常信息',
|
||||
area: ['600px','300px'],
|
||||
btn:['复制错误',"取消"],
|
||||
btn:btn_list,
|
||||
content:"<form class='bt-form pd15'>\
|
||||
<div class='divtable mtb10'>\
|
||||
<div class='tablescroll'>\
|
||||
@@ -2587,10 +2591,20 @@ function masterOrSlaveConf(version=''){
|
||||
</div>\
|
||||
</form>",
|
||||
success:function(){
|
||||
// copyText(v['Error']);
|
||||
// $('.class-copy-db-err').click(function(){
|
||||
// copyText(v['Error']);
|
||||
// });
|
||||
if (info['Last_IO_Error'] != ''){
|
||||
copyText(info['Last_IO_Error']);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info['Last_SQL_Error'] != ''){
|
||||
copyText(info['Last_SQL_Error']);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info['Slave_SQL_Running_State'] != ''){
|
||||
copyText(info['Slave_SQL_Running_State']);
|
||||
return;
|
||||
}
|
||||
},
|
||||
yes:function(){
|
||||
if (info['Last_IO_Error'] != ''){
|
||||
@@ -2607,6 +2621,14 @@ function masterOrSlaveConf(version=''){
|
||||
copyText(info['Slave_SQL_Running_State']);
|
||||
return;
|
||||
}
|
||||
},
|
||||
btn3:function(){
|
||||
myPost('try_slave_sync_bugfix', {}, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
showMsg(rdata.msg, function(){
|
||||
masterOrSlaveConf();
|
||||
},{ icon: rdata.status ? 1 : 5 },2000);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -2335,6 +2335,56 @@ def getSlaveList(version=''):
|
||||
data['data'] = dlist
|
||||
return mw.getJson(data)
|
||||
|
||||
def trySlaveSyncBugfix(version=''):
|
||||
if status(version) == 'stop':
|
||||
return mw.returnJson(False, 'MySQL未启动', [])
|
||||
|
||||
mode_file = getSyncModeFile()
|
||||
if not os.path.exists(mode_file):
|
||||
return mw.returnJson(False, '需要先设置同步配置')
|
||||
|
||||
mode = mw.readFile(mode_file)
|
||||
if mode != 'sync-user':
|
||||
return mw.returnJson(False, '仅支持【同步账户】模式')
|
||||
|
||||
conn = pSqliteDb('slave_sync_user')
|
||||
slave_sync_data = conn.field('ip,port,user,pass,mode,cmd').select()
|
||||
if len(slave_sync_data) < 1:
|
||||
return mw.returnJson(False, '需要先添加【同步用户】配置!')
|
||||
|
||||
# print(slave_sync_data)
|
||||
# 本地从库
|
||||
sdb = pMysqlDb()
|
||||
|
||||
gtid_purged = ''
|
||||
|
||||
for i in range(len(slave_sync_data)):
|
||||
port = slave_sync_data[i]['port']
|
||||
password = slave_sync_data[i]['pass']
|
||||
host = slave_sync_data[i]['ip']
|
||||
user = slave_sync_data[i]['user']
|
||||
|
||||
# print(port, password, host)
|
||||
|
||||
mdb = mw.getMyORM()
|
||||
mdb.setHost(host)
|
||||
mdb.setPort(port)
|
||||
mdb.setUser(user)
|
||||
mdb.setPwd(password)
|
||||
mdb.setSocket('')
|
||||
|
||||
var_gtid = mdb.query('show VARIABLES like "%gtid_purged%"')
|
||||
if len(var_gtid) > 0:
|
||||
gtid_purged += var_gtid[0]['Value'] + ','
|
||||
|
||||
gtid_purged = gtid_purged.strip(',')
|
||||
sql = "set @@global.gtid_purged='" + gtid_purged + "'"
|
||||
|
||||
sdb.query('stop slave')
|
||||
# print(sql)
|
||||
sdb.query(sql)
|
||||
sdb.query('start slave')
|
||||
return mw.returnJson(True, '修复成功!')
|
||||
|
||||
def getSlaveSyncCmd(version=''):
|
||||
|
||||
@@ -3009,6 +3059,8 @@ if __name__ == "__main__":
|
||||
print(getMasterRepSlaveUserCmd(version))
|
||||
elif func == 'get_slave_list':
|
||||
print(getSlaveList(version))
|
||||
elif func == 'try_slave_sync_bugfix':
|
||||
print(trySlaveSyncBugfix(version))
|
||||
elif func == 'get_slave_sync_cmd':
|
||||
print(getSlaveSyncCmd(version))
|
||||
elif func == 'get_slave_ssh_list':
|
||||
|
||||
@@ -2569,11 +2569,15 @@ function masterOrSlaveConf(version=''){
|
||||
<td>"+(info['Slave_SQL_Running_State'] == '' ? '无':info['Slave_SQL_Running_State']) +"</td>\
|
||||
</tr>";
|
||||
|
||||
var btn_list = ['复制错误',"取消"];
|
||||
if (info['Last_IO_Error'].search(/1236/i)>0){
|
||||
btn_list = ['复制错误',"取消","尝试修复"];
|
||||
}
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '同步异常信息',
|
||||
area: ['600px','300px'],
|
||||
btn:['复制错误',"取消"],
|
||||
btn:btn_list,
|
||||
content:"<form class='bt-form pd15'>\
|
||||
<div class='divtable mtb10'>\
|
||||
<div class='tablescroll'>\
|
||||
@@ -2588,10 +2592,20 @@ function masterOrSlaveConf(version=''){
|
||||
</div>\
|
||||
</form>",
|
||||
success:function(){
|
||||
// copyText(v['Error']);
|
||||
// $('.class-copy-db-err').click(function(){
|
||||
// copyText(v['Error']);
|
||||
// });
|
||||
if (info['Last_IO_Error'] != ''){
|
||||
copyText(info['Last_IO_Error']);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info['Last_SQL_Error'] != ''){
|
||||
copyText(info['Last_SQL_Error']);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info['Slave_SQL_Running_State'] != ''){
|
||||
copyText(info['Slave_SQL_Running_State']);
|
||||
return;
|
||||
}
|
||||
},
|
||||
yes:function(){
|
||||
if (info['Last_IO_Error'] != ''){
|
||||
@@ -2608,6 +2622,14 @@ function masterOrSlaveConf(version=''){
|
||||
copyText(info['Slave_SQL_Running_State']);
|
||||
return;
|
||||
}
|
||||
},
|
||||
btn3:function(){
|
||||
myPost('try_slave_sync_bugfix', {}, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
showMsg(rdata.msg, function(){
|
||||
masterOrSlaveConf();
|
||||
},{ icon: rdata.status ? 1 : 5 },2000);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user