diff --git a/class/core/mw.py b/class/core/mw.py index a760e5458..76daa8e5b 100755 --- a/class/core/mw.py +++ b/class/core/mw.py @@ -516,8 +516,9 @@ def getLastLine(inputfile, lineNum): result += lastre[num] + "\n" num -= 1 return result - except: - return getMsg('TASK_SLEEP') + except Exception as e: + return str(e) + # return getMsg('TASK_SLEEP') def getNumLines(path, num, p=1): diff --git a/plugins/mariadb/class/mysqlDb.py b/plugins/mariadb/class/mysqlDb.py new file mode 100755 index 000000000..867d3f3d7 --- /dev/null +++ b/plugins/mariadb/class/mysqlDb.py @@ -0,0 +1,99 @@ +# coding: utf-8 + +import re +import os +import sys + +# sys.path.append("/usr/local/lib/python3.9/site-packages") + +sys.path.append(os.getcwd() + "/class/core") +import mw + +# if mw.isAppleSystem(): +# cmd = 'ls /usr/local/lib/ | grep python | cut -d \\ -f 1 | awk \'END {print}\'' +# info = mw.execShell(cmd) +# p = "/usr/local/lib/" + info[0].strip() + "/site-packages" +# sys.path.append(p) + + +class mysqlDb: + __DB_PASS = None + __DB_USER = 'root' + __DB_PORT = 3306 + __DB_HOST = 'localhost' + __DB_CONN = None + __DB_CUR = None + __DB_ERR = None + __DB_CNF = '/etc/my.cnf' + + def __Conn(self): + '''连接MYSQL数据库''' + try: + import mw + socket = '/www/server/mysql/mysql.sock' + try: + import MySQLdb + except Exception as ex: + # print('dd') + self.__DB_ERR = ex + return False + try: + myconf = mw.readFile(self.__DB_CNF) + rep = "port\s*=\s*([0-9]+)" + self.__DB_PORT = int(re.search(rep, myconf).groups()[0]) + except: + self.__DB_PORT = 3306 + # print self.__DB_PASS + #self.__DB_PASS = mw.M('config').where('id=?', (1,)).getField('mysql_root') + try: + self.__DB_CONN = MySQLdb.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, + port=self.__DB_PORT, charset="utf8", connect_timeout=1, unix_socket=socket) + except MySQLdb.Error as e: + self.__DB_HOST = '127.0.0.1' + self.__DB_CONN = MySQLdb.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, + port=self.__DB_PORT, charset="utf8", connect_timeout=1, unix_socket=socket) + self.__DB_CUR = self.__DB_CONN.cursor() + return True + except MySQLdb.Error as e: + self.__DB_ERR = e + return False + + def setDbConf(self, conf): + self.__DB_CNF = conf + + def setPwd(self, pwd): + self.__DB_PASS = pwd + + def getPwd(self): + return self.__DB_PASS + + def execute(self, sql): + # 执行SQL语句返回受影响行 + if not self.__Conn(): + return self.__DB_ERR + try: + result = self.__DB_CUR.execute(sql) + self.__DB_CONN.commit() + self.__Close() + return result + except Exception as ex: + return ex + + def query(self, sql): + # 执行SQL语句返回数据集 + if not self.__Conn(): + return self.__DB_ERR + try: + self.__DB_CUR.execute(sql) + result = self.__DB_CUR.fetchall() + # 将元组转换成列表 + # data = list(map(list, result)) + self.__Close() + return result + except Exception as ex: + return ex + + # 关闭连接 + def __Close(self): + self.__DB_CUR.close() + self.__DB_CONN.close() diff --git a/plugins/mariadb/conf/my.cnf b/plugins/mariadb/conf/my.cnf new file mode 100644 index 000000000..c699ed3e3 --- /dev/null +++ b/plugins/mariadb/conf/my.cnf @@ -0,0 +1,99 @@ +[client] +user = root +#password = your_password +port = 3306 +socket = {$SERVER_APP_PATH}/mysql.sock + +[mysqld] +pid-file = {$SERVER_APP_PATH}/data/mysql.pid +user = mysql +port = 3306 +socket = {$SERVER_APP_PATH}/mysql.sock +basedir = {$SERVER_APP_PATH} +datadir = {$SERVER_APP_PATH}/data +log-error = {$SERVER_APP_PATH}/data/error.log +default_storage_engine = MyISAM +key_buffer_size = 8M +max_allowed_packet = 100M +table_open_cache = 32 +sort_buffer_size = 256K +net_buffer_length = 4K +read_buffer_size = 128K +read_rnd_buffer_size = 256K +myisam_sort_buffer_size = 4M +thread_cache_size = 4 +lower_case_table_names=1 +query_cache_size = 4M +tmp_table_size = 8M + +max_connections = 500 +max_connect_errors = 100 +open_files_limit = 65535 + +#skip-networking +#skip-name-resolve +#skip-external-locking +#loose-skip-innodb +#skip-grant-tables + + +log-bin=mysql-bin +binlog_format=mixed +server-id = 1 +expire_logs_days = 10 +slow_query_log=1 +slow-query-log-file={$SERVER_APP_PATH}/data/mysql-slow.log +long_query_time=3 +#log_queries_not_using_indexes=on + +relay-log=mdserver +relay-log-index=mdserver + +#master +#binlog-do-db +binlog-ignore-db = test +binlog-ignore-db = mysql +binlog-ignore-db = information_schema +binlog-ignore-db = performance_schema + +#slave +log-slave-updates +#replicate-do-db +replicate-ignore-db = information_schema +replicate-ignore-db = performance_schema +replicate-ignore-db = mysql +replicate-ignore-db = test + +default_storage_engine = InnoDB +innodb_data_home_dir = {$SERVER_APP_PATH}/data +innodb_data_file_path = ibdata1:10M:autoextend +innodb_log_group_home_dir = {$SERVER_APP_PATH}/data +innodb_buffer_pool_size = 16M +innodb_additional_mem_pool_size = 2M +innodb_log_file_size = 5M +innodb_log_buffer_size = 8M +innodb_flush_log_at_trx_commit = 1 +innodb_lock_wait_timeout = 120 +innodb_max_dirty_pages_pct = 90 +innodb_read_io_threads = 1 +innodb_write_io_threads = 1 +innodb_file_per_table=1 + + +secure-file-priv={$SERVER_APP_PATH}/tmp + +[mysqldump] +quick +max_allowed_packet = 16M + +[mysql] +no-auto-rehash + +[myisamchk] +key_buffer_size = 20M +sort_buffer_size = 20M +read_buffer = 2M +write_buffer = 2M + +[mysqlhotcopy] +interactive-timeout \ No newline at end of file diff --git a/plugins/mariadb/conf/my5.7.cnf b/plugins/mariadb/conf/my5.7.cnf new file mode 100644 index 000000000..b0a71d37f --- /dev/null +++ b/plugins/mariadb/conf/my5.7.cnf @@ -0,0 +1,96 @@ +[client] +user = root +#password = your_password +port = 3306 +socket = {$SERVER_APP_PATH}/mysql.sock +default-character-set = UTF8MB4 + +[mysqld] +pid-file = {$SERVER_APP_PATH}/data/mysql.pid +user = mysql +port = 3306 +socket = {$SERVER_APP_PATH}/mysql.sock +basedir = {$SERVER_APP_PATH} +datadir = {$SERVER_APP_PATH}/data +log-error = {$SERVER_APP_PATH}/data/error.log +default_storage_engine = MyISAM + +key_buffer_size = 8M +table_open_cache = 32 +sort_buffer_size = 256K +net_buffer_length = 4K +read_buffer_size = 128K +read_rnd_buffer_size = 256K +myisam_sort_buffer_size = 4M +thread_cache_size = 4 +lower_case_table_names=0 +tmp_table_size = 8M +character-set-server = UTF8MB4 + +max_connections = 500 +max_connect_errors = 100 +open_files_limit = 2560 +max_allowed_packet = 128M + +#skip-external-locking +#skip-grant-tables +#loose-skip-innodb +#skip-networking +#skip-name-resolve + +log-bin=mysql-bin +binlog_format=mixed +server-id = 1 +slow_query_log=1 +slow-query-log-file={$SERVER_APP_PATH}/data/mysql-slow.log +long_query_time=3 +#log_queries_not_using_indexes=on + +relay-log=mdserver +relay-log-index=mdserver + +#master +#binlog-do-db +binlog-ignore-db = test +binlog-ignore-db = mysql +binlog-ignore-db = information_schema +binlog-ignore-db = performance_schema + +#slave +log-slave-updates +#replicate-do-db +replicate-ignore-db = information_schema +replicate-ignore-db = performance_schema +replicate-ignore-db = mysql +replicate-ignore-db = test + +default_storage_engine = InnoDB +innodb_data_home_dir = {$SERVER_APP_PATH}/data +innodb_data_file_path = ibdata1:10M:autoextend +innodb_log_group_home_dir = {$SERVER_APP_PATH}/data +innodb_buffer_pool_size = 16M +innodb_log_file_size = 5M +innodb_log_buffer_size = 8M +innodb_flush_log_at_trx_commit = 1 +innodb_lock_wait_timeout = 120 +innodb_max_dirty_pages_pct = 90 +innodb_read_io_threads = 1 +innodb_write_io_threads = 1 +innodb_file_per_table=1 + +secure-file-priv={$SERVER_APP_PATH}/tmp + +[mysqldump] +quick + +[mysql] +no-auto-rehash + +[myisamchk] +key_buffer_size = 20M +sort_buffer_size = 20M +read_buffer = 2M +write_buffer = 2M + +[mysqlhotcopy] +interactive-timeout \ No newline at end of file diff --git a/plugins/mariadb/conf/my8.0.cnf b/plugins/mariadb/conf/my8.0.cnf new file mode 100644 index 000000000..7e390ce92 --- /dev/null +++ b/plugins/mariadb/conf/my8.0.cnf @@ -0,0 +1,98 @@ +[client] +user = root +#password = your_password +port = 3306 +socket = {$SERVER_APP_PATH}/mysql.sock +default-character-set = UTF8MB4 + +[mysqld] +default_authentication_plugin=mysql_native_password +pid-file = {$SERVER_APP_PATH}/data/mysql.pid +user = mysql +port = 3306 +socket = {$SERVER_APP_PATH}/mysql.sock +basedir = {$SERVER_APP_PATH} +datadir = {$SERVER_APP_PATH}/data +log-error = {$SERVER_APP_PATH}/data/error.log +default_storage_engine = MyISAM + +key_buffer_size = 8M +table_open_cache = 32 +sort_buffer_size = 256K +net_buffer_length = 4K +read_buffer_size = 128K +read_rnd_buffer_size = 256K +myisam_sort_buffer_size = 4M +thread_cache_size = 4 +lower_case_table_names=0 +tmp_table_size = 8M +character-set-server = UTF8MB4 + +max_connections = 500 +max_connect_errors = 100 +open_files_limit = 2560 +max_allowed_packet = 128M + +#skip-external-locking +#skip-grant-tables +#loose-skip-innodb +#skip-networking +#skip-name-resolve + +log-bin=mysql-bin +binlog_format=mixed +server-id = 1 +slow_query_log=1 +slow-query-log-file={$SERVER_APP_PATH}/data/mysql-slow.log +long_query_time=3 +#log_queries_not_using_indexes=on + +relay-log=mdserver +relay-log-index=mdserver + +#master +#binlog-do-db +binlog-ignore-db = test +binlog-ignore-db = mysql +binlog-ignore-db = information_schema +binlog-ignore-db = performance_schema + +#slave +log_replica_updates +#replicate-do-db +replicate-ignore-db = information_schema +replicate-ignore-db = performance_schema +replicate-ignore-db = mysql +replicate-ignore-db = test + +default_storage_engine = InnoDB +innodb_data_home_dir = {$SERVER_APP_PATH}/data +innodb_data_file_path = ibdata1:10M:autoextend +innodb_log_group_home_dir = {$SERVER_APP_PATH}/data +innodb_buffer_pool_size = 16M +innodb_log_file_size = 5M +innodb_log_buffer_size = 8M +innodb_flush_log_at_trx_commit = 1 +innodb_lock_wait_timeout = 120 +innodb_max_dirty_pages_pct = 90 +innodb_read_io_threads = 1 +innodb_write_io_threads = 1 +innodb_file_per_table=1 +binlog_expire_logs_seconds=2592000 + +secure-file-priv={$SERVER_APP_PATH}/tmp + +[mysqldump] +quick + +[mysql] +no-auto-rehash + +[myisamchk] +key_buffer_size = 20M +sort_buffer_size = 20M +read_buffer = 2M +write_buffer = 2M + +[mysqlhotcopy] +interactive-timeout \ No newline at end of file diff --git a/plugins/mariadb/conf/mysql.sql b/plugins/mariadb/conf/mysql.sql new file mode 100755 index 000000000..38b822738 --- /dev/null +++ b/plugins/mariadb/conf/mysql.sql @@ -0,0 +1,28 @@ +CREATE TABLE IF NOT EXISTS `config` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `mysql_root` TEXT +); + +INSERT INTO `config` (`id`, `mysql_root`) VALUES (1, 'admin'); + +CREATE TABLE IF NOT EXISTS `databases` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `pid` INTEGER, + `name` TEXT, + `username` TEXT, + `password` TEXT, + `accept` TEXT, + `ps` TEXT, + `addtime` TEXT +); + +CREATE TABLE IF NOT EXISTS `master_replication_user` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `username` TEXT, + `password` TEXT, + `accept` TEXT, + `ps` TEXT, + `addtime` TEXT +); + + diff --git a/plugins/mariadb/ico.png b/plugins/mariadb/ico.png new file mode 100644 index 000000000..8a9f3b314 Binary files /dev/null and b/plugins/mariadb/ico.png differ diff --git a/plugins/mariadb/index.html b/plugins/mariadb/index.html new file mode 100755 index 000000000..80a73bb58 --- /dev/null +++ b/plugins/mariadb/index.html @@ -0,0 +1,60 @@ +
启动时间 | ' + 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(LimitCon); + }); +} + + + + +//数据库配置状态 +function myPerfOpt() { + //获取MySQL配置 + myPost('db_status','',function(data){ + var rdata = $.parseJSON(data.data); + // console.log(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 = '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 + '
\ + \ +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 + '
\ + \ +物理内存: {1}MB
最大使用内存: {2}MB
可能造成的后果: 导致数据库不稳定,甚至无法启动MySQLd服务!";
+ var msg = errMsg.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())
+ };
+
+ myPost('set_db_status', data, function(data){
+ var rdata = $.parseJSON(data.data);
+ showMsg(rdata.msg,function(){
+ reBootMySqld();
+ },{ icon: rdata.status ? 1 : 2 });
+ });
+ },'json');
+}
+
+
+//MySQL内存优化方案
+function mySQLMemOpt(opt) {
+ var query_size = parseInt($("input[name='query_cache_size']").val());
+ switch (opt) {
+ case '0':
+ $("input[name='key_buffer_size']").val(8);
+ if (query_size) $("input[name='query_cache_size']").val(4);
+ $("input[name='tmp_table_size']").val(8);
+ $("input[name='innodb_buffer_pool_size']").val(16);
+ $("input[name='sort_buffer_size']").val(256);
+ $("input[name='read_buffer_size']").val(256);
+ $("input[name='read_rnd_buffer_size']").val(128);
+ $("input[name='join_buffer_size']").val(128);
+ $("input[name='thread_stack']").val(256);
+ $("input[name='binlog_cache_size']").val(32);
+ $("input[name='thread_cache_size']").val(4);
+ $("input[name='table_open_cache']").val(32);
+ $("input[name='max_connections']").val(500);
+ break;
+ 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 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 syncGetDatabase(){
+ myPost('sync_get_databases', null, function(data){
+ var rdata = $.parseJSON(data.data);
+ showMsg(rdata.msg,function(){
+ dbList();
+ },{ icon: rdata.status ? 1 : 2 });
+ });
+}
+
+function syncToDatabase(type){
+ var data = [];
+ $('input[type="checkbox"].check:checked').each(function () {
+ if (!isNaN($(this).val())) data.push($(this).val());
+ });
+ var postData = 'type='+type+'&ids='+JSON.stringify(data);
+ myPost('sync_to_databases', postData, function(data){
+ var rdata = $.parseJSON(data.data);
+ // console.log(rdata);
+ 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: "
文件名称 | \ +文件大小 | \ +备份时间 | \ +操作 | \ +
---|
\ + | 数据库名 | \ +用户名 | \ +密码 | \ + '+ + // '备份 | '+ + '备注 | \ +操作 |
---|
\ + 二进制日志 ' + toSize(rdata.msg) + '\ + \ +
错误日志
\ + \ + ' + $(".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(); + }, 2000); + }); + }); + + //清空日志 + $(".btn-clear").click(function () { + myPost('error_log', 'close=1', function(data){ + var rdata = $.parseJSON(data.data); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); + + setTimeout(function(){ + myLogs(); + }, 2000); + }); + }) + + myPost('error_log', 'p=1', function(data){ + 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'); + ob.scrollTop = ob.scrollHeight; + }); + }); +} + + +function repCheckeds(tables) { + var dbs = [] + if (tables) { + dbs.push(tables) + } else { + var db_tools = $("input[value^='dbtools_']"); + for (var i = 0; i < db_tools.length; i++) { + if (db_tools[i].checked) dbs.push(db_tools[i].value.replace('dbtools_', '')); + } + } + + if (dbs.length < 1) { + layer.msg('请至少选择一张表!', { icon: 2 }); + return false; + } + return dbs; +} + +function repDatabase(db_name, tables) { + dbs = repCheckeds(tables); + + myPost('repair_table', { db_name: db_name, tables: JSON.stringify(dbs) }, function(data){ + var rdata = $.parseJSON(data.data); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + repTools(db_name, true); + },'已送修复指令,请稍候...'); +} + + +function optDatabase(db_name, tables) { + dbs = repCheckeds(tables); + + myPost('opt_table', { db_name: db_name, tables: JSON.stringify(dbs) }, function(data){ + var rdata = $.parseJSON(data.data); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + repTools(db_name, true); + },'已送优化指令,请稍候...'); +} + +function toDatabaseType(db_name, tables, type){ + dbs = repCheckeds(tables); + myPost('alter_table', { db_name: db_name, tables: JSON.stringify(dbs),table_type: type }, function(data){ + var rdata = $.parseJSON(data.data); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + repTools(db_name, true); + }, '已送引擎转换指令,请稍候...'); +} + + +function selectedTools(my_obj, db_name) { + var is_checked = false + + if (my_obj) is_checked = my_obj.checked; + var db_tools = $("input[value^='dbtools_']"); + var n = 0; + for (var i = 0; i < db_tools.length; i++) { + if (my_obj) db_tools[i].checked = is_checked; + if (db_tools[i].checked) n++; + } + if (n > 0) { + var my_btns = '\ + \ + \ + ' + $("#db_tools").html(my_btns); + } else { + $("#db_tools").html(''); + } +} + +function repTools(db_name, res){ + myPost('get_db_info', {name:db_name}, function(data){ + var rdata = $.parseJSON(data.data); + var types = { InnoDB: "MyISAM", MyISAM: "InnoDB" }; + var tbody = ''; + for (var i = 0; i < rdata.tables.length; i++) { + if (!types[rdata.tables[i].type]) continue; + tbody += '\ + | 表名 | \ +引擎 | \ +字符集 | \ +行数 | \ +大小 | \ +操作 | \ +
---|
用户民 | 密码 | 操作 |
---|
数据库名 | \ +同步 | \ +操作 |
---|
主[服务] | \ +端口 | \ +用户 | \ +日志 | \ +IO | \ +SQL | \ +操作 |
---|
本地库名 | \ +操作 |
---|
\ + Master[主]配置\ +
\ + Slave[从]配置\ +