MySQL和Mariadb二進制日志binlog詳解


Mariadb/mysql提供了4中不同的日志,分別是錯誤日志(error.log)、普通日志(general log)、慢日志(slow log)以及二進制日志(binlog)。錯誤日志記錄了系統啟動、運行以及停止過程中遇到的一些問題;普通日志記錄了Mariadb執行的所有語句以及語句開始執行的時間等信息,用戶可以選擇性的打開它;慢日志記錄了Mariadb所有慢查詢的相關信息;而二進制日志則以事件的形式記錄了mariadb的庫表結構以及表數據的所有變更信息。

一:binlog的作用

  • l  復制:在Mariadb/mysql的主從結構中,主庫的binlog記錄了主庫的所有更改操作,從庫通過讀取主庫的binlog,在本地重放獲取的binlog,這樣從庫就擁有和主庫相同的數據,達到復制目的。

  • l  備份恢復:binlog記錄了數據庫的所有更改信息,所以當Mariadb/mysql發生崩潰的時候,能夠以最近備份點作為起點,然后執行在備份點之后產生的binlog中所有事件,實現數據庫最大可能的恢復。

  • index文件按照書序記錄了Mariadb/Mysql使用的所有binlog文件,管理binlog文件。

二:binlog·的3種格式

  • STATEMENT:顧名思義,STATEMENT格式的binlog記錄的是數據庫上執行的原生SQL語句
  • l  ROW:這種格式的binlog記錄的是數據表的行是怎樣被修改的。

  • l  MIXED:如果設置了這種格式,Mariadb/Mysql會在一些特定的情況下自動從STATEMENT格式切換到ROW格式。例如,包含UUID等不確定性函數的語句,引用了系統變量的語句,等等。

三:開啟binlog

[mysqld]
log-bin = base-name
BINLOG_FORMAT = ROW

四:binlog的相關參數

  • max_binlog_size參數  此參數來限定單個binlog文件的大小。binlog文件可能會大於max_binlog_size參數設定的閥值,因為一個事務所產生的所有事件必須記錄在同一個binlog文件中。
  • binlog過濾器  擁有root權限的用戶可以通過執行SET sql_log_bin = 0命令來禁用當前會話,該回話執行的所有操作都不會記錄在binlog中。
  • sync_binlog參數;默認情況下syc_binlog=0,binlog文件在每次寫入內容后是不會立刻持久化到磁盤上的具體的持久化操作會交給操作系統來做。真陽當操作系統崩潰的時候,對binlog文件進行的修改可能會丟失,從而造成binlog文件的數據丟失和不一致性。為了避免發生這種情況,可以將sync_binlog配置成1,這樣在將事務寫入到binlog文件之后會立即執行fsync操作將binlog文件的修改同步到磁盤上。但這樣會降低Mariadb的性能,因為sync是個昂貴的系統調用,也可以將sync_binlog配置成一個整數N,指定在寫入N個是事務之后才執行一次fsync操作。

  • bin-log事件

    通過執行show binlog events in "binlog-file"命令來查看指定binlog文件中的事件。如果binlog格式為STATEMENT ,還能看出具體執行的SQL語句。

五:清理binlog

      手動清理binlog的方式有兩種,一種是使用Mariadb提供的purge命令,一種是通過系統自帶的rm命令

  • purge {binary | master } logs to "binlog-file-name"

    purge {binary | master } logs before "datetime-expi"

    其中第一種形式的purge命令的作用是將binlog—file-name之前的所有binlog文件清理掉,而第二種形式的purge命令是將最后修改時間早於datetime-expi的binlog文件清理掉
  • 使用rm命令手動清理binlog的流程如下。

    (1)確保你的mysql處於停止狀態

    (2)使用rm命令按順序刪除binlog文件

    (3)修改index文件,把已經刪除的binlog文件從index文件中刪除

      自動清理binlog

  • 在啟動mysql server的時候,攜帶expire_log_days=N 參數(0≤N≤99),或則在配置文件中添加expire_logs_days=N選項,這樣mysql只會保存N天的binlog,過期的binlog會被自動清理掉。

六:MySQL和Mariadbmysqlbinlog工具

       mysqlbilog工具可以將binlog中事件包含的信息以文本的形式打印出來。

       mysqlbinlog [options] binlog-file ...

       通過mysqlbinlog進行恢復主要有一下兩步,

       1:使你的數據庫恢復到最近備份點的狀態

       2:執行mysqlbinlog your-bin-log | mysql -u root -p ,將binlog中記錄的修改,反映到數據庫中。(如果有多個binlog文件,本步需要執行多次)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM