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文件,本步需要執行多次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *