今天有個同事讓我幫忙看一張報表, 這張報表是一個開源的系統產生出來的,後台資料庫用的是MySQL.問題是一張報表的資料是錯誤的,當時另外一張報表是對的,所以希望能夠找出後台邏輯,這樣可以對報表進行修改。
這是我第一次接觸MySQL,所以說需要時間研究一下。當時的想法是像SQL Server或者Oracle抓Trace看到啟動並執行SQL語句。
開始串連到MySQL,看了一下Help然後用Root超級使用者登入,一直提示錯誤無法串連到Localhost,再查看到有個參數是P指定連接埠,然後把連接埠加進去就可以串連上了。
登入以後運行SHOW PROCESSLIST,但是只能看到存在的一些SPID,沒有詳細的SQL語句。
之後就想著找一個GUI的工具抓Trace,看到其實MySQL提供了一些Log是可以記錄執行的SQL以及允許緩慢的SQL。命令如下:
-- 開啟sql執行記錄功能
set global log_output='TABLE'; -- 輸出到表
set global log=ON; -- 開啟所有命令執行記錄功能general_log, 所有語句: 成功和未成功的.
set global log_slow_queries=ON; -- 開啟慢查詢sql記錄slow_log, 執行成功的: 慢查詢語句和未使用索引的語句
set global long_query_time=0.1; -- 慢查詢時間限制(秒)
set global log_queries_not_using_indexes=ON; -- 記錄未使用索引的sql語句
-- 查詢sql執行記錄
select * from mysql.slow_log order by 1; -- 執行成功的:慢查詢語句,和未使用索引的語句
select * from mysql.general_log order by 1; -- 所有語句: 成功和未成功的.
-- 關閉sql執行記錄
set global log=OFF;
set global log_slow_queries=OFF;
但是我啟動並執行時候直接報錯,說“unknown system variable logoutput”。
用show variables查看當前可配置選項,沒有看到global log_output對應的配置項。 而且在伺服器上夜找不到MYSQL的配置文檔。
再看Help文檔是5.1版本的,是不是因為版本問題?帶著這個疑問,查詢了一下@@Version,我們的是4.1的版本,再查4.1的協助檔案,就沒有上面的那些配置項了。
雖然沒有抓到Trace,但是由於知道需要查詢的列,所以還是找到了對應的資訊,然後將錯誤資料做了更改Report就正確了。看來有時間也要稍微瞭解一下MYSQL了,畢竟很多開源的軟體都是用這個資料庫作為背景。