pull/109/head
Mr Chen 6 years ago
parent 1797ee393f
commit 8e6b156353
  1. 78
      plugins/mysql/index.py
  2. 157
      plugins/mysql/js/mysql.js

@ -339,10 +339,9 @@ def setDbStatus():
public.writeFile(conFile, content)
return public.returnJson(True, '设置成功!')
# 检测数据库执行错误
def isSqlError(mysqlMsg):
# 检测数据库执行错误
mysqlMsg = str(mysqlMsg)
if "MySQLdb" in mysqlMsg:
return public.returnJson(False, 'MySQLdb组件缺失! <br>进入SSH命令行输入: pip install mysql-python')
@ -357,6 +356,46 @@ def isSqlError(mysqlMsg):
return None
def getDbList():
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 = ''
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()
_page = {}
_page['count'] = count
_page['p'] = page
_page['row'] = page_size
_page['tojs'] = 'dbList'
data['page'] = public.getPage(_page)
data['data'] = clist
info = {}
info['root_pwd'] = pSqliteDb('config').where(
'id=?', (1,)).getField('mysql_root')
data['info'] = info
return public.getJson(data)
def syncGetDatabases():
pdb = pMysqlDb()
psdb = pSqliteDb('databases')
@ -394,6 +433,37 @@ def syncGetDatabases():
msg = public.getInfo('本次共从服务器获取了{1}个数据库!', (str(n),))
return public.returnJson(True, msg)
def setRootPwd():
args = getArgs()
if not 'password' in args:
return 'password missing'
password = args['password']
try:
pdb = pMysqlDb()
result = pdb.query("show databases")
isError = isSqlError(result)
if isError != None:
return isError
m_version = public.readFile(getServerDir() + '/version.pl')
if m_version.find('5.7') == 0 or m_version.find('8.0') == 0:
pdb.execute(
"UPDATE mysql.user SET authentication_string='' WHERE user='root'")
pdb.execute(
"ALTER USER 'root'@'localhost' IDENTIFIED BY '%s'" % password)
pdb.execute(
"ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY '%s'" % password)
else:
result = pdb.execute(
"update mysql.user set Password=password('" + password + "') where User='root'")
pdb.execute("flush privileges")
pSqliteDb('config').where('id=?', (1,)).save('mysql_root', (password,))
return public.returnJson(True, '数据库root密码修改成功!')
except Exception as ex:
return public.returnJson(False, '修改错误:' + str(ex))
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
@ -428,7 +498,11 @@ if __name__ == "__main__":
print setMyPort()
elif func == 'init_pwd':
print initMysqlPwd()
elif func == 'get_db_list':
print getDbList()
elif func == 'sync_get_databases':
print syncGetDatabases()
elif func == 'set_root_pwd':
print setRootPwd()
else:
print 'error'

