實時查看MySQL執行的語句

我們在追查MySQL問題和性能調優時,有時希望看到當前都有哪些命令正在被執行,讓我們迅速找到熱點命令。下面我們就來介紹下如何查看當前正在執行的MySQL語句。

日誌LOG

我們之前在 用service命令管理mysql啓停 文章中已經使用過MySQL的錯誤日誌,它在my.cnf配置文件中指定位置:

[mysqld]
log-error = /user/local/mysql/log/mysql.err

該參數指定了錯誤文件位置,能夠記錄所有的錯誤日誌,在問題追查時非常關鍵。類似的,我們還可以指定常規日誌:

[mysqld]
# 控制是否開啓常規日誌
general_log=true
# 指定常規日誌的文件路徑
general_log_file=/usr/local/mysql/log/mysql.log

這個配置默認是關閉的,因爲這個日誌文件會膨脹的很快,在大型業務中可能很快耗盡磁盤空間,因此一般只在追查問題時臨時打開,使用完成後關閉。

如果我們更改了這個配置,需要重啓MySQL服務。

查看常規日誌是否打開

mysql> show variables like 'general%';
+------------------+--------------------------------+
| Variable_name    | Value                          |
+------------------+--------------------------------+
| general_log      | ON                            |
| general_log_file | /usr/local/mysql/log/mysql.log |
+------------------+--------------------------------+
2 rows in set (0.00 sec)

如果我們想要更改該參數,可以使用:

mysql> set global general_log=off;
Query OK, 0 rows affected (0.01 sec)

由於general_log是全局的變量,因此必須帶上global參數。如果不是通過配置文件的方式變更狀態,會在MySQL重啓後失效。

查看實時日誌

如果我們已經打開了常規日誌的記錄,我們可以通過常規日誌文件的查看來得到實時日誌:

# -f 代表會實時讀取該文件的更新內容
tail -f /usr/local/mysql/log/mysql.log

然後你就能在終端裏看到MySQL的實時執行記錄,如果覺得刷新過快,也可以使用vim/tail等方法來查看該日誌文件進行分析。

MySQL默認不能實時查看執行的SQL語句,因爲這會消耗一定的資源。

要開啓這個功能,稍微配置一下,打開這個LOG記錄就可以了。

1 查看LOG功能

首先,查看是否已經開啓實時SQL語句記錄。

mysql> SHOW VARIABLES LIKE "general_log%";

如下general_log值爲OFF說明沒有開啓:

+------------------+----------------------------------+
| Variable_name    | Value                            |
+------------------+----------------------------------+
| general_log      | OFF                              |
| general_log_file | /var/lib/mysql/galley-pc.log |
+------------------+----------------------------------+
2 rows in set (0.00 sec)

2 打開LOG功能

2.1 臨時開啓

如下,打開實時記錄SQL語句功能,並指定自定義的log路徑:

mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/log/mysql/general_log.log';

這兩個命令在MySQL重啓後失效,爲臨時方法。

說明:這個文件會隨着訪問的增加而不斷變大,所以生產環境建議臨時開啓,用完及時關閉。

2.2 永久開啓

永久有效需要配置my.cnf文件,加入下面兩行:

general_log = 1
general_log_file = /var/log/mysql/general_sql.log

重啓MySQL生效。

3 實時查看

過一小段時間後,就可以導出查看/var/lib/mysql/sql_statement.log文件了,裏面記錄了所有執行的SQL語句。

如果要實時查看該文件的改動,在Linux系統用tail命令:

$ tail -f /var/lib/mysql/general_sql.log

另外,也可以用BareTail軟件實時查看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章