优化修改

1.mysql修改备注
2.修改版本号
3.mysql迁移功能
4.选择文件优化
pull/109/head
midoks 6 years ago
parent 71c02793ca
commit 47c813c0a6
  1. 1
      .gitignore
  2. 2
      class/core/config_api.py
  3. 1
      plugins/mysql/index.html
  4. 108
      plugins/mysql/index.py
  5. 65
      plugins/mysql/js/mysql.js
  6. 23
      route/static/app/public.js
  7. 4
      tools.py

1
.gitignore vendored

@ -119,3 +119,4 @@ data/site.pl
data/admin_path.pl
data/close.pl
ssl/input.pl
data/datadir.pl

@ -15,7 +15,7 @@ from flask import request
class config_api:
__version = '0.2.1'
__version = '0.3.7'
def __init__(self):
pass

@ -31,6 +31,7 @@
<p class="bgw" onclick="pluginService('mysql');">服务</p>
<p onclick="pluginInitD('mysql');">自启动</p>
<p onclick="pluginConfig('mysql');">配置文件</p>
<p onclick="myDbPos();">存储位置</p>
<p onclick="myPort();">端口</p>
<p onclick="runInfo();">当前状态</p>
<p onclick="myPerfOpt();">性能优化</p>

@ -151,10 +151,6 @@ def getDataDir():
def binLog():
args = getArgs()
# data = checkArgs(args, ['status'])
# if not data[0]:
# return data[1]
conf = getConf()
con = public.readFile(conf)
@ -163,7 +159,7 @@ def binLog():
return public.returnJson(False, '0')
con = con.replace('#log-bin=mysql-bin', 'log-bin=mysql-bin')
con = con.replace('#binlog_format=mixed', 'binlog_format=mixed')
os.system('sync')
public.execShell('sync')
restart()
else:
path = getDataDir()
@ -177,9 +173,9 @@ def binLog():
return public.returnJson(True, dsize)
con = con.replace('log-bin=mysql-bin', '#log-bin=mysql-bin')
con = con.replace('binlog_format=mixed', '#binlog_format=mixed')
os.system('sync')
public.execShell('sync')
restart()
os.system('rm -f ' + path + '/mysql-bin.*')
public.execShell('rm -f ' + path + '/mysql-bin.*')
public.writeFile(conf, con)
return public.returnJson(True, '设置成功!')
@ -195,12 +191,14 @@ def getErrorLog():
if n == 'error.log':
filename = path + '/' + n
break
print filename
if not os.path.exists(filename):
return public.returnJson(False, '指定文件不存在!')
if args.has_key('close'):
public.writeFile(filename, '')
return public.returnJson(True, '日志已清空')
return public.getNumLines(filename, 1000)
return public.returnJson(False, '日志已清空')
info = public.getNumLines(filename, 1000)
return public.returnJson(True, 'OK', info)
def getShowLogFile():
@ -307,6 +305,57 @@ def initdUinstall():
return 'ok'
def getMyDbPos():
file = getConf()
content = public.readFile(file)
rep = 'datadir\s*=\s*(.*)'
tmp = re.search(rep, content)
return tmp.groups()[0].strip()
def setMyDbPos():
args = getArgs()
data = checkArgs(args, ['datadir'])
if not data[0]:
return data[1]
s_datadir = getMyDbPos()
t_datadir = args['datadir']
if t_datadir == s_datadir:
return public.returnJson(False, '与当前存储目录相同,无法迁移文件!')
if not os.path.exists(t_datadir):
public.execShell('mkdir -p ' + t_datadir)
# public.execShell('/etc/init.d/mysqld stop')
stop()
public.execShell('cp -rf ' + s_datadir + '/* ' + t_datadir + '/')
public.execShell('chown -R mysql.mysql ' + t_datadir)
public.execShell('chmod -R 755 ' + t_datadir)
public.execShell('rm -f ' + t_datadir + '/*.pid')
public.execShell('rm -f ' + t_datadir + '/*.err')
path = getServerDir()
myfile = path + '/etc/my.cnf'
mycnf = public.readFile(myfile)
public.writeFile(path + '/etc/my_backup.cnf', mycnf)
mycnf = mycnf.replace(s_datadir, t_datadir)
public.writeFile(myfile, mycnf)
start()
result = public.execShell(
'ps aux|grep mysqld| grep -v grep|grep -v python')
if len(result[0]) > 10:
public.writeFile('data/datadir.pl', t_datadir)
return public.returnJson(True, '存储目录迁移成功!')
else:
public.execShell('pkill -9 mysqld')
public.writeFile(myfile, public.readFile(path + '/etc/my_backup.cnf'))
start()
return public.returnJson(False, '文件迁移失败!')
def getMyPort():
file = getConf()
content = public.readFile(file)
@ -317,8 +366,9 @@ def getMyPort():
def setMyPort():
args = getArgs()
if not 'port' in args:
return 'port missing'
data = checkArgs(args, ['port'])
if not data[0]:
return data[1]
port = args['port']
file = getConf()
@ -586,8 +636,10 @@ def syncToDatabases():
def setRootPwd():
args = getArgs()
if not 'password' in args:
return 'password missing'
data = checkArgs(args, ['password'])
if not data[0]:
return data[1]
password = args['password']
try:
pdb = pMysqlDb()
@ -648,15 +700,31 @@ def setUserPwd():
return isError
pdb.execute("flush privileges")
psdb.where("id=?", (id,)).setField('password', newpassword)
return public.returnJson(True, public.getInfo('修改数据库[{1}]密码成功!', (name)))
return public.returnJson(True, public.getInfo('修改数据库[{1}]密码成功!', (name,)))
except Exception as ex:
print str(ex)
return public.returnJson(False, public.getInfo('修改数据库[{1}]密码失败!', (name)))
# print str(ex)
return public.returnJson(False, public.getInfo('修改数据库[{1}]密码失败!', (name,)))
def addDb():
def setDbPs():
args = getArgs()
data = checkArgs(args, ['id', 'name', 'ps'])
if not data[0]:
return data[1]
ps = args['ps']
sid = args['id']
name = args['name']
try:
psdb = pSqliteDb('databases')
psdb.where("id=?", (sid,)).setField('ps', ps)
return public.returnJson(True, public.getInfo('修改数据库[{1}]备注成功!', (name,)))
except Exception as e:
return public.returnJson(True, public.getInfo('修改数据库[{1}]备注失败!', (name,)))
def addDb():
args = getArgs()
data = checkArgs(args,
['password', 'name', 'codeing', 'db_user', 'dataAccess', 'ps'])
if not data[0]:
@ -990,6 +1058,10 @@ if __name__ == "__main__":
print getErrorLog()
elif func == 'show_log':
print getShowLogFile()
elif func == 'my_db_pos':
print getMyDbPos()
elif func == 'set_db_pos':
print setMyDbPos()
elif func == 'my_port':
print getMyPort()
elif func == 'set_my_port':
@ -1014,6 +1086,8 @@ if __name__ == "__main__":
print getDbAccess()
elif func == 'set_db_access':
print setDbAccess()
elif func == 'set_db_ps':
print setDbPs()
elif func == 'get_db_info':
print getDbInfo()
elif func == 'repair_table':

