在MySQL里面
show variables where variable_name like '%auto%'
這條語句可以正常執行,但是
show processlist where host like '%192%'
就會報錯了:
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘where host like ‘%10%” at line 1
show processlist 直接是可以執行的,但是不能進行篩選,着實讓人頭疼,同樣的結構variables可以,但為什么就processlist就是不行呢?究其原因原來MySQL有此BUG:
Description:
SHOW PROCESSLIST lists to many lines when you have 250 or even 1000 users connect to you
system.
How to repeat:
n.a.
Suggested fix:
It would be nice having something like
SHOW PROCESSLIST LIKE ‘user|host|…’
to reduce the output to the relevant informations.
Much more nice would be having something like:
SELECT user, host, time, command, time FROM [mysql|information_schema].processlist WHERE user = 'me' and state IS NOT NULL;
BUG原文:http://bugs.mysql.com/bug.php?id=21092
所以processlist的show方式是不能使用過濾查找,可能源自MySQL的內部安全機制吧,show是用來查看MySQL內部運行數據,其實processlist就是
information_schema數據庫中的一張表,那么通過查表的方式肯定是可以的了:
SELECT user, host, time, command, time FROM [mysql|information_schema].processlist WHERE user = 'me' and state IS NOT NULL;
另附MySQL Show命令的一些詳解,供查閱:
解釋:顯示當前數據庫中所有表的名稱
show databases;
解釋:顯示mysql中所有數據庫的名稱
show processlist;
解釋:顯示系統中正在運行的所有進程,也就是當前正在執行的查詢。大多數用戶可以查看
他們自己的進程,但是如果他們擁有process權限,就可以查看所有人的進程,包括密碼。
show table status;
解釋:顯示當前使用或者指定的database中的每個表的信息。信息包括表類型和表的最新更新時間
show columns from table_name from database_name; 或show columns from database_name.table_name;或show fields;
解釋:顯示表中列名稱(和 desc table_name 命令的效果是一樣的)
show grants for user_name@localhost;
解釋:顯示一個用戶的權限,顯示結果類似於grant 命令
show index from table_name;或show keys;
解釋:顯示表的索引
show status;
解釋:顯示一些系統特定資源的信息,例如,正在運行的線程數量
show variables;
解釋:顯示系統變量的名稱和值
show privileges;
解釋:顯示服務器所支持的不同權限
show create database database_name;
解釋:顯示創建指定數據庫的SQL語句
show create table table_name;
解釋:顯示創建指定數據表的SQL語句
show engies;
解釋:顯示安裝以后可用的存儲引擎和默認引擎。
show innodb status;
解釋:顯示innoDB存儲引擎的狀態
show logs;
解釋:顯示BDB存儲引擎的日志
show warnings;
解釋:顯示最后一個執行的語句所產生的錯誤、警告和通知
show errors;
解釋:只顯示最后一個執行語句所產生的錯誤
上面的大部分命令都可以用like,比如 show table like ‘%abce%’ 。
附:
show status 結果說明
列 | 含義 |
Name |
表名 |
Type |
表的類型 (ISAM,MyISAM或HEAP) |
Row_format |
行存儲格式 (固定, 動態, 或壓縮) |
Rows |
行數量 |
Avg_row_length |
平均行長度 |
Data_length |
數據文件的長度 |
Max_data_length |
數據文件的最大長度 |
Index_length |
索引文件的長度 |
Data_free |
已分配但未使用了字節數 |
Auto_increment |
下一個 autoincrement(自動加1)值 |
Create_time |
表被創造的時間 |
Update_time |
數據文件最后更新的時間 |
Check_time |
最后對表運行一個檢查的時間 |
Create_options |
與CREATE TABLE 一起使用的額外選項 |
Comment |
當創造表時,使用的注釋 (或為什么MySQL不能存取表信息的一些信息)。 |
show index 結果說明:
列 | 含義 |
Table |
表名 |
Non_unique |
0,如果索引不能包含重復。 |
Key_name |
索引名 |
Seq_in_index |
索引中的列順序號, 從 1 開始。 |
Column_name |
列名。 |
Collation |
列怎樣在索引中被排序。在MySQL中,這可以有值A (升序) 或NULL (不排序)。 |
Cardinality |
索引中唯一值的數量。這可通過運行isamchk -a 更改. |
Sub_part |
如果列只是部分被索引,索引字符的數量。NULL ,如果整個鍵被索引。 |
show variables 結果說明:
Aborted_clients |
由於客戶沒有正確關閉連接已經死掉,已經放棄的連接數量。 |
Aborted_connects |
嘗試已經失敗的MySQL服務器的連接的次數。 |
Connections |
試圖連接MySQL服務器的次數。 |
Created_tmp_tables |
當執行語句時,已經被創造了的隱含臨時表的數量。 |
Delayed_insert_threads |
正在使用的延遲插入處理器線程的數量。 |
Delayed_writes |
用INSERT DELAYED 寫入的行數。 |
Delayed_errors |
用INSERT DELAYED 寫入的發生某些錯誤(可能重復鍵值 )的行數。 |
Flush_commands |
執行FLUSH 命令的次數。 |
Handler_delete |
請求從一張表中刪除行的次數。 |
Handler_read_first |
請求讀入表中第一行的次數。 |
Handler_read_key |
請求數字基於鍵讀行。 |
Handler_read_next |
請求讀入基於一個鍵的一行的次數。 |
Handler_read_rnd |
請求讀入基於一個固定位置的一行的次數。 |
Handler_update |
請求更新表中一行的次數。 |
Handler_write |
請求向表中插入一行的次數。 |
Key_blocks_used |
用於關鍵字緩存的塊的數量。 |
Key_read_requests |
請求從緩存讀入一個鍵值的次數。 |
Key_reads |
從磁盤物理讀入一個鍵值的次數。 |
Key_write_requests |
請求將一個關鍵字塊寫入緩存次數。 |
Key_writes |
將一個鍵值塊物理寫入磁盤的次數。 |
Max_used_connections |
同時使用的連接的最大數目。 |
Not_flushed_key_blocks |
在鍵緩存中已經改變但是還沒被清空到磁盤上的鍵塊。 |
Not_flushed_delayed_rows |
在INSERT DELAY 隊列中等待寫入的行的數量。 |
Open_tables |
打開表的數量。 |
Open_files |
打開文件的數量。 |
Open_streams |
打開流的數量(主要用於日志記載) |
Opened_tables |
已經打開的表的數量。 |
Questions |
發往服務器的查詢的數量。 |
Slow_queries |
要花超過long_query_time 時間的查詢數量。 |
Threads_connected |
當前打開的連接的數量。 |
Threads_running |
不在睡眠的線程數量。 |
Uptime |
服務器工作了多少秒。 |
關於上面的一些注釋:
- 如果
Opened_tables
太大,那么你的table_cache
變量可能太小。 - 如果
key_reads
太大,那么你的key_cache
可能太小。緩存命中率可以用key_reads
/key_read_requests
計算。 - 如果
Handler_read_rnd
太大,那么你很可能有大量的查詢需要MySQL掃描整個表或你有沒正確使用鍵值的聯結(join)。