MariaDB数据库日志
??在日常生產(chǎn)中,各種服務(wù)應(yīng)用的日志的主要作用就是記錄服務(wù)的運(yùn)行狀態(tài)、啟動記錄等信息,但數(shù)據(jù)庫的日志對于數(shù)據(jù)庫而言是很重要的。數(shù)據(jù)庫日志分為:事務(wù)、中繼、錯誤、通用、慢查詢和二進(jìn)制日志,其中每種日志都有其特定的功能。通過日志分析,我們可以很快的找出服務(wù)器的性能瓶頸,優(yōu)化數(shù)據(jù)庫的性能。
一.事務(wù)日志
??事務(wù)使得數(shù)據(jù)庫在實現(xiàn)MVCC(多版本并發(fā)控制)的同時也保證了數(shù)據(jù)的一致性、唯一性,MariaDB默認(rèn)的存儲引擎支持事務(wù)功能。在數(shù)據(jù)庫中,單條的SELECT、UPDATE、DELETE都是一個獨(dú)立的事務(wù),系統(tǒng)在執(zhí)行完命令后默認(rèn)自動提交。
??因此在我們執(zhí)行mysql語句的時候,數(shù)據(jù)庫會先把對數(shù)據(jù)的修改結(jié)果先寫到事務(wù)日志中,待COMMIT后再寫到數(shù)據(jù)庫的磁盤文件中。
1.事務(wù)日志的特點(diǎn)
事務(wù)日志的寫入類型為“追加”,因此其操作為“順序IO”;通常也被稱為:預(yù)寫式日志 write ahead logging 事務(wù)日志建議放在一個獨(dú)立分區(qū)內(nèi),事務(wù)是順序?qū)懭?#xff0c;所以獨(dú)立分區(qū)可以提升其寫入性能 日志文件名稱: ib_logfile0, ib_logfile12.Innodb事務(wù)日志相關(guān)配置:
show variables like '%innodb_log%'; 查看事務(wù)日志變量 innodb_log_file_size 5242880 每個日志文件大小,反復(fù)輪流覆蓋,不永久保留。 innodb_log_files_in_group 2 日志組成員個數(shù) innodb_log_group_home_dir ./ 事務(wù)文件路徑,和數(shù)據(jù)文件分開放,提升數(shù)據(jù)庫性能二.中繼日志:relay log
主從復(fù)制架構(gòu)中,從服務(wù)器用于保存從主服務(wù)器的二進(jìn)制日志中讀取的事件三.錯誤日志記錄數(shù)據(jù)庫運(yùn)行中出現(xiàn)的各種錯誤
??記錄數(shù)據(jù)庫運(yùn)行中出現(xiàn)的各種錯誤
1.錯誤日志的特點(diǎn)
log-error 配置文件 mysqld啟動和關(guān)閉過程中輸出的事件信息 mysqld運(yùn)行中產(chǎn)生的錯誤信息 event scheduler運(yùn)行一個event時產(chǎn)生的日志信息 在主從復(fù)制架構(gòu)中的從服務(wù)器上啟動從服務(wù)器線程時產(chǎn)生的信息2.錯誤日志配置
SHOW GLOBAL VARIABLES LIKE 'log_error' 查看和數(shù)據(jù)庫運(yùn)行錯誤信息錯誤文件路徑:log_error=/PATH/TO/LOG_ERROR_FILE 是否記錄警告信息至錯誤日志文件log_warnings=1|0 默認(rèn)值13.通用日志
??記錄對數(shù)據(jù)庫的通用操作,包括錯誤的SQL語句
通用日志相關(guān)設(shè)置general_log=ON|OFF 默認(rèn)OFF,因為通用記錄太多影響數(shù)據(jù)庫性能,排錯的時候可以用。general_log_file=HOSTNAME.log 通用日志路徑log_output=TABLE|FILE|NONE 管理通用日志文件格式四.慢查詢?nèi)罩?/h3>
慢查詢?nèi)罩?#xff1a;記錄執(zhí)行查詢時長超出指定時長的操作 據(jù)此優(yōu)化數(shù)據(jù)庫性能
slow_query_log=ON|OFF 開啟或關(guān)閉慢查詢,開啟以后占用系統(tǒng)資源,所以默認(rèn)關(guān)閉 long_query_time=N 慢查詢的閥值,單位秒,可以自行修改 slow_query_log_file=HOSTNAME-slow.log 慢查詢?nèi)罩疚募og_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 不使用索引或使用全索引掃描,不論是否達(dá)到慢查詢閥值的語句是否記錄日志,默認(rèn)OFF,即不記錄 log_slow_rate_limit = 1 多少次查詢才記錄,mariadb特有 log_slow_verbosity= Query_plan,explain 記錄內(nèi)容 log_slow_queries = OFF 同slow_query_log 新版已廢棄五.二進(jìn)制日志
1.二進(jìn)制日志的特點(diǎn)
記錄導(dǎo)致數(shù)據(jù)改變或潛在導(dǎo)致數(shù)據(jù)改變的SQL語句 記錄已提交的日志 不依賴于存儲引擎類型 功能:通過“重放”日志文件中的事件來生成數(shù)據(jù)副本 恢復(fù)數(shù)據(jù)庫 不斷累加的,不會覆蓋。而事務(wù)日志是會被覆蓋的 二進(jìn)制日志甚至比數(shù)據(jù)庫文件重要,但二進(jìn)制日志不記錄初始狀態(tài)。 注意:建議二進(jìn)制日志和數(shù)據(jù)文件分開存放 避免因為硬件損壞而導(dǎo)致兩個文件都被損壞2.二進(jìn)制日志記錄格式
-
二進(jìn)制日志記錄三種格式
基于“語句”記錄:statement,記錄語句,默認(rèn)模式 基于“行”記錄:row,記錄數(shù)據(jù),日志量較大 混合模式:mixed, 讓系統(tǒng)自行判定該基于哪種方式進(jìn)行 -
格式配置
show variables like ‘binlog_format';
3.二進(jìn)制日志文件的構(gòu)成
日志文件:mysql|mariadb-bin.文件名后綴,二進(jìn)制格式如: mariadb-bin.000001 索引文件:mysql|mariadb-bin.index,文本格式4.二進(jìn)制日志相關(guān)的服務(wù)器變量:
sql_log_bin=ON|OFF:是否記錄二進(jìn)制日志,默認(rèn)ON,可以直接動態(tài)更改的 log_bin=/PATH/BIN_LOG_FILE:指定文件位置;默認(rèn)OFF,表示不啟用二進(jìn)制日志功能,上述兩項都開啟才可以,重啟服務(wù)才能生效 binlog_format=STATEMENT|ROW|MIXED:二進(jìn)制日志記錄的格式,默認(rèn)STATEMENT max_binlog_size=1073741824:單個二進(jìn)制日志文件的最大體積,到達(dá)最大值會自動滾動,默認(rèn)為1G 說明:文件達(dá)到上限時的大小未必為指定的精確值 sync_binlog=1|0:設(shè)定是否啟動二進(jìn)制日志即時同步磁盤功能,默認(rèn)0,由操作系統(tǒng)負(fù)責(zé)同步日志到磁盤。1 由mysql自己決定,日志一變化就寫。 expire_logs_days=N:二進(jìn)制日志可以自動刪除的天數(shù)。默認(rèn)為0,即不自動刪除 binlog/mysql-bin.index 記錄當(dāng)前有效的二進(jìn)制文件5.二進(jìn)制日志相關(guān)配置
查看mariadb自行管理使用中的二進(jìn)制日志文件列表,及大小SHOW {BINARY | MASTER} LOGS 查看使用中的二進(jìn)制日志文件SHOW MASTER STATUS 查看二進(jìn)制文件中的指定內(nèi)容SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]show binlog events in 'mysql-bin.000001' from 6516 limit 2,3mysqlbinlog:二進(jìn)制日志的客戶端命令工具
命令格式:
6.二進(jìn)制日志事件的格式:
# 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)) /*!*/; 事件發(fā)生的日期和時間:151105 16:31:40 事件發(fā)生的服務(wù)器標(biāo)識:server id 1 事件的結(jié)束位置:end_log_pos 431 事件的類型:Query 事件發(fā)生時所在服務(wù)器執(zhí)行此事件的線程的ID:thread_id=1 語句的時間戳與將其寫入二進(jìn)制文件中的時間差:exec_time=0 錯誤代碼:error_code=0 事件內(nèi)容: GTID:Global Transaction ID,mysql5.6以mariadb10以上版本專屬屬性:GTID 不同的服務(wù)器,不同的日志7.清除指定二進(jìn)制日志:
PURGE { BINARY | MASTER } LOGS 謹(jǐn)慎使用{ 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';刪除所有二進(jìn)制日志,index文件重新記數(shù)
RESET MASTER [TO #]; 日志文件從#開始記數(shù),默認(rèn)從1開始,一般是master第一次啟動時執(zhí)行,MariaDB10.1.6開始支持TO #切換日志文件:
FLUSH LOGS; 生成新的日志文件,原日志文件還在。轉(zhuǎn)載于:https://blog.51cto.com/8031757/2299380
總結(jié)
以上是生活随笔為你收集整理的MariaDB数据库日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在 C/C++ 中使用 TensorFl
- 下一篇: Python语言程序设计基础(2)——