@ -88,6 +88,26 @@ function runInfo(){
}
function myDbPos(){
myPost('my_db_pos','',function(data){
var con = '<div class="line ">\
<div class="info-r ml0">\
<input id="datadir" name="datadir" class="bt-input-text mr5 port" type="text" style="width:330px" value="'+data.data+'">\
<span class="glyphicon cursor mr5 glyphicon-folder-open icon_datadir" onclick="changePath(\'datadir\')"></span>\
<button id="btn_change_path" name="btn_change_path" class="btn btn-success btn-sm mr5 ml5 btn_change_port">迁移</button>\
</div></div>';
$(".soft-man-con").html(con);
$('#btn_change_path').click(function(){
var datadir = $("input[name='datadir']").val();
myPost('set_db_pos','datadir='+datadir,function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg,{icon:rdata.status ? 1 : 5,time:2000,shade: [0.3, '#000']});
});
});
});
}
function myPort(){
myPost('my_port','',function(data){
var con = '<div class="line ">\
@ -740,36 +760,26 @@ function delDbBatch(){
}
function setDataByKey(tab, key, obj) {
function setDbPs(id, name, obj) {
var _span = $(obj);
var _input = $("<input class='baktext' value="+_span.text()+" type='text' placeholder='备注信息' />");
var _input = $("<input class='baktext' value=\""+_span.text()+"\" type='text' placeholder='备注信息' />");
_span.hide().after(_input);
_input.focus();
_input.blur(function(){
// var item = $(this).parents('tr').data('item');
// console.log(item);
// var _txt = $(this);
// var data = {table:tab,id:item.id};
// data[key] = _txt.val()
// bt.pub.set_data_ps(data,function(rdata){
// if(rdata.status){
// _span.text(_txt.val());
// _span.show();
// _txt.remove();
// }
// })
})
$(this).remove();
var ps = _input.val();
_span.text(ps).show();
var data = {name:name,id:id,ps:ps};
myPost('set_db_ps', data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
});
});
_input.keyup(function(){
if(event.keyCode == 13){
_input.trigger('blur');
}
})
}
function setDbPs(data,callback){
bt.send('setPs','data/setPs',data,function(rdata){
if(callback) callback(rdata);
})
});
}
function openPhpmyadmin(name,username,password){
@ -838,7 +848,7 @@ function dbList(page, search){
'<span class="ico-copy cursor btcopy" style="margin-left:10px" title="复制密码" onclick="copyPass(\''+rdata.data[i]['password']+'\')"></span>'+
'</td>';
// list += '<td>备份</td>';
list += '<td><span class="c9 input-edit" onclick="setDataByKey(\'databases\',\'ps\',this)" style="display: inline-block;">'+rdata.data[i]['ps']+'</span></td>';
list += '<td><span class="c9 input-edit" onclick="setDbPs(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['name']+'\',this)" style="display: inline-block;">'+rdata.data[i]['ps']+'</span></td>';
list += '<td style="text-align:right">' +
'<a href="javascript:;" class="btlink" onclick="openPhpmyadmin(\''+rdata.data[i]['name']+'\',\''+rdata.data[i]['username']+'\',\''+rdata.data[i]['password']+'\')" title="数据库管理">管理</a> | ' +
'<a href="javascript:;" class="btlink" onclick="repTools(\''+rdata.data[i]['name']+'\')" title="MySQL优化修复工具">工具</a> | ' +
@ -935,9 +945,12 @@ function myLogs(){
})
myPost('error_log', 'p=1', function(data){
var error_body = data.data;
if (error_body == "") {
error_body = '当前没有日志内容!';
var rdata = $.parseJSON(data.data);
var error_body = '';
if (rdata.status){
error_body = rdata.data;
} else {
error_body = rdata.msg;
}
$("#error_log").text(error_body);
var ob = document.getElementById('error_log');

@ -235,7 +235,11 @@ function getDiskList(b) {
}
function createFolder() {
var a = "<tr><td colspan='2'><span class='glyphicon glyphicon-folder-open'></span> <input id='newFolderName' class='newFolderName' type='text' value=''></td><td colspan='3'><button id='nameOk' type='button' class='btn btn-success btn-sm'>"+lan.public.ok+"</button>&nbsp;&nbsp;<button id='nameNOk' type='button' class='btn btn-default btn-sm'>"+lan.public.cancel+"</button></td></tr>";
var a = "<tr>\
<td colspan='2'><span class='glyphicon glyphicon-folder-open'></span><input id='newFolderName' class='newFolderName' type='text' value=''></td>\
<td colspan='3'><button id='nameOk' type='button' class='btn btn-success btn-sm'>确定</button>\
&nbsp;&nbsp;<button id='nameNOk' type='button' class='btn btn-default btn-sm'>取消</button></td>\
</tr>";
if($("#tbody tr").length == 0) {
$("#tbody").append(a)
} else {
@ -247,7 +251,7 @@ function createFolder() {
var b = $("#PathPlace").find("span").text();
newTxt = b.replace(new RegExp(/(\/\/)/g), "/") + c;
var d = "path=" + newTxt;
$.post("/files?action=CreateDir", d, function(e) {
$.post("/files/create_dir", d, function(e) {
if(e.status == true) {
layer.msg(e.msg, {
icon: 1
@ -257,8 +261,8 @@ function createFolder() {
icon: 2
})
}
getDiskList(b)
})
getDiskList(b);
},'json');
});
$("#nameNOk").click(function() {
$(this).parents("tr").remove()
@ -269,7 +273,7 @@ function NewDelFile(c) {
var a = $("#PathPlace").find("span").text();
newTxt = c.replace(new RegExp(/(\/\/)/g), "/");
var b = "path=" + newTxt + "&empty=True";
$.post("/files?action=DeleteDir", b, function(d) {
$.post("/files/delete_dir", b, function(d) {
if(d.status == true) {
layer.msg(d.msg, {
icon: 1
@ -280,7 +284,7 @@ function NewDelFile(c) {
})
}
getDiskList(a);
})
},'json');
}
function activeDisk() {
@ -338,8 +342,13 @@ function backFile() {
function getfilePath() {
var a = $("#PathPlace").find("span").text();
a = a.replace(new RegExp(/(\\)/g), "/");
a_len = a.length;
if (a[a_len-1] == '/'){
a = a.substr(0,a_len-1);
}
$("#" + getCookie("SetId")).val(a + getCookie("SetName"));
layer.close(getCookie("ChangePath"))
layer.close(getCookie("ChangePath"));
}
function setCookie(a, c) {

@ -57,9 +57,9 @@ echo "The root password set ${pwd} successuful"'''
os.system("/bin/bash mysql_root.sh " + password)
os.system("rm -f mysql_root.sh")
result = sql.table('config').where(
pos = public.getServerDir() + '/mysql'
result = sql.table('config').dbPos(pos, 'mysql').where(
'id=?', (1,)).setField('mysql_root', password)
print(result)
def set_panel_pwd(password, ncli=False):

Loading…
Cancel
Save