MySQL的日誌有很多種,分爲錯誤日誌、一般查詢日誌、慢查詢日誌、二進制日誌、中繼日誌、事務日誌,這些日誌信息有很強大的功能,錯誤查詢、查詢診斷、複製、數據恢復、保持事務性質等都依靠日誌完成;所以日誌文件從性能和數據安全方面考慮,都不應該和數據文件存放在同一個存儲設備上,且考慮到IO問題日誌文件應存在性能高的存儲設備上
下面是日誌的相應功能和常用相關變量
錯誤日誌
作用:
服務器啓動和關閉過程中的信息
服務器運行過程中的錯誤信息
事務調度器event scheduler運行事件時產生的信息
從服務器啓動和停止進程時產生的信息
警告信息
相關變量:
log_error #默認記錄文件路徑,數據目錄下的本機名.err
log_warnings={0|1} #1記錄警告信息,0不記錄
一般查詢日誌
作用:將一般查詢操作的所有信息都記錄下來
相關變量
general_log={ON|OFF} #是否啓用查詢日誌 # 默認應關閉,否則所有查詢都記錄產生大量的IO
general_log_file #默認記錄文件路徑:數據目錄下的本機名.log
log #是否將除查詢意外的所有操作都做記錄(mysql5.6之後不再使用這個變量)
log_output={TABLE|FILE|NONE} #日誌輸出成表、文件、不記錄
慢查詢日誌
作用
和一般查詢日誌差不多,只是記錄查詢時間長超出long_query_time變量定義的時間的查詢信息,記錄哪些查詢比較慢;可用於查詢性能診斷,通過分析慢查詢日誌,進行查詢優化
相關變量
log_slow_queries={YES|NO} #是否記錄慢查詢
slow_query_log={YES|NO} #和上個變量重複
slow_query_log_file #默認記錄文件路徑:數據目錄下的本機名-slow.log
long_query_time
log_output:{TABLE|FILE|NONE}
二進制日誌(mysqlbinlog)
作用
記錄任何可能引起或引起數據庫變化的操作如DML,DCL、授權語句等,利用此日誌可以實現mysql複製、即時點恢復的依據(按照某個時間點、某個位置還原)
文件特性
二進制日誌會發生滾動,手動滾動,FLUSH LOGS;
命名:mysql-bin.000001按後面數值每滾動一次增加1並生成新的文件
事件記錄格式
基於語句(statement):記錄的是操作語句
基於行(row):記錄的是改變的數據
混合方式(mixed):兩種混合
事件如何記錄
產生時間(starttime)
相對位置(position):上一個事件結束位置,也是當前事件的開始位置
二進制日誌文件相關操作:
查看當前所有的二進制日誌文件 # SHOW BINARY LOGS;
查看當前在用哪一個 # SHOW MASTER STATUS; 同時還可看到position
查看二進制日誌文件詳細信息 # SHOW BINLOG EVENT IN ‘mysql-bin.000001’;
刪除 # PURGE BINARY LOGS TO ‘某二進制日誌文件’ ; 刪除這個之前的所有二進制日誌文件
實現滾動 # FLUSH LOGS;
讀取二進制文件內容 # mysqlbinlog mysql-bin.000005 --{start|stop}-{datetime|position}
相關變量
binlog_format={STATEMENT|RAW|MIXED} # 事件記錄格式
log_bin # 二進制日誌是否開啓
sql_log_bin # 控制二進制日誌信息是否記錄進文件
sync_binlog # 多久同步一次二進制日誌到磁盤中,0不同步,正數值表示多少次寫操作後同步一次,autocommit爲1時,每條語句自動同步 用於控制同步行爲
中繼日誌
作用
格式和二進制日誌差不多,是從主服務器的二進制日誌文件中複製而來的事務信息,並保存爲的日誌文件,實現mysql主從複製;從中繼日誌當中讀取操作內容,在本地數據庫上執行相同的操作
事務日誌:支持事務的存儲引擎纔有事務日誌,如InnoDB
作用
事務日誌是保證ACID的重要依據,記錄了提交的事務,並後續寫如數據庫文件當中
日誌組
一般事務日誌文件有多個,若其中一個滿了,但還沒有同步進數據庫文件中怎麼辦,所以需要多個,ib_logfile0、ib_logfile1、......
事務的同步
事務從用戶空間緩存同步到內核空間緩存,緩存是因爲若每個事務都直接同步到日誌文件中產生頻繁的IO操作,但緩存過大會造成故障數據丟失量大,所以應折中選擇緩存大
事務從緩存同步到事務日誌文件
從日誌文件同步進數據庫文件
重要的變量innodb_flush_log_at_trx_commit={0|1|2}
0:每秒同步,並flush
1:每事務同步,並flush
2:每事務同步,不執行flush,由系統決定flush時間
這裏的同步表示將用戶空間緩存同步到內核空間,flush表示事務緩存同步到日誌文件中
二進制日誌和事務日誌區別:
二進制日誌文件爲了實現當數據庫崩潰故障的時候,用於數據還原的
而事務日誌爲了保證事務本身的可靠性,保證ACID的