1. 程式人生 > >MariaDB數據庫日誌

MariaDB數據庫日誌

順序 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數據庫日誌