MySQL日誌功能

  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的





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章