對於MySQL,很多印象其實都是來自比較老的4.x版本,實際上MySQL在後續的5.0,5.1和6.0版本中還是做出了很多的改進,特別是原來一些動不動要重啟的操作,慢慢的都可以在線做了,如果要做企業級數據庫,在線操作的支持是必不可少的。由於我們在產品庫中大量開始使用5.1,所以打算寫一個系列短文,介紹一些個人覺得比較實用的新特性。因為MySQL這樣的開源軟件,版本分支比較多,所以每篇文章涉及的一些小版本可能不太一樣。
MySQL有很多種日志,包括error log,general query log,binary log,slow query log等。在以前的版本,這些日志的開啟或者關閉,都是需要重啟服務器的,而且都是記錄到日志文件。從MySQL5.1.6版開始,general query log和slow query log開始支持寫到文件或者數據庫表兩種方式,並且日志的開啟,輸出方式的修改,都可以在Global級別動態修改。
如果說日志是寫到文件還是表,對於DBA來說不是那麼在乎的話,那麼可以動態的開啟關閉日志真的可以說是DBA們夢寐以求的。尤其是slow log query,以前一直在頭疼,開啟吧,可能影響性能,不開吧,對於一些性能差的SQL又沒有其他好用的捕獲方式。因為開還是不開,涉及到重啟服務的問題。
下面演示一下通過設置幾個Global級別參數來開啟關閉general query log和slow log query的過程:
root@NinGoo>select version();
+---------------+
| version() |
+---------------+
| 5.1.25-rc-log |
+---------------+
1 row in set (0.00 sec)
設置日志輸出方式為文件
root@NinGoo>set global log_output=file;
Query OK, 0 rows affected (0.00 sec)
設置general log和slow query log的日志文件路徑
root@NinGoo>set global general_log_file='/tmp/general.log';
Query OK, 0 rows affected (0.00 sec)
root@NinGoo>set global slow_query_log_file='/tmp/slow.log';
Query OK, 0 rows affected (0.00 sec)
開啟general log和slow query log,相應的,關閉只要設置參數為off
root@NinGoo>set global general_log=on;
Query OK, 0 rows affected (0.04 sec)
root@NinGoo>set global slow_query_log=on;
Query OK, 0 rows affected (0.02 sec)
如果設置log_output=table的話,則日志結果會記錄到名為gengera_log和slow_log的兩張表中,這兩張表的默認引擎都是CSV,其實就是將日志保存為CSV文件格式了。當然,也可以將這兩張表改為MyISAM引擎,這不是問題。