@ -413,10 +413,144 @@ function comMySqlMem() {
$("input[name='memSize']").val(memSize.toFixed(2));
}
function dbList(){
var con = '<div class="safe bgw">\
<button onclick="database.add_database()" title="添加数据库" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加数据库</button>\
<button onclick="bt.database.set_root()" title="设置MySQL管理员密码" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">root密码</button>\
function syncGetDatabase(){
myPost('sync_get_databases', null, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
dbList();
},{ icon: rdata.status ? 1 : 2 });
});
}
function setRootPwd(type, pwd){
if (type==1){
var data = $("#mod_pwd").serialize();
myPost('set_root_pwd', data, function(data){
var rdata = $.parseJSON(data.data);
// console.log(rdata);
showMsg(rdata.msg,function(){
dbList();
$('.layui-layer-close1').click();
},{icon: rdata.status ? 1 : 2});
});
return;
}
var index = layer.open({
type: 1,
skin: 'demo-class',
area: '500px',
title: '修改数据库密码',
closeBtn: 1,
shift: 5,
shadeClose: true,
content: "<form class='bt-form pd20 pb70' id='mod_pwd'>\
<div class='line'>\
<span class='tname'>root密码</span>\
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+pwd+"' /><span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
</div>\
<div class='bt-form-submit-btn'>\
<button id='my_mod_close' type='button' class='btn btn-danger btn-sm btn-title'>关闭</button>\
<button type='button' class='btn btn-success btn-sm btn-title' onclick=\"setRootPwd(1)\" >提交</button>\
</div>\
</form>",
});
$('#my_mod_close').click(function(){
$('.layui-layer-close1').click();
});
}
function addDatabase(){
var index = layer.open({
type: 1,
skin: 'demo-class',
area: '500px',
title: '添加数据库',
closeBtn: 1,
shift: 5,
shadeClose: true,
content: "<form class='bt-form pd20 pb70' id='add_db'>\
<div class='line'>\
<span class='tname'>数据库名</span>\
<div class='info-r'><input name='name' class='bt-input-text mr5' placeholder='新的数据库名称' type='text' style='width:65%' value=''>\
<select class='bt-input-text mr5 codeing_a5nGsm' name='codeing' style='width:27%'>\
<option value='utf8'>utf-8</option>\
<option value='utf8mb4'>utf8mb4</option>\
<option value='gbk'>gbk</option>\
<option value='big5'>big5</option>\
</select>\
</div>\
</div>\
<div class='line'><span class='tname'>用户名</span><div class='info-r'><input name='db_user' class='bt-input-text mr5' placeholder='' type='text' style='width:65%' value=''></div></div>\
<div class='line'>\
<span class='tname'>密码</span>\
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+(randomStrPwd(16))+"' /><span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
</div>\
<div class='line'>\
<span class='tname'>访问权限</span>\
<div class='info-r '>\
<select class='bt-input-text mr5' name='dataAccess' style='width:100px'>\
<option value='127.0.0.1'>本地服务器</option>\
<option value='%'>所有人</option>\
<option value='ip'>指定IP</option>\
</select>\
<input id='dataAccess_subid' class='bt-input-text mr5' type='text' name='address' placeholder='多个IP使用逗号(,)分隔' style='width: 230px; display: inline-block;'>\
</div>\
</div>\
<div class='bt-form-submit-btn'>\
<button id='my_mod_close' type='button' class='btn btn-danger btn-sm btn-title'>关闭</button>\
<button type='button' class='btn btn-success btn-sm btn-title' onclick=\"setRootPwd(1)\" >提交</button>\
</div>\
</form>",
});
$('#my_mod_close').click(function(){
$('.layui-layer-close1').click();
});
}
function dbList(page, search){
var _data = {};
if (typeof(page) =='undefined'){
var page = 1;
}
_data['page'] = page;
_data['page_size'] = 10;
if(typeof(search) != 'undefined'){
_data['search'] = search;
}
myPost('get_db_list', _data, function(data){
var rdata = $.parseJSON(data.data);
// console.log(rdata);
var list = '';
for(i in rdata.data){
// console.log(i, rdata.data[i]);
list += '<tr>';
list +='<td><input value="1" class="check" onclick="bt.check_select();" type="checkbox"></td>';
list += '<td>' + rdata.data[i]['name'] +'</td>';
list += '<td>' + rdata.data[i]['username'] +'</td>';
list += '<td>' +
'<span class="password" data-pw="cajKa4ZAmQJNaYsx">**********</span>' +
'<span onclick="bt.pub.show_hide_pass(this)" class="glyphicon glyphicon-eye-open cursor pw-ico" style="margin-left:10px"></span>'+
'<span class="ico-copy cursor btcopy" style="margin-left:10px" title="复制密码" data-pw="cajKa4ZAmQJNaYsx" onclick="bt.pub.copy_pass(\'cajKa4ZAmQJNaYsx\')"></span>'+
'</td>';
list += '<td>备份</td>';
list += '<td>' + rdata.data[i]['ps'] +'</td>';
list += '<td style="text-align:right">' +
'<a href="javascript:;" class="btlink" title="数据库管理">管理</a> | ' +
'<a href="javascript:;" class="btlink" title="MySQL优化修复工具">工具</a> | ' +
'<a href="javascript:;" class="btlink" title="设置数据库权限">权限</a> | ' +
'<a href="javascript:;" class="btlink" title="修改数据库密码">改密</a> | ' +
'<a href="javascript:;" class="btlink" title="删除数据库">删除</a>' +
'</td>';
list += '</tr>';
}
var con = '<div class="safe bgw">\
<button onclick="addDatabase()" title="添加数据库" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加数据库</button>\
<button onclick="setRootPwd(0,\''+rdata.info['root_pwd']+'\')" title="设置MySQL管理员密码" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">root密码</button>\
<button onclick="bt.database.open_phpmyadmin(\'\',\'root\',\'bce2de353cba1ce2\')" title="打开phpMyadmin" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">phpMyAdmin</button>\
<span style="float:right"> \
<button batch="true" style="float: right;display: none;margin-left:10px;" onclick="database.batch_database(\'del\');" title="删除选中项" class="btn btn-default btn-sm">删除选中</button>\
@ -432,9 +566,10 @@ function dbList(){
<th>备份</th><th></th>\
<th style="text-align:right;">操作</th></tr></thead>\
<tbody>\
'+ list +'\
</tbody></table>\
</div>\
<div id="databasePage" class="dataTables_paginate paging_bootstrap page"><div><span class="Pcurrent">1</span><span class="Pcount">2</span></div></div>\
<div id="databasePage" class="dataTables_paginate paging_bootstrap page"></div>\
<div class="table_toolbar">\
<span class="sync btn btn-default btn-sm" style="margin-right:5px" onclick="database.sync_to_database(1)" title="将选中数据库信息同步到服务器">同步选中</span>\
<span class="sync btn btn-default btn-sm" style="margin-right:5px" onclick="database.sync_to_database(0)" title="将所有数据库信息同步到服务器">同步所有</span>\
@ -443,14 +578,8 @@ function dbList(){
</div>\
</div>';
$(".soft-man-con").html(con);
}
function syncGetDatabase(){
myPost('sync_get_databases', null, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
dbList();
},{ icon: rdata.status ? 1 : 2 });
$(".soft-man-con").html(con);
$('#databasePage').html(rdata.page);
});
}

Loading…
Cancel
Save