MariaDB數據庫日誌
阿新 • • 發佈:2018-10-12
順序 from auto sin 查看 獨立 導致 滾動 datetime 在日常生產中,各種服務應用的日誌的主要作用就是記錄服務的運行狀態、啟動記錄等信息,但數據庫的日誌對於數據庫而言是很重要的。數據庫日誌分為:事務、中繼、錯誤、通用、慢查詢和二進制日誌,其中每種日誌都有其特定的功能。通過日誌分析,我們可以很快的找出服務器的性能瓶頸,優化數據庫的性能。
一.事務日誌
事務使得數據庫在實現MVCC(多版本並發控制)的同時也保證了數據的一致性、唯一性,MariaDB默認的存儲引擎支持事務功能。在數據庫中,單條的SELECT、UPDATE、DELETE都是一個獨立的事務,系統在執行完命令後默認自動提交。
因此在我們執行mysql語句的時候,數據庫會先把對數據的修改結果先寫到事務日誌中,待COMMIT後再寫到數據庫的磁盤文件中。
1.事務日誌的特點
事務日誌的寫入類型為“追加”,因此其操作為“順序IO”;通常也被稱為:預寫式日誌 write ahead logging
事務日誌建議放在一個獨立分區內,事務是順序寫入,所以獨立分區可以提升其寫入性能
日誌文件名稱: ib_logfile0, ib_logfile1
2.Innodb事務日誌相關配置:
show variables like ‘%innodb_log%‘; 查看事務日誌變量 innodb_log_file_size 5242880 每個日誌文件大小,反復輪流覆蓋,不永久保留。 innodb_log_files_in_group 2 日誌組成員個數 innodb_log_group_home_dir ./ 事務文件路徑,和數據文件分開放,提升數據庫性能
二.中繼日誌:relay log
主從復制架構中,從服務器用於保存從主服務器的二進制日誌中讀取的事件
三.錯誤日誌記錄數據庫運行中出現的各種錯誤
記錄數據庫運行中出現的各種錯誤
1.錯誤日誌的特點
log-error 配置文件
mysqld啟動和關閉過程中輸出的事件信息
mysqld運行中產生的錯誤信息
event scheduler運行一個event時產生的日誌信息
在主從復制架構中的從服務器上啟動從服務器線程時產生的信息
2.錯誤日誌配置
SHOW GLOBAL VARIABLES LIKE ‘log_error‘ 查看和數據庫運行錯誤信息 錯誤文件路徑: log_error=/PATH/TO/LOG_ERROR_FILE 是否記錄警告信息至錯誤日誌文件 log_warnings=1|0 默認值1
3.通用日誌
記錄對數據庫的通用操作,包括錯誤的SQL語句
通用日誌相關設置
general_log=ON|OFF 默認OFF,因為通用記錄太多影響數據庫性能,排錯的時候可以用。
general_log_file=HOSTNAME.log 通用日誌路徑
log_output=TABLE|FILE|NONE 管理通用日誌文件格式
四.慢查詢日誌
慢查詢日誌:記錄執行查詢時長超出指定時長的操作 據此優化數據庫性能
slow_query_log=ON|OFF 開啟或關閉慢查詢,開啟以後占用系統資源,所以默認關閉
long_query_time=N 慢查詢的閥值,單位秒,可以自行修改
slow_query_log_file=HOSTNAME-slow.log 慢查詢日誌文件
log_slow_filter = admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
上述查詢類型且查詢時長超過long_query_time,則記錄日誌
log_queries_not_using_indexes=ON 不使用索引或使用全索引掃描,不論是否達到慢查詢閥值的語句是否記錄日誌,默認OFF,即不記錄
log_slow_rate_limit = 1 多少次查詢才記錄,mariadb特有
log_slow_verbosity= Query_plan,explain 記錄內容
log_slow_queries = OFF 同slow_query_log 新版已廢棄
五.二進制日誌
1.二進制日誌的特點
記錄導致數據改變或潛在導致數據改變的SQL語句
記錄已提交的日誌
不依賴於存儲引擎類型
功能:通過“重放”日誌文件中的事件來生成數據副本 恢復數據庫
不斷累加的,不會覆蓋。而事務日誌是會被覆蓋的
二進制日誌甚至比數據庫文件重要,但二進制日誌不記錄初始狀態。
註意:建議二進制日誌和數據文件分開存放 避免因為硬件損壞而導致兩個文件都被損壞
2.二進制日誌記錄格式
-
二進制日誌記錄三種格式
基於“語句”記錄:statement,記錄語句,默認模式 基於“行”記錄:row,記錄數據,日誌量較大 混合模式:mixed, 讓系統自行判定該基於哪種方式進行
-
格式配置
show variables like ‘binlog_format‘;
3.二進制日誌文件的構成
日誌文件:mysql|mariadb-bin.文件名後綴,二進制格式
如: mariadb-bin.000001
索引文件:mysql|mariadb-bin.index,文本格式
4.二進制日誌相關的服務器變量:
sql_log_bin=ON|OFF:是否記錄二進制日誌,默認ON,可以直接動態更改的
log_bin=/PATH/BIN_LOG_FILE:指定文件位置;默認OFF,表示不啟用二進制日誌功能,上述兩項都開啟才可以,重啟服務才能生效
binlog_format=STATEMENT|ROW|MIXED:二進制日誌記錄的格式,默認STATEMENT
max_binlog_size=1073741824:單個二進制日誌文件的最大體積,到達最大值會自動滾動,默認為1G
說明:文件達到上限時的大小未必為指定的精確值
sync_binlog=1|0:設定是否啟動二進制日誌即時同步磁盤功能,默認0,由操作系統負責同步日誌到磁盤。1 由mysql自己決定,日誌一變化就寫。
expire_logs_days=N:二進制日誌可以自動刪除的天數。默認為0,即不自動刪除
binlog/mysql-bin.index 記錄當前有效的二進制文件
5.二進制日誌相關配置
查看mariadb自行管理使用中的二進制日誌文件列表,及大小
SHOW {BINARY | MASTER} LOGS
查看使用中的二進制日誌文件
SHOW MASTER STATUS
查看二進制文件中的指定內容
SHOW BINLOG EVENTS [IN ‘log_name‘] [FROM pos] [LIMIT [offset,] row_count]
show binlog events in ‘mysql-bin.000001‘ from 6516 limit 2,3
mysqlbinlog:二進制日誌的客戶端命令工具
命令格式:
mysqlbinlog [OPTIONS] log_file…
--start-position=# 指定開始位置
--stop-position=#
--start-datetime=
--stop-datetime=
時間格式:YYYY-MM-DD hh:mm:ss
--base64-output=auto [=name] 以base64編碼輸出
示例:mysqlbinlog --start-position=6787 --stop-position=7527
/var/lib/mysql/mariadb-bin.000003
mysqlbinlog --start-datetime="2018-01-30 20:30:10" --stop-datetime="2018-01-30 20:35:22" mariadb-bin.000003
6.二進制日誌事件的格式:
# at 328
#151105 16:31:40 server id 1 end_log_pos 431 Query thread_id=1 exec_time=0
error_code=0
use `mydb`/*!*/;
SET TIMESTAMP=1446712300/*!*/;
CREATE TABLE tb1 (id int, name char(30))
/*!*/;
事件發生的日期和時間:151105 16:31:40
事件發生的服務器標識:server id 1
事件的結束位置:end_log_pos 431
事件的類型:Query
事件發生時所在服務器執行此事件的線程的ID:thread_id=1
語句的時間戳與將其寫入二進制文件中的時間差:exec_time=0
錯誤代碼:error_code=0
事件內容:
GTID:Global Transaction ID,mysql5.6以mariadb10以上版本專屬屬性:GTID 不同的服務器,不同的日誌
7.清除指定二進制日誌:
PURGE { BINARY | MASTER } LOGS 謹慎使用
{ TO ‘log_name‘ | BEFORE datetime_expr }
示例:
PURGE BINARY LOGS TO ‘mariadb-bin.000003’;刪除3之前的日誌
PURGE BINARY LOGS BEFORE ‘2017-01-23‘;
PURGE BINARY LOGS BEFORE ‘2017-03-22 09:25:30‘;
刪除所有二進制日誌,index文件重新記數
RESET MASTER [TO #]; 日誌文件從#開始記數,默認從1開始,一般是master第一次啟動時執行,MariaDB10.1.6開始支持TO #
切換日誌文件:
FLUSH LOGS; 生成新的日誌文件,原日誌文件還在。
MariaDB數據庫日誌