mysql 5.0
四種LOG
預設放於mysqld的data目錄下
1.error log
包含啟動停止和警急錯誤訊息
log-error參數指定檔案名稱,如果沒指定預設採用系統名稱=>host_name.err
如果有指定參數,下flush logs後會將原本檔案更改為old,並建立新的error log擋,沒指定參數則無變化
log_warnings指定此參數會紀錄相關連線問題的訊息(Aborted connections Aborted_clients)
2.general query log
包含client connect和disconnect 的訊息,client送來(送來並不一定會執行)的SQL 語法
log參數指定檔案名稱(不指定採用預設名稱),flush logs對其無影響
預設log參數不啟動(沒有general query log)
3.binary log
包含所有可能(可能的意思是有些語法看上去是有改資料,實際上卻沒有,例如下DELETE但條件卻沒有符合)修改資料的SQL語法
其紀錄是以EVENTS方式儲存(使用mysqlbinlog工具列出內容)請參考
http://dev.mysql.com/doc/internals/en/replication-binary-log.html binary log 的主要用途在於restore和replication
預設log-bin參數不啟動(但mysql內附的參考組態檔有些有設定此參數,所以可能有)
log-bin參數後可命名檔案名稱,如不指定採用預設,實際產生的檔案名稱格式為 參數指定名稱-bin.XXX (XXX是數字)
binary log每切換一次XXX數字會加一 例: abc-bin.001 -> abc-bin.002 (啟動或下flush logs會產生切換,還有目前使用的LOG大小超過參數max_binlog_size也會)
mysql會產生一個檔案紀錄binary log file的使用,可由參數log-bin-index指定名稱,不指定採預設 例:abc-bin.index 內容為
./abc-bin.001
./abc-bin.002
./abc-bin.003
有兩個語法會影響binary log(RESET MASTER和PURGE MASTER LOGS)請參考
http://dev.mysql.com/doc/refman/5.0/en/reset.html http://dev.mysql.com/doc/refman/5.0/en/replication-master-sql.html 具有SUPER privilege的CLIENT可下SET SQL_LOG_BIN=0可暫時停止目前SESSION的binary log功能
何時紀錄binary log
(1)non-transactional
語法執行完畢但lock還沒釋放時
(2)transactional
一收到交易在還沒COMMIT之前會配置一個buffer(大小由參數binlog_cache_size指定),並將binary log要記錄的內容放在BUFFER內,直到收到COMMIT才寫入binary log
如果要紀錄內容大於buffer,則會使用暫存檔(硬碟),但如果所有BUFFER(一個交易一個)總和超過參數max_binlog_cache_size(預設4G),則超過的部份會失敗並rolls back
根據下列狀態變數可用來調整binlog_cache_size
Binlog_cache_use : 使用buffer的次數
Binlog_cache_disk_use : 使用暫存檔的次數
mysql5.0的binary log格式和以前版本不同(5.0.0/5.0.3/5.0.4三次變動),會影響到不同版本的replication
預設binary log不會同步至DISK(file system cache的關係),參數sync_binlog(4.1以上版本)指定在寫入N次到binary log後就同步至DISK
mysql5.0.1版參數innodb-safe-binlog能夠保證innodb table和binary log內容的一致性(sync_binlog=1和innodb-safe-binlog)
ps:關於innodb-safe-binlog有一句(Note: --innodb-safe-binlog is unneeded as of MySQL 5.0; it was made obsolete by the introduction of XA transaction support.)
XA是在5.0.3版支援,應用於Distributed Transaction Processing請參考
http://docs.openlinksw.com/mt/xamt.html 4.slow log
包含執行時間超過long_query_time秒數的sql語法(執行時間不包含initial table lock的時間)
log-queries-not-using-indexes有指定,則會紀錄沒使用INDEX的SQL語法
log-slow-admin-statements有指定,則會紀錄administrative statements(OPTIMIZE ANALYZE ALTER)
預設log-slow-queries參數不啟動
mysqldumpslow程式能夠分析slow log