diff --git a/plugins/mariadb/index.py b/plugins/mariadb/index.py index 58eb5c2aa..e0d783e3f 100755 --- a/plugins/mariadb/index.py +++ b/plugins/mariadb/index.py @@ -2033,6 +2033,64 @@ def addMasterRepSlaveUser(version=''): return mw.returnJson(True, '添加成功!') +def getMasterRepSlaveUserCmdSsh(version): + + args = getArgs() + data = checkArgs(args, ['username', 'db']) + if not data[0]: + return data[1] + + psdb = pSqliteDb('master_replication_user') + f = 'username,password' + username = args['username'] + if 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=?", (username,)).limit( + '1').order('id desc').select() + + if len(clist) == 0: + return mw.returnJson(False, '错误同步账户!') + + ip = mw.getLocalIp() + port = getMyPort() + db = pMysqlDb() + + mstatus = db.query('show master status') + if len(mstatus) == 0: + return mw.returnJson(False, '未开启!') + + mode = recognizeDbMode() + + # 查找同步点 + # SELECT BINLOG_GTID_POS('master1-bin.000002', 561866201); + + sid = getDbServerId() + connection_name = "" + if sid != '': + connection_name = "'r{}' ".format(sid) + + # MASTER_USE_GTID={current_pos|slave_pos|no} + # current_pos 依赖-> select @@global.gtid_current_pos; + # slave_pos 依赖-> select @@global.gtid_slave_pos; + # no -> 啥都不依赖,保证多主同步成功。同步出现问题,根据日志查找问题。 + + base_sql = "CHANGE MASTER " + connection_name + "TO MASTER_HOST='" + ip + "', MASTER_PORT=" + port + ", MASTER_USER='" + \ + clist[0]['username'] + "', MASTER_PASSWORD='" + \ + clist[0]['password']; + sql = '' + sql += base_sql + "', MASTER_LOG_FILE='" + mstatus[0]["File"] + \ + "',MASTER_LOG_POS=" + str(mstatus[0]["Position"]) + data = {} + data['cmd'] = sql + data["info"] = clist[0] + data['mode'] = mode + return mw.returnJson(True, 'ok!', data) + def getMasterRepSlaveUserCmd(version): args = getArgs() @@ -2543,7 +2601,7 @@ def initSlaveStatusSSH(version=''): username='root', pkey=key) db_user = data['db_user'] - cmd = 'cd /www/server/mdserver-web && source bin/activate && python3 plugins/mariadb/index.py get_master_rep_slave_user_cmd {"username":"' + db_user + '","db":""}' + cmd = 'cd /www/server/mdserver-web && source bin/activate && python3 plugins/mariadb/index.py get_master_rep_slave_user_cmd_ssh {"username":"' + db_user + '","db":""}' stdin, stdout, stderr = ssh.exec_command(cmd) result = stdout.read() result = result.decode('utf-8') @@ -3413,6 +3471,8 @@ if __name__ == "__main__": print(delMasterRepSlaveUser(version)) elif func == 'update_master_rep_slave_user': print(updateMasterRepSlaveUser(version)) + elif func == 'get_master_rep_slave_user_cmd_ssh': + print(getMasterRepSlaveUserCmdSsh(version)) elif func == 'get_master_rep_slave_user_cmd': print(getMasterRepSlaveUserCmd(version)) elif func == 'get_slave_list':