mysql 主从可配置化end

pull/109/head
midoks 4 years ago
parent 25b22d7f16
commit 6e1ef59403
  1. 70
      plugins/mysql/index.py
  2. 82
      plugins/mysql/js/mysql.js

@ -1252,7 +1252,13 @@ def getMasterStatus(version=''):
master_status = True
data = {}
data['status'] = master_status
return mw.returnJson(master_status, '设置成功')
db = pMysqlDb()
dlist = db.query('show slave status')
if len(dlist) > 0 and dlist[0][10] == 'Yes' and dlist[0][11] == 'Yes':
data['slave_status'] = True
return mw.returnJson(master_status, '设置成功', data)
def setMasterStatus(version=''):
@ -1272,6 +1278,7 @@ def setMasterStatus(version=''):
con = con.replace('binlog-ignore-db', '#binlog-ignore-db')
restart(version)
mw.writeFile(conf, con)
time.sleep(4)
return mw.returnJson(True, '设置成功')
@ -1363,15 +1370,23 @@ def addMasterRepSlaveUser(version=''):
def getMasterRepSlaveUserCmd(version):
args = getArgs()
data = checkArgs(args, ['username'])
data = checkArgs(args, ['username', 'db'])
if not data[0]:
return data[1]
psdb = pSqliteDb('master_replication_user')
f = 'username,password'
clist = psdb.field(f).where("username=?", (args['username'],)).limit(
'1').order('id desc').select()
# print(clist[0])
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()
@ -1383,8 +1398,12 @@ def getMasterRepSlaveUserCmd(version):
args['username'] + "', MASTER_PASSWORD='" + \
clist[0]['password'] + \
"', MASTER_LOG_FILE='" + tmp[0][0] + \
"',MASTER_LOG_POS=" + str(tmp[0][1]) + ";"
return mw.returnJson(True, '添加成功!', sql)
"',MASTER_LOG_POS=" + str(tmp[0][1]) + ""
# if args['db'] != '':
# replicate-do-table
return mw.returnJson(True, 'OK!', sql)
def delMasterRepSlaveUser(version=''):
@ -1419,6 +1438,39 @@ def updateMasterRepSlaveUser(version=''):
return mw.returnJson(True, '更新成功!')
def getSlaveList(version=''):
db = pMysqlDb()
dlist = db.query('show slave status')
# print(dlist)
ret = []
for x in xrange(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 and dlist[0][10] == 'Yes' and dlist[0][11] == 'Yes':
db.query('stop slave')
else:
db.query('start slave')
return mw.returnJson(True, '设置成功!')
if __name__ == "__main__":
func = sys.argv[1]
version = sys.argv[2]
@ -1510,5 +1562,9 @@ if __name__ == "__main__":
print(updateMasterRepSlaveUser(version))
elif func == 'get_master_rep_slave_user_cmd':
print(getMasterRepSlaveUserCmd(version))
elif func == 'get_slave_list':
print(getSlaveList(version))
elif func == 'set_slave_status':
print(setSlaveStatus(version))
else:
print('error')

@ -1231,8 +1231,8 @@ function updateMasterRepSlaveUser(username){
});
}
function getMasterRepSlaveUserCmd(username){
myPost('get_master_rep_slave_user_cmd', {username:username}, function(data){
function getMasterRepSlaveUserCmd(username, db=''){
myPost('get_master_rep_slave_user_cmd', {username:username,db:db}, function(data){
var rdata = $.parseJSON(data.data);
var loadOpen = layer.open({
type: 1,
@ -1325,7 +1325,7 @@ function getMasterRepSlaveList(){
function masterOrSlaveConf(version=''){
function getDbList(){
function getMasterDbList(){
var _data = {};
if (typeof(page) =='undefined'){
var page = 1;
@ -1345,7 +1345,8 @@ function masterOrSlaveConf(version=''){
list += '<td>' + rdata.data[i]['name'] +'</td>';
list += '<td>' + (rdata.data[i]['master']?'是':'否') +'</td>';
list += '<td style="text-align:right">' +
'<a href="javascript:;" class="btlink" onclick="setDbMaster(\''+rdata.data[i]['name']+'\')" title="设置数据库权限">'+(rdata.data[i]['master']?'退出':'加入')+'</a>' +
'<a href="javascript:;" class="btlink" onclick="setDbMaster(\''+rdata.data[i]['name']+'\')" title="加入或退出">'+(rdata.data[i]['master']?'退出':'加入')+'</a> | ' +
'<a href="javascript:;" class="btlink" onclick="getMasterRepSlaveUserCmd(\'\',\''+rdata.data[i]['name']+'\')" title="同步命令">同步命令</a>' +
'</td>';
list += '</tr>';
}
@ -1371,28 +1372,80 @@ function masterOrSlaveConf(version=''){
$('#databasePage').html(rdata.page);
});
}
function getAsyncMasterDbList(){
var _data = {};
if (typeof(page) =='undefined'){
var page = 1;
}
_data['page'] = page;
_data['page_size'] = 10;
myPost('get_slave_list', _data, function(data){
var rdata = $.parseJSON(data.data);
var list = '';
for(i in rdata.data){
list += '<tr>';
list += '<td>' + rdata.data[i]['Master_Host'] +'</td>';
list += '<td>' + rdata.data[i]['Master_Port'] +'</td>';
list += '<td>' + rdata.data[i]['Master_User'] +'</td>';
list += '<td>' + rdata.data[i]['Master_Log_File'] +'</td>';
list += '<td>' + rdata.data[i]['Slave_IO_Running'] +'</td>';
list += '<td>' + rdata.data[i]['Slave_SQL_Running'] +'</td>';
// list += '<td style="text-align:right">' +
// '<a href="javascript:;" class="btlink" onclick="" title="待定">待定</a>' +
// '</td>';
list += '</tr>';
}
// <th style="text-align:right;">操作</th></tr></thead>\
var con = '<div class="divtable mtb10">\
<div class="tablescroll">\
<table id="DataBody" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\
<thead><tr>\
<th>[服务]</th>\
<th>端口</th>\
<th>用户</th>\
<th>日志</th>\
<th>IO</th>\
<th>SQL</th></thead>\
<tbody>\
'+ list +'\
</tbody></table>\
</div>\
</div>';
// <div id="databasePage_slave" class="dataTables_paginate paging_bootstrap page"></div>\
// <div class="table_toolbar">\
// <span class="sync btn btn-default btn-sm" onclick="getMasterRepSlaveList()" title="">添加</span>\
// </div>\
$(".table_slave_list").html(con);
$('#databasePage_slave').html(rdata.page);
});
}
function getMasterStatus(){
myPost('get_master_status', '', function(data){
var rdata = $.parseJSON(data.data);
var limitCon = '<p class="conf_p">\
<span class="f14 c6 mr20">Master[]配置</span><span class="f14 c6 mr20"></span>\
<button class="btn btn-success btn-xs btn-master va0">'+(!rdata.status ? '未开启' : '已开启') +'</button><hr/>\
<button class="btn '+(!rdata.status ? 'btn-danger' : 'btn-success')+' btn-xs btn-master va0">'+(!rdata.status ? '未开启' : '已开启') +'</button><hr/>\
</p>\
<!-- master list -->\
<div class="safe bgw table_master_list"></div>\
<hr/>\
<p class="conf_p">\
<span class="f14 c6 mr20">Slave[]配置</span><span class="f14 c6 mr20"></span>\
<button class="btn btn-success btn-xs btn-slave va0">'+(!rdata.status ? '未开启' : '已开启') +'</button><hr/>\
<button class="btn '+(!rdata.data.slave_status ? 'btn-danger' : 'btn-success')+' btn-xs btn-slave va0">'+(!rdata.data.slave_status ? '未启' : '已启') +'</button><hr/>\
</p>\
<!-- slave list -->\
<div class="safe bgw table_slave_list"></div>\
';
$(".soft-man-con").html(limitCon);
//设置主服务器配置
$(".btn-master").click(function () {
// console.log('.....');
myPost('set_master_status', 'close=change', function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 });
@ -1401,7 +1454,18 @@ function masterOrSlaveConf(version=''){
}, 2000);
});
});
getDbList();
$(".btn-slave").click(function () {
myPost('set_slave_status', 'close=change', function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 });
setTimeout(function(){
getMasterStatus();
}, 2000);
});
});
getMasterDbList();
getAsyncMasterDbList();
});
}
getMasterStatus();

Loading…
Cancel
Save