mysql 被搞爛的時候 ex: 下錯 index , alert 錯, 屬性 ...
大量的 process 堆積又不能 stop mysql,我們需要一個大量 kill 的 script
先了解資料該從哪裡來:
mysql> show create table information_schema.processlist \G; *************************** 1. row *************************** Table: PROCESSLIST Create Table: CREATE TEMPORARY TABLE `PROCESSLIST` ( `ID` bigint(21) unsigned NOT NULL DEFAULT '0', `USER` varchar(32) NOT NULL DEFAULT '', `HOST` varchar(64) NOT NULL DEFAULT '', `DB` varchar(64) DEFAULT NULL, `COMMAND` varchar(16) NOT NULL DEFAULT '', `TIME` int(7) NOT NULL DEFAULT '0', `STATE` varchar(64) DEFAULT NULL, `INFO` longtext, `TIME_MS` bigint(21) NOT NULL DEFAULT '0', `ROWS_SENT` bigint(21) unsigned NOT NULL DEFAULT '0', `ROWS_EXAMINED` bigint(21) unsigned NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8
當然你也可直接用show processlist , 不過還要自己拆解欄位,selete table 篩選語法也很直觀
接著我們可以利用T-SQL 來組合出我們要的語法:
select concat('KILL ',id,';') from information_schema.processlist where user='root' and time > 200 and info like 'select %' into outfile '/var/lib/mysql-files/kill.txt'; # user = root # time > 200 sec # info 是 selet 開頭 # 然後寫到 /var/lib/mysql-files/ , 確認無誤後再輸入 mysql> source /var/lib/mysql-files/kill.txt;
## 補充知識
/var/lib/mysql-files/ 這個目錄是預設位置,如果你想改,正常會得到以下錯誤
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
執行以下語法查詢目前設定:
mysql> show global variables like '%secure_file_priv%'; # null 表示未設定
但這個值是維讀不能線上修改,必要的話要去改my.cnf ,然後重啟mysql
最無腦的就是設定,請留意安全性
secure_file_priv=''
其次是要寫入的目錄必需是mysql 的user 可寫,如我習慣用 mysql:mysql這個user:group 跑 mysql service ,
就必需 mysql 可以寫入,不然也是出錯