diff --git a/plugins/mysql/index.html b/plugins/mysql/index.html
index e0264171d..dd5e4f605 100755
--- a/plugins/mysql/index.html
+++ b/plugins/mysql/index.html
@@ -10,6 +10,7 @@
端口
当前状态
性能优化
+ 日志
慢日志
管理列表
diff --git a/plugins/mysql/index.py b/plugins/mysql/index.py
index 427a232e0..4e556fb32 100755
--- a/plugins/mysql/index.py
+++ b/plugins/mysql/index.py
@@ -149,6 +149,43 @@ def getDataDir():
return tmp.groups()[0].strip()
+def binLog():
+ args = getArgs()
+ # data = checkArgs(args, ['status'])
+ # if not data[0]:
+ # return data[1]
+
+ conf = getConf()
+ con = public.readFile(conf)
+
+ if con.find('#log-bin=mysql-bin') != -1:
+ if args.has_key('status'):
+ 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')
+ restart()
+ else:
+ path = getDataDir()
+ if args.has_key('status'):
+ dsize = 0
+ for n in os.listdir(path):
+ if len(n) < 9:
+ continue
+ if n[0:9] == 'mysql-bin':
+ dsize += os.path.getsize(path + '/' + n)
+ 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')
+ restart()
+ os.system('rm -f ' + path + '/mysql-bin.*')
+
+ public.writeFile(conf, con)
+
+ return public.returnJson(True, '设置成功!')
+
+
def getShowLogFile():
file = getConf()
content = public.readFile(file)
@@ -170,8 +207,8 @@ def initMysqlData():
if not os.path.exists(datadir + '/mysql'):
serverdir = getServerDir()
user = pGetDbUser()
- cmd = 'cd ' + serverdir + ' && ./scripts/mysql_install_db --user=' + user + ' --basedir=' + \
- serverdir + ' --ldata=' + datadir
+ cmd = 'cd ' + serverdir + ' && ./scripts/mysql_install_db --user=' + \
+ user + ' --basedir=' + serverdir + ' --ldata=' + datadir
public.execShell(cmd)
return 0
return 1
@@ -772,6 +809,8 @@ if __name__ == "__main__":
print setDbStatus()
elif func == 'conf':
print getConf()
+ elif func == 'bin_log':
+ print binLog()
elif func == 'show_log':
print getShowLogFile()
elif func == 'my_port':
diff --git a/plugins/mysql/js/data.js b/plugins/mysql/js/data.js
deleted file mode 100755
index d54ebe20c..000000000
--- a/plugins/mysql/js/data.js
+++ /dev/null
@@ -1,692 +0,0 @@
-/**
- * 取回数据库列表
- * @param {Number} page 页码
- */
-function getData(page,search) {
- search = $("#SearchValue").prop("value");
- order = getCookie('order');
- if(order){
- order = '&order=' + order;
- }else{
- order = '';
- }
- var sUrl = '/data?action=getData';
- var sUrlData='tojs=getData&table=databases&limit=15&p='+page+'&search='+search + order;
- var loadT = layer.load();
- $.post(sUrl, sUrlData,function(data) {
- layer.close(loadT);
- //构造数据列表
- var Body = '';
- if(data.data == ""){
- Body=""+lan.database.empty+" |
";
- $("#DataPage").hide()
- }
- else{
- $("#DataPage").show();
- for (var i = 0; i < data.data.length; i++) {
- if(data.data[i].backup_count==0){
- var isback = ""+lan.database.backup_empty+""
- }else{
- var isback = ""+lan.database.backup_ok+""
- }
- Body += "\
- | " + data.data[i].name + " | \
- " + data.data[i].username + " | \
- ********** | \
- "+isback+" | "+lan.database.input+" | \
- " + data.data[i].ps + " | \
- \
- "+lan.database.admin+" | \
- "+lan.database.auth+" | \
- "+lan.database.edit_pass+" | \
- "+lan.public.del+"\
- |
"
- }
- }
- //输出数据列表
- $("#DataBody").html(Body);
- //输出分页
- $("#DataPage").html(data.page);
- $("#DataPage .Pcount").css("position","static");
- //备注
- $(".btlinkbed").click(function(){
- var dataid = $(this).attr("data-id");
- var databak = $(this).text();
- $(this).hide().after("");
- $(".baktext").focus();
- });
-
- showHidePwd();
- });
-}
-
-/**
- *添加数据库
- * @param {Number} sign 操作标识
- * @param {String} name 数据库名
- * @param {String} type 数据库类型
- * @param {Boolean} adduser 是否添加新用户
- * @param {String} bak 备注
- */
-function DataAdd(sign){
- if(sign==0){
- var index = layer.open({
- type: 1,
- skin: 'demo-class',
- area: '480px',
- title: lan.database.add_title,
- closeBtn: 2,
- shift: 5,
- shadeClose: false,
- content: ""
- });
-
- $("#dataAccess").change(function(){
- var access = $(this).val();
- if(access == 'ip'){
- $("input[name=address]").show().val('');
- }else{
- $("input[name=address]").hide();
- }
- });
-
- $("#db_name").change(function(){
- $("input[name='db_user']").val($(this).val());
- });
- }else{
- var loadT=layer.load({shade:true,shadeClose:false});
- var access = $("#dataAccess").val();
- if(access != 'ip') $("input[name=address]").val(access);
- var data = $("#DataAdd").serialize();
- $.post('/database?action=AddDatabase',data,function(rdata){
- if(rdata.status){
- getData(1);
- layer.closeAll();
- layer.msg(rdata.msg,{icon:1});
- }else{
- layer.closeAll();
- layer.msg(rdata.msg,{icon:2});
- }
- });
- }
-}
-/**
- *设置数据库密码
- * @param {Number} sign 操作标识
- * @param {String} passwd 数据库新密码
- */
-function DataSetuppwd(sign, passwd) {
- if (sign == 0) {
- $.post('/data?action=getKey','table=config&key=mysql_root&id=1',function(rdata){
- var mypasswd=rdata;
- var index = layer.open({
- type: 1,
- skin: 'demo-class',
- area: '500px',
- title: lan.database.edit_pass_title,
- closeBtn: 2,
- shift: 5,
- shadeClose: false,
- content: ""
- });
- RandomStrPwd(16);
- $("#MyPassword").focus().keyup(function(e){
- if(e.keyCode == 13) $("#PostPwBtn").click();
- });
- });
- } else {
- var loadT=layer.msg(lan.public.the,{icon:16,time:0});
- var newPassword = $("#MyPassword").val();
- var data = 'password='+encodeURIComponent(newPassword);
- $.post('/database?action=SetupPassword',data,function(rdata){
- if(rdata.status){
- getData(1);
- layer.closeAll();
- layer.msg(rdata.msg,{icon:1});
- setTimeout(function(){window.location.reload();},3000);
- }else{
- layer.close(loadT);
- layer.msg(rdata.msg,{icon:2});
- }
- });
- }
-}
-/**
- * 重置数据库密码
- * @param {Number} sign 操作标识
- * @param {String} passwd 数据库密码
- */
-function DataRespwd(sign,id,username){
- if(sign==0){
- layer.open({
- type:1,
- skin:'demo-class',
- area:'450px',
- title:lan.database.edit_pass_title,
- closeBtn:2,
- shift:5,
- shadeClose:false,
- content:""
- });
- return;
- }
- layer.confirm(lan.database.edit_pass_confirm,{title:lan.database.edit_pass_title,icon:3,closeBtn:2},function(index){
- if(index>0){
- var loadT=layer.load({shade:true,shadeClose:false});
- var data = 'username='+encodeURIComponent($("#DataRespwd input[name='username']").val()) + '&password=' + encodeURIComponent($("#DataRespwd input[name='password']").val()) + '&id=' + $("#DataRespwd input[name='id']").val();
- $.post('/database?action=ResDatabasePassword',data,function(rdata){
- getData(1);
- layer.closeAll();
- layer.msg(rdata.msg,{icon:rdata.status?1:2});
- });
- }
- });
-
-}
-/**
- *数据库管理详细信息
- * @param {Number} id 数据库编号
- * @param {String} dataname 数据库名称
- */
-function DataDetails(id,dataname,page){
- if(page == undefined){
- page = '1';
- }
- var loadT = layer.msg(lan.public.the_get,{icon:16,time:0});
- $.post('/data?action=getFind','table=databases&id='+id,function(rdata){
- $.post('/data?action=getData','table=backup&search='+id+'&limit=5&p=1&type=1&tojs=DataDetails&p='+page,function(frdata){
- layer.close(loadT);
- var ftpdown = '';
- var body='';
- var port;
-
- frdata.page = frdata.page.replace(/'/g,'"').replace(/DataDetails\(/g,"DataDetails(" + id + ",0,");
- for(var i=0;i"+lan.public.download+"";
- }else{
- var ftpdown = ""+lan.database.backup_re+" | "+lan.public.download+"";
- }
-
- body += ""+frdata.data[i].name+" | \
- "+(ToSize(frdata.data[i].size))+" | \
- "+frdata.data[i].addtime+" | \
- \
- "+ftpdown+" | "+lan.public.del+"\
- | \
-
"
- }
-
-
- if(dataname == 0){
- var sBody = "\
- "+lan.database.backup_name+" | "+lan.database.backup_size+" | "+lan.database.backup_time+" | "+lan.public.action+" |
\
- "+body+"\
-
"
- $("#DataBackupList").html(sBody);
- $(".page").html(frdata.page);
- return;
- }
- layer.closeAll();
- layer.open({
- type: 1,
- skin: 'demo-class',
- area: '700px',
- title: lan.database.backup_title,
- closeBtn: 2,
- shift: 5,
- shadeClose: false,
- content:"\
- \
- "+lan.database.backup_name+" | "+lan.database.backup_size+" | "+lan.database.backup_time+" | "+lan.public.action+" |
\
- "+body+"\
-
"+frdata.page+"
"
- });
- });
- });
-}
-//恢复数据库备份
-function RecoveryData(fileName,dataName){
- layer.confirm(lan.database.input_confirm,{title:lan.database.input_title,icon:3,closeBtn:2},function(index){
- var loadT =layer.msg(lan.database.input_the, {icon:16,time:0,shade: [0.3, '#000']});
- $.post('/database?action=InputSql','file='+fileName+'&name='+dataName,function(rdata){
- layer.close(loadT);
- layer.msg(rdata.msg,{icon:rdata.status?1:2});
- });
- });
-}
-/**
- *设置数据库备份
- * @param {Number} id 数据库编号
- * @param {String} dataname 数据库名称
- */
-function DataBackup(id,dataname){
- var loadT =layer.msg(lan.database.backup_the, {icon:16,time:0,shade: [0.3, '#000']});
- $.post('/database?action=ToBackup', "id="+id, function(rdata) {
- layer.closeAll();
- layer.msg(rdata.msg,{icon:rdata.status?1:2});
- DataDetails(id,dataname);
- });
-}
-
-/**
- *删除数据库备份
- * @param {Number} id 数据库编号
- * @param {String} dataname 数据库名称
- */
-function DataBackupDelete(typeid,id,dataname){
- layer.confirm(lan.database.backup_del_confirm,{title:lan.database.backup_del_title,icon:3,closeBtn:2},function(index){
- var loadT=layer.load({shade:true,shadeClose:false});
- $.post('/database?action=DelBackup','id='+id,function(frdata){
- layer.closeAll();
- layer.msg(frdata.msg,{icon:frdata.status?1:2});
- DataDetails(typeid,dataname);
- });
- });
-}
-
-/**
- *删除数据库
- * @param {Number} id 数据编号
- */
-
-function DataDelete(id,name){
- SafeMessage(lan.get('del',[name]),lan.get('confirm_del',[name]),function(){
- deleteDatabase(id,name);
- });
-
-}
-
-//删除操作
-function deleteDatabase(id,name){
- var loadT = layer.msg(lan.get('del_all_task_the',[name]),{icon:16,time:0,shade: [0.3, '#000']});
- $.post('/database?action=DeleteDatabase','id='+id+'&name='+name,function(frdata){
- getData(1);
- layer.close(loadT);
- layer.msg(frdata.msg,{icon:frdata.status?1:2});
- });
-}
-
-
-//批量删除
-function allDeleteDatabase(){
- var checkList = $("input[name=id]");
- var dataList = new Array();
- for(var i=0;i"+lan.get('del_all_database',[dataList.length])+"",function(){
- layer.closeAll();
- syncDelete(dataList,0,'');
- });
-}
-
-//模拟同步开始批量删除数据库
-function syncDelete(dataList,successCount,errorMsg){
- if(dataList.length < 1) {
- layer.msg(lan.get('del_all_database_ok',[successCount]),{icon:1});
- return;
- }
- var loadT = layer.msg(lan.get('del_all_task_the',[dataList[0].name]),{icon:16,time:0,shade: [0.3, '#000']});
- $.ajax({
- type:'POST',
- url:'/database?action=DeleteDatabase',
- data:'id='+dataList[0].id+'&name='+dataList[0].name,
- async: true,
- success:function(frdata){
- layer.close(loadT);
- if(frdata.status){
- successCount++;
- $("input[title='"+dataList[0].name+"']").parents("tr").remove();
- }else{
- if(!errorMsg){
- errorMsg = '
'+lan.database.del_all_err+'
';
- }
- errorMsg += ''+dataList[0].name+' -> '+frdata.msg+''
- }
-
- dataList.splice(0,1);
- syncDelete(dataList,successCount,errorMsg);
- }
- });
-}
-
-
-
-/**
- * 选中项操作
- */
-function goSet(num){
- //取选中对象
- var el = document.getElementsByTagName('input');
- var len = el.length;
- var data='';
- var a = '';
- var count = 0;
- //构造POST数据
- for(var i=0;i5 || extLastName.length < 2){
- return "file";
- }
- for(var i=0; i\
- " + fmp[0] + " | \
- " + ((fmp[2].length > 11)?fmp[2]:getLocalTime(fmp[2])) + " | \
- " + (ToSize(fmp[1])) + " | \
- \
- ";
- }
- layer.open({
- type: 1,
- skin: 'demo-class',
- area: '600px',
- title: lan.database.input_title_file,
- closeBtn: 2,
- shift: 5,
- shadeClose: false,
- content: ''
- +'
'
- +'
'
- +'
'
- +''
- +''
- +''+lan.files.file_name+' | '
- +''+lan.files.file_etime+' | '
- +''+lan.files.file_size+' | '
- +''+lan.public.action+' | '
- +'
'
- +''
- +''+Body+''
- +'
'
- +'
'
- +'
'
- +'- '+lan.database.input_ps1+'
'
- +'- '+lan.database.input_ps2+'
'
- +'- '+lan.database.input_ps3+'
'
- +'
'
- +'
'
- });
- });
-}
-
-
-//上传文件
-function UploadFiles1(name){
- var path = getCookie('backup_path') + "/database/";
- var index = layer.open({
- type:1,
- closeBtn: 2,
- title:lan.files.up_title+' --- '+lan.database.input_up_type+'',
- area: ['500px','500px'],
- shadeClose:false,
- content:'\
-
\
-
\
-
\
-
\
-
\
- '+lan.files.up_coding+':\
- \
- \
-
\
-
'
- });
- $("#filesClose").click(function(){
- layer.close(index);
- InputDatabase(name);
- });
- UploadStart(true);
-}
-
-
-//设置访问权限
-function SetDatabaseAccess(dataName,action){
- if(action == 1){
- var access = $("#dataAccess").val();
- if(access == 'ip') access = $("input[name=address]").val();
- layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
- $.post('/database?action=SetDatabaseAccess','name='+dataName+'&access='+access,function(rdata){
- layer.closeAll();
- layer.msg(rdata.msg,{icon:rdata.status?1:2});
- });
- return;
- }
-
-
- $.post('/database?action=GetDatabaseAccess','name='+dataName,function(rdata){
- if(rdata == null){
- layer.msg(lan.database.auth_err,{icon:2});
- return;
- }
- layer.open({
- type: 1,
- skin: 'demo-class',
- area: '480px',
- title: lan.database.auth_title+'['+dataName+']',
- closeBtn: 2,
- shift: 5,
- shadeClose: false,
- content: ""
- });
-
- $("#dataAccess").change(function(){
- var access = $(this).val();
- if(access == 'ip'){
- $("input[name=address]").show().val('');
- }else{
- $("input[name=address]").hide();
- }
- });
- });
-}
-
-//同步到数据库
-function SyncToDatabases(type){
- //取选中对象
- var el = document.getElementsByTagName('input');
- var len = el.length;
- var data=[];
- //构造POST数据
- for(var i=0;i' + toSize(rdata.msg) + '\
+ \
+ '+ lan.soft.mysql_log_err + '
\
+ \
+ '
+ $(".soft-man-con").html(limitCon);
+
+ //设置二进制日志
+ $(".btn-bin").click(function () {
+ myPost('bin_log', 'close=change', function(data){
+ var rdata = $.parseJSON(data.data);
+ layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 });
+
+ setTimeout(function(){
+ myLogs();
+ }, 3000);
+ });
+ });
+ });
+}
diff --git a/route/static/app/public.js b/route/static/app/public.js
index a20c6970c..da6c13adf 100755
--- a/route/static/app/public.js
+++ b/route/static/app/public.js
@@ -1464,7 +1464,7 @@ function pluginLogs(_name, version, func, line){
rdata.data = '当前没有日志!';
}
var ebody = '\
- \
+ \
';
$(".soft-man-con").html(ebody);
var ob = document.getElementById('info_log');