diff --git a/plugins/mysql/index.py b/plugins/mysql/index.py index 2b615ced4..c9a7dee50 100755 --- a/plugins/mysql/index.py +++ b/plugins/mysql/index.py @@ -3041,7 +3041,38 @@ def getSyncMysqlDB(dbname,sign = ''): sync_db.setTimeout(60) return sync_db +def syncDatabaseRepairLog(version=''): + args = getArgs() + data = checkArgs(args, ['db','sign','op']) + if not data[0]: + return data[1] + + sync_args_db = args['db'] + sync_args_sign = args['sign'] + op = args['op'] + tmp_log = '/tmp/t.log' + cmd = 'cd '+mw.getServerDir()+'/mdserver-web && source bin/activate && python3 plugins/mysql/index.py sync_database_repair {"db":"'+sync_args_db+'","sign":"'+sync_args_sign+'"}' + # print(cmd) + + if op == 'get': + log = mw.getLastLine(tmp_log, 50) + return mw.returnJson(True, log) + + if op == 'cmd': + return mw.returnJson(True, 'ok', cmd) + + if op == 'do': + os.system(' echo "开始执行" > '+ tmp_log) + os.system(cmd +' >> '+ tmp_log +' &') + time.sleep(10) + # mw.execShell('rm -rf '+tmp_log) + return mw.returnJson(True, 'ok') + + return mw.returnJson(False, '无效请求!') + + def syncDatabaseRepair(version=''): + time_stats_s = time.time() from pymysql.converters import escape_string args = getArgs() data = checkArgs(args, ['db','sign']) @@ -3082,7 +3113,7 @@ def syncDatabaseRepair(version=''): diff = sync_count_data[0]['num'] - local_count_data[0]['num'] print(table_name+', need sync. diff,'+str(diff)) else: - print('.') + print(table_name+' check ok.') mw.execShell("echo 'ok' > "+table_check_file) # inconsistent_table = ['xx.xx'] @@ -3191,9 +3222,10 @@ def syncDatabaseRepair(version=''): print("break all") break time.sleep(3) + print(f'data check cos:{time.time() - time_stats_s:.4f}s') print("data supplementation completed") mw.execShell('rm -rf '+tmp_dir) - return True + return 'ok' ############### --- 重要 同步---- ########### @@ -3696,5 +3728,7 @@ if __name__ == "__main__": print(dumpMysqlData(version)) elif func == 'sync_database_repair': print(syncDatabaseRepair()) + elif func == 'sync_database_repair_log': + print(syncDatabaseRepairLog()) else: print('error') diff --git a/plugins/mysql/js/mysql.js b/plugins/mysql/js/mysql.js index 1ccb51c8a..32aaa922e 100755 --- a/plugins/mysql/js/mysql.js +++ b/plugins/mysql/js/mysql.js @@ -2028,6 +2028,84 @@ function getFullSyncStatus(db){ } } +function dataSyncVerify(db){ + var reqTimer = null; + + function requestLogs(layerIndex){ + myPostN('sync_database_repair_log', {db:db, sign:'',op:'get'}, function(rdata){ + var rdata = $.parseJSON(rdata.data); + + if(!rdata.status) { + layer.close(layerIndex); + layer.msg(rdata.msg,{icon:2, time:2000}); + clearInterval(reqTimer); + return; + }; + + if (rdata.msg == ''){ + rdata.msg = '暂无数据!'; + } + + $("#data_verify_log").html(rdata.msg); + //滚动到最低 + var ob = document.getElementById('data_verify_log'); + ob.scrollTop = ob.scrollHeight; + }); + } + + layer.open({ + type: 1, + title: '同步数据库['+db+']数据校验', + area: '500px', + btn:[ "开始","取消","手动"], + content:"
\ + "+'
'+"\
+            
", + cancel: function(){ + if (reqTimer){ + clearInterval(reqTimer); + } + }, + yes:function(index,layer_index){ + myPostN('sync_database_repair_log', {db:db, sign:'',op:'do'}, function(data){}); + layer.msg("执行成功"); + + requestLogs(layer_index); + reqTimer = setInterval(function(){ + requestLogs(layer_index); + },3000); + }, + success:function(){ + }, + btn3: function(){ + myPostN('sync_database_repair_log', {db:db, sign:'',op:'cmd'}, function(rdata){ + var rdata = $.parseJSON(rdata.data); + layer.open({ + title: "手动执行命令CMD", + area: ['600px', '180px'], + type:1, + closeBtn: 1, + shadeClose: false, + btn:["复制","取消"], + content: '
\ +
\ +
'+rdata.data+'
\ +
\ +
', + success:function(){ + copyText(rdata.data); + }, + yes:function(){ + copyText(rdata.data); + } + }); + }); + return false; + } + + }); +} + function addSlaveSSH(ip=''){ myPost('get_slave_ssh_by_ip', {ip:ip}, function(rdata){ @@ -2692,7 +2770,8 @@ function masterOrSlaveConf(version=''){ list += '' + rdata.data[i]['name'] +''; list += '' + ''+(rdata.data[i]['slave']?'退出':'加入')+' | ' + - '同步' + + '同步 | ' + + '数据校验' + ''; list += ''; }