MySQL日志文件


01
概述
日志是記錄了MySQL數據庫的各種類型活動的數據 。DBA可以利用這些日志文件定位故障,優化性能等 。
02
分類
在MySQL中,有4種不同的日志,分別是:錯誤日志(errorlog)、二進制日志(binlog)、查詢日志(log)和慢查詢日志(slow query log) 。
2.1錯誤日志
1、概述錯誤日志記錄了當mysqld進程啟動和停止時,以及服務器在運行過程中發生任何嚴重錯誤時的相關信息 。當數據庫出現任何故障導致無法正常使用時,可以首先查看此日志 。
2、設置查看:
SHOW VARIABLES LIKE ‘log_error’G;
路徑設置:
可以使用—log-error=[file_name]選項來指定mysqld(MySQL服務器)保存錯誤日志文件的位置 。如果沒有給定file_name值,mysqld使用錯誤日志名host_name.err并默認在參數DATADIR(數據目錄)指定的目錄中寫入日志文件 。
在實際應用中,如果數據庫啟動報錯或者crash,或者出現告警信息等,可以通過查看錯誤日志獲取必要的信息 。
2.2 二進制日志1、概述二進制文件記錄了對MySQL數據庫的所有更新操作(其中還包括執行更新操作的時間等額外信息),不包括查詢和SHOW這類操作(binlog作用就是備份恢復使用的,所以只需要記錄修改操作即可) 。
二進制文件默認關閉,需要手動指定參數啟動 。根據MySQL官方手冊的測試數據,開啟二進制日志會使性能下降1%,但是考慮到可以使用復制(replication)和point-in-time的恢復,這些性能的損失絕對是可以接受的 。
查看:
SHOW BINLOG EVENT IN ‘mysqld.00001’G;
配置:
通過參數log-bin[=name]可以開啟二進制日志,如果不指定name,默認二進制日志文件名為主機名,后綴名為二進制日志的序列號,所在路徑為數據庫所在目錄(datadir) 。
查看datadir:show variables like ‘datadir’;
2、參數max_binlog_size:指定了單個二進制日志文件最大值,如果超過該值,則產生新的二進制日志文件后綴名+1,并記錄到.index文件 。
binlog_cache_size:控制緩沖大小,默認大小32K,基于會話的,因此每開啟一個事務就分配一個binlog_cache_size大小的緩存,所以不能設置過大 。當一個事務的記錄大于binlog_cache_size時,MySQL會把緩沖中的日志寫入一個臨時文件中,因此該值又不能設置太小 。
sync_binlog:表示每寫緩沖多少次就要同步到磁盤 。如果設置為1,表示采用同步寫磁盤的方式來寫二進制日志,這時候寫操作不使用操作系統的緩沖來寫二進制日志 。sync_binlog的默認值為0,如果使用InnoDB存儲引擎進行復制,并且想得到最大的可用性,建議將該值設置為ON(對數據庫IO系統帶來一定影響) 。
binlog-do-db:表示需要寫入哪些庫的日志,默認為空,表示需要同步所有庫的日志到二進制日志 。
binlog-ignore-db:表示需要忽略寫入哪些庫的日志,默認為空,表示需要同步所有庫的日志到二進制日志 。
log-slave-update:如果當前數據庫是復制中的slave節點,則它不會將從master取得并執行的二進制日志寫入自己的二進制文件中 。
binlog_format:記錄二進制日志的格式 。在MySQL5.1之前,沒有這個參數,所有二進制文件的格式都是基于SQL語句(statement)級別的,因此基于這個格式的二進制日志文件的復制(Replication)和Oracle的邏輯Standby有點類似 。
該值可以設置為STATEMENT、ROW和MIXED 。
1、STATEMENT格式下,記錄的是邏輯SQL語句 。
2、ROW格式下,記錄表的行更改情況 。
3、MIXED格式下,MySQL默認采用STATEMENT格式進行二進制文件記錄,但是在一些情況下會使用ROW格式,這些情況包括:

推薦閱讀