function str2Obj(str){ var data = {}; kv = str.split('&'); for(i in kv){ v = kv[i].split('='); data[v[0]] = v[1]; } return data; } function myPost(method,args,callback){ var _args = null; if (typeof(args) == 'string'){ _args = JSON.stringify(str2Obj(args)); } else { _args = JSON.stringify(args); } var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); $.post('/plugins/run', {name:'mysql', func:method, args:_args}, function(data) { layer.close(loadT); if (!data.status){ layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); return; } if(typeof(callback) == 'function'){ callback(data); } },'json'); } function runInfo(){ myPost('run_info','',function(data){ var rdata = $.parseJSON(data.data); // console.log(rdata); var cache_size = ((parseInt(rdata.Qcache_hits) / (parseInt(rdata.Qcache_hits) + parseInt(rdata.Qcache_inserts))) * 100).toFixed(2) + '%'; if (cache_size == 'NaN%') cache_size = 'OFF'; var Con = '
\ \ \ \ \ \ \
启动时间' + getLocalTime(rdata.Run) + '每秒查询' + parseInt(rdata.Questions / rdata.Uptime) + '
总连接次数' + rdata.Connections + '每秒事务' + parseInt((parseInt(rdata.Com_commit) + parseInt(rdata.Com_rollback)) / rdata.Uptime) + '
发送' + toSize(rdata.Bytes_sent) + 'File' + rdata.File + '
接收' + toSize(rdata.Bytes_received) + 'Position' + rdata.Position + '
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
活动/峰值连接数' + rdata.Threads_running + '/' + rdata.Max_used_connections + '若值过大,增加max_connections
线程缓存命中率' + ((1 - rdata.Threads_created / rdata.Connections) * 100).toFixed(2) + '%若过低,增加thread_cache_size
索引命中率' + ((1 - rdata.Key_reads / rdata.Key_read_requests) * 100).toFixed(2) + '%若过低,增加key_buffer_size
Innodb索引命中率' + ((1 - rdata.Innodb_buffer_pool_reads / rdata.Innodb_buffer_pool_read_requests) * 100).toFixed(2) + '%若过低,增加innodb_buffer_pool_size
查询缓存命中率' + cache_size + '' + lan.soft.mysql_status_ps5 + '
创建临时表到磁盘' + ((rdata.Created_tmp_disk_tables / rdata.Created_tmp_tables) * 100).toFixed(2) + '%若过大,尝试增加tmp_table_size
已打开的表' + rdata.Open_tables + '若过大,增加table_cache_size
没有使用索引的量' + rdata.Select_full_join + '若不为0,请检查数据表的索引是否合理
没有索引的JOIN量' + rdata.Select_range_check + '若不为0,请检查数据表的索引是否合理
排序后的合并次数' + rdata.Sort_merge_passes + '若值过大,增加sort_buffer_size
锁表次数' + rdata.Table_locks_waited + '若值过大,请考虑增加您的数据库性能
' $(".soft-man-con").html(Con); }); } function myPort(){ myPost('my_port','',function(data){ var con = '
\
\ \ \
'; $(".soft-man-con").html(con); $('#btn_change_port').click(function(){ var port = $("input[name='port']").val(); // console.log(port); myPost('set_my_port','port='+port,function(data){ var rdata = $.parseJSON(data.data); if (rdata.status){ layer.msg('修改成功!',{icon:1,time:2000,shade: [0.3, '#000']}); } else { layer.msg(rdata.msg,{icon:1,time:2000,shade: [0.3, '#000']}); } }); }); }); } function selectChange() { $("#SelectVersion,#selectVer").change(function() { var info = $(this).val(); var name = info.split(" ")[0]; var version = info.split(" ")[1]; max = 64 msg = "64M" if (name == 'mysql') { memSize = getCookie('memSize'); switch (version) { case '5.1': max = 256; msg = '256M'; break; case '8.0': max = 5200; msg = '6GB'; break; case '5.7': max = 1500; msg = '2GB'; break; case '5.6': max = 800; msg = '1GB'; break; case 'AliSQL': max = 800; msg = '1GB'; break; case 'mariadb_10.0': max = 800; msg = '1GB'; break; case 'mariadb_10.1': max = 1500; msg = '2GB'; break; } if (memSize < max) { layer.msg(lan.bt.insatll_mem.replace('{1}', msg).replace('{2}', version), { icon: 5 }); } } }); } //设置二进制日志 function SetBinLog() { var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: 0.3 }); $.post('/database?action=BinLog', "", function(rdata) { layer.close(loadT); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); mysqlLog(); }); } //清空日志 function closeMySqlLog() { var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: 0.3 }); $.post('/database?action=GetErrorLog', "close=1", function(rdata) { layer.close(loadT); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); mysqlLog(); }); } //数据库端口 function changeMySQLPort(act) { if (act != undefined) { layer.confirm(lan.soft.mysql_port_title, { closeBtn: 2, icon: 3 }, function() { var port = $("#dataport").val(); var data = 'port=' + port; var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/database?action=SetMySQLPort', data, function(rdata) { layer.close(loadT) layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); }); }); return; } $.post('/database?action=GetMySQLInfo', '', function(rdata) { var LimitCon = '

\ \ \

'; $(".soft-man-con").html(LimitCon); }); } //软件切换版本 function softChangeVer(name, version) { if (name == "mysqld") name = "mysql"; var veropt = version.split("|"); var SelectVersion = ''; for (var i = 0; i < veropt.length; i++) { SelectVersion += ''; } var body = "
" + lan.soft.select_version + "
'; if (name == 'mysql') { body += "" } $(".soft-man-con").html(body); $(".btn-success").click(function() { var ver = $("#selectVer").val(); oneInstall(name, ver.split(" ")[1]); }); selectChange(); } //设置MySQL配置参数 function SetMySQLConf() { $.post('/system?action=GetMemInfo', '', function(memInfo) { //var memSize = memInfo['memTotal']; //var setSize = parseInt($("input[name='memSize']").val()); //if(memSize < setSize){ // var msg = lan.soft.mysql_set_err.replace('{1}',memSize).replace('{2}',setSize); // layer.msg(msg,{icon:2,time:5000}); // return; //} var query_cache_size = parseInt($("input[name='query_cache_size']").val()); var query_cache_type = 0; if (query_cache_size > 0) { query_cache_type = 1; } var data = { key_buffer_size: parseInt($("input[name='key_buffer_size']").val()), query_cache_size: query_cache_size, query_cache_type: query_cache_type, tmp_table_size: parseInt($("input[name='tmp_table_size']").val()), max_heap_table_size: parseInt($("input[name='tmp_table_size']").val()), innodb_buffer_pool_size: parseInt($("input[name='innodb_buffer_pool_size']").val()), innodb_log_buffer_size: parseInt($("input[name='innodb_log_buffer_size']").val()), sort_buffer_size: parseInt($("input[name='sort_buffer_size']").val()), read_buffer_size: parseInt($("input[name='read_buffer_size']").val()), read_rnd_buffer_size: parseInt($("input[name='read_rnd_buffer_size']").val()), join_buffer_size: parseInt($("input[name='join_buffer_size']").val()), thread_stack: parseInt($("input[name='thread_stack']").val()), binlog_cache_size: parseInt($("input[name='binlog_cache_size']").val()), thread_cache_size: parseInt($("input[name='thread_cache_size']").val()), table_open_cache: parseInt($("input[name='table_open_cache']").val()), max_connections: parseInt($("input[name='max_connections']").val()) }; $.post('/database?action=SetDbConf', data, function(rdata) { layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); }) } //MySQL内存优化方案 function MySQLMemOpt(opt) { var query_size = parseInt($("input[name='query_cache_size']").val()); switch (opt) { case '1': $("input[name='key_buffer_size']").val(128); if (query_size) $("input[name='query_cache_size']").val(64); $("input[name='tmp_table_size']").val(64); $("input[name='innodb_buffer_pool_size']").val(256); $("input[name='sort_buffer_size']").val(768); $("input[name='read_buffer_size']").val(768); $("input[name='read_rnd_buffer_size']").val(512); $("input[name='join_buffer_size']").val(1024); $("input[name='thread_stack']").val(256); $("input[name='binlog_cache_size']").val(64); $("input[name='thread_cache_size']").val(64); $("input[name='table_open_cache']").val(128); $("input[name='max_connections']").val(100); break; case '2': $("input[name='key_buffer_size']").val(256); if (query_size) $("input[name='query_cache_size']").val(128); $("input[name='tmp_table_size']").val(384); $("input[name='innodb_buffer_pool_size']").val(384); $("input[name='sort_buffer_size']").val(768); $("input[name='read_buffer_size']").val(768); $("input[name='read_rnd_buffer_size']").val(512); $("input[name='join_buffer_size']").val(2048); $("input[name='thread_stack']").val(256); $("input[name='binlog_cache_size']").val(64); $("input[name='thread_cache_size']").val(96); $("input[name='table_open_cache']").val(192); $("input[name='max_connections']").val(200); break; case '3': $("input[name='key_buffer_size']").val(384); if (query_size) $("input[name='query_cache_size']").val(192); $("input[name='tmp_table_size']").val(512); $("input[name='innodb_buffer_pool_size']").val(512); $("input[name='sort_buffer_size']").val(1024); $("input[name='read_buffer_size']").val(1024); $("input[name='read_rnd_buffer_size']").val(768); $("input[name='join_buffer_size']").val(2048); $("input[name='thread_stack']").val(256); $("input[name='binlog_cache_size']").val(128); $("input[name='thread_cache_size']").val(128); $("input[name='table_open_cache']").val(384); $("input[name='max_connections']").val(300); break; case '4': $("input[name='key_buffer_size']").val(512); if (query_size) $("input[name='query_cache_size']").val(256); $("input[name='tmp_table_size']").val(1024); $("input[name='innodb_buffer_pool_size']").val(1024); $("input[name='sort_buffer_size']").val(2048); $("input[name='read_buffer_size']").val(2048); $("input[name='read_rnd_buffer_size']").val(1024); $("input[name='join_buffer_size']").val(4096); $("input[name='thread_stack']").val(384); $("input[name='binlog_cache_size']").val(192); $("input[name='thread_cache_size']").val(192); $("input[name='table_open_cache']").val(1024); $("input[name='max_connections']").val(400); break; case '5': $("input[name='key_buffer_size']").val(1024); if (query_size) $("input[name='query_cache_size']").val(384); $("input[name='tmp_table_size']").val(2048); $("input[name='innodb_buffer_pool_size']").val(4096); $("input[name='sort_buffer_size']").val(4096); $("input[name='read_buffer_size']").val(4096); $("input[name='read_rnd_buffer_size']").val(2048); $("input[name='join_buffer_size']").val(8192); $("input[name='thread_stack']").val(512); $("input[name='binlog_cache_size']").val(256); $("input[name='thread_cache_size']").val(256); $("input[name='table_open_cache']").val(2048); $("input[name='max_connections']").val(500); break; } } //重启MySQL function ReBootMySqld() { var loadT = layer.msg(lan.get('service_the', [lan.bt.restart, 'MySQLd']), { icon: 16, time: 0, shade: 0.3 }); $.post('/system?action=ServiceAdmin', 'name=mysqld&type=restart', function(rdata) { layer.close(loadT); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); } //计算MySQL内存开销 function ComMySqlMem() { var key_buffer_size = parseInt($("input[name='key_buffer_size']").val()); var query_cache_size = parseInt($("input[name='query_cache_size']").val()); var tmp_table_size = parseInt($("input[name='tmp_table_size']").val()); var innodb_buffer_pool_size = parseInt($("input[name='innodb_buffer_pool_size']").val()); var innodb_additional_mem_pool_size = parseInt($("input[name='innodb_additional_mem_pool_size']").val()); var innodb_log_buffer_size = parseInt($("input[name='innodb_log_buffer_size']").val()); var sort_buffer_size = $("input[name='sort_buffer_size']").val() / 1024; var read_buffer_size = $("input[name='read_buffer_size']").val() / 1024; var read_rnd_buffer_size = $("input[name='read_rnd_buffer_size']").val() / 1024; var join_buffer_size = $("input[name='join_buffer_size']").val() / 1024; var thread_stack = $("input[name='thread_stack']").val() / 1024; var binlog_cache_size = $("input[name='binlog_cache_size']").val() / 1024; var max_connections = $("input[name='max_connections']").val(); var a = key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size var b = sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size var memSize = a + max_connections * b $("input[name='memSize']").val(memSize.toFixed(2)); } //数据库存储信置 function changeMySQLDataPath(act) { if (act != undefined) { layer.confirm(lan.soft.mysql_to_msg, { closeBtn: 2, icon: 3 }, function() { var datadir = $("#datadir").val(); var data = 'datadir=' + datadir; var loadT = layer.msg(lan.soft.mysql_to_msg1, { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/database?action=SetDataDir', data, function(rdata) { layer.close(loadT) layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); }); }); return; } $.post('/database?action=GetMySQLInfo', '', function(rdata) { var LimitCon = '

\ \ \

'; $(".soft-man-con").html(LimitCon); }); } //数据库日志 function mysqlLog(act) { //获取二进制日志相关信息 $.post('/database?action=BinLog', "status=1", function(rdata) { var limitCon = '

\ ' + lan.soft.mysql_log_bin + ' ' + ToSize(rdata.msg) + '\ \

' + lan.soft.mysql_log_err + '

\ \

' $(".soft-man-con").html(limitCon); //获取错误日志 $.post('/database?action=GetErrorLog', "", function(error_body) { if (error_body.status === false) { layer.msg(error_body.msg, { icon: 5 }); error_body = lan.soft.mysql_log_ps1; } if (error_body == "") error_body = lan.soft.mysql_log_ps1; $("#error_log").text(error_body); var ob = document.getElementById('error_log'); ob.scrollTop = ob.scrollHeight; }); }); } //数据库配置状态 function mysqlStatus() { //获取MySQL配置 $.post('/database?action=GetDbStatus', "", function(rdata) { var key_buffer_size = ToSizeM(rdata.mem.key_buffer_size) var query_cache_size = ToSizeM(rdata.mem.query_cache_size) var tmp_table_size = ToSizeM(rdata.mem.tmp_table_size) var innodb_buffer_pool_size = ToSizeM(rdata.mem.innodb_buffer_pool_size) var innodb_additional_mem_pool_size = ToSizeM(rdata.mem.innodb_additional_mem_pool_size) var innodb_log_buffer_size = ToSizeM(rdata.mem.innodb_log_buffer_size) var sort_buffer_size = ToSizeM(rdata.mem.sort_buffer_size) var read_buffer_size = ToSizeM(rdata.mem.read_buffer_size) var read_rnd_buffer_size = ToSizeM(rdata.mem.read_rnd_buffer_size) var join_buffer_size = ToSizeM(rdata.mem.join_buffer_size) var thread_stack = ToSizeM(rdata.mem.thread_stack) var binlog_cache_size = ToSizeM(rdata.mem.binlog_cache_size) var a = key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size var b = sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size var memSize = a + rdata.mem.max_connections * b var memCon = '
\
' + lan.soft.mysql_set_msg + '\ \ ' + lan.soft.mysql_set_maxmem + ': MB\
\

key_buffer_sizeMB, ' + lan.soft.mysql_set_key_buffer_size + '

\

query_cache_sizeMB, ' + lan.soft.mysql_set_query_cache_size + '

\

tmp_table_sizeMB, ' + lan.soft.mysql_set_tmp_table_size + '

\

innodb_buffer_pool_sizeMB, ' + lan.soft.mysql_set_innodb_buffer_pool_size + '

\

innodb_log_buffer_sizeMB, ' + lan.soft.mysql_set_innodb_log_buffer_size + '

\

innodb_additional_mem_pool_sizeMB

\

sort_buffer_sizeKB * ' + lan.soft.mysql_set_conn + ', ' + lan.soft.mysql_set_sort_buffer_size + '

\

read_buffer_sizeKB * ' + lan.soft.mysql_set_conn + ', ' + lan.soft.mysql_set_read_buffer_size + '

\

read_rnd_buffer_sizeKB * ' + lan.soft.mysql_set_conn + ', ' + lan.soft.mysql_set_read_rnd_buffer_size + '

\

join_buffer_sizeKB * ' + lan.soft.mysql_set_conn + ', ' + lan.soft.mysql_set_join_buffer_size + '

\

thread_stackKB * ' + lan.soft.mysql_set_conn + ', ' + lan.soft.mysql_set_thread_stack + '

\

binlog_cache_sizeKB * ' + lan.soft.mysql_set_conn + ', ' + lan.soft.mysql_set_binlog_cache_size + '

\

thread_cache_size ' + lan.soft.mysql_set_thread_cache_size + '

\

table_open_cache ' + lan.soft.mysql_set_table_open_cache + '

\

max_connections ' + lan.soft.mysql_set_max_connections + '

\
\
' $(".soft-man-con").html(memCon); $(".conf_p input[name*='size'],.conf_p input[name='max_connections'],.conf_p input[name='thread_stack']").change(function() { ComMySqlMem(); }); $(".conf_p select[name='mysql_set']").change(function() { MySQLMemOpt($(this).val()); ComMySqlMem(); }); }); }