MySQL二進位制日誌功能介紹

2022-05-23 01:51:06 字數 2857 閱讀 1084

二進位制日誌記錄所有更新資料的sql語句,其中也包含可能更新資料的sql語句,例如delete語句執行過程中無匹配的行。二進位制日誌中還包含了與執行sql語句相關的內容,例如sql語句執行的時間、錯誤**等。

二進位制日誌功能介紹

mysql中的二進位制日誌主要有兩個功能:資料恢復和資料複製。

資料恢復--mysql本身具備資料備份和恢復功能。例如我們可以每天午夜12:00進行資料備份。但是,此類備份功能並不是對資料庫的實時備份,如果資料庫在下午17:00出現故障無法恢復,那麼從前一天午夜12:00到當天下午17:00的資料庫內容將丟失。通過二進位制日誌可以解決這個問題。可以通過前一天午夜12:00的資料庫備份檔案恢復資料庫,然後使用二進位制日誌恢復從前一天午夜12:00到當天下午17:00的資料庫內容。

資料複製--mysql支援主從伺服器間的資料複製功能,並通過該功能實現資料庫的冗餘機制以保證資料庫的可用性和提高資料庫的效能。mysql正是通過主伺服器的二進位制日誌來實現資料的傳遞。主伺服器上的二進位制日誌內容會被傳送到各個從伺服器,並在每個從伺服器上執行,從而保證了主從伺服器之間資料的一致性。

在預設配置下,mysql不記錄二進位制日誌。可以通過設定引數--log-bin=[base_name]啟用二進位制日誌功能,mysql會將修改資料庫內容的語句記錄到以base_name-bin.0000x為名字的日誌檔案中。其中bin代表binary,字尾0000x為二進位制日誌檔案順序。每次mysql啟動時,日誌檔案順序會自動加1。如果base_name未定義,mysql將使用pid-file引數設定的值作為二進位制日誌檔案的基礎名字。

我們可以從前面介紹的二進位制日誌的功能(資料恢復和資料複製)看出,二進位制日誌主要是供mysql內部使用的,並不是為了資料庫管理員閱讀使用。因此,二進位制日誌與前面介紹的幾種日誌乙個重要的不同就是,二進位制日誌檔案的格式不是文字格式,其內容不能通過記事本直接檢視。但是,為了管理員的方便,mysql也提供了乙個名為mysqlbinlog的工具,用於檢視和處理二進位制日誌檔案的內容。mysqlbinlog的用法為直接在命令後面新增二進位制日誌檔案作為引數,比如:$mysqlbinlog jason2-bin.000001,其中jason2-bin.000001為二進位制日誌檔案。

...  

1 #090713 17:20:08 server id 1  end_log_pos 199  

query   thread_id=1    exec_time=0    error_code=0 

2 use test/*!*/;  

3 set timestamp=1247476808/*!*/;  

4 set @@session.pseudo_thread_id=1/*!*/;  

5 set @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1,  

@@session.unique_checks=1, @@session.autocommit=1/*!*/;  

6 set @@session.sql_mode=0/*!*/;  

7 set @@session.auto_increment_increment=1,  

@@session.auto_increment_offset=1/*!*/;  

8 /*!\c latin1 *//*!*/;  

9 set @@session.character_set_client=8,  

@@session.collation_connection=8,@@session.collation_server=8/*!*/;  

10 set @@session.lc_time_names=0/*!*/;  

11 set @@session.collation_database=default/*!*/;  

12 insert into t values ('12345')  

13 /*!*/;  

14 # at 199  

... 

從第1~14行記錄了一條對資料庫更改操作的sql語句(第12行):insert into t values ('12345')。第1行記錄內容如表11-6所示。

表11-6  記錄內容說明

日誌的第2行表示切換到mysql伺服器的test資料庫。第3~11行設定當前會話的一些環境變數,例如是否自動提交(session.autocommit)、是否檢查外來鍵約束(session.foreign_key_ checks)等。如果需要了解它們詳細的引數和說明,可以參考mysql使用手冊的第5章第1小節。

日誌第12行為該條記錄的核心,即對資料庫進行了更改操作的sql語句(insert into t values ('12345'))。日誌第14行表示該條日誌記錄的結束。

以上分析了mysql二進位制日誌如何記錄一條對資料庫進行更改的sql語句,對於其他sql語句的記錄格式與上面的類似。

前面提到,每次mysql啟動時,日誌檔案順序會自動加1。例如當前二進位制日誌檔名為:jason2-bin.000001,停止並重啟動mysql後,二進位制日誌檔名為jason2-bin.000002,新的更改資料庫的操作將被記錄到新的檔案中。舊的二進位制日誌檔案用於進行資料庫的複製或者恢復。

預設情況下,在資料庫目錄下還有乙個索引檔案用來記錄已經使用的二進位制日誌檔案的名字,該索引檔案的名字為"hostname-bin.index"。下面是索引檔案的內容:

jason@jason2:~/mysql-bin/var> more jason2-bin.index  

./jason2-bin.000001  

./jason2-bin.000002 

索引檔案最後一行表示當前正在使用的二進位制日誌名字。

mysql 二進位制日誌

如果mysql 伺服器啟用了二進位制日誌,你可以使用mysqlbinlog工具來恢復從指定的時間點開始 例如,從你最後一次備份 直到現在或另乙個指定的時間點的資料。mysqlbinlog 用於處理二進位制日誌檔案的實用工具 要想從二進位制日誌恢復資料,你需要知道當前二進位制日誌檔案的路徑和檔名。一般...

mysql 二進位制日誌

1.日誌型別 二進位制日誌記錄了所有對mysql資料庫的修改事件,包括增刪改事件和對錶結構的修改事件。2.配置使用二進位制日誌 在my.ini 配置 log bin mysql bin 3.二進位制日誌格式 基於段的日誌格式 binlog format statement 記錄了操作的sql語句。優...

MySQL日誌 二進位制日誌(1)

一 二進位制日誌的介紹 二進位制日誌的資料當然是二進位制形式了,所以無法直接通過文字工具來檢視,並且二進位制日誌也不是用來檢視的而是通常給mysql使用的。它記錄了對資料發生或潛在發生更改的sql語句。二進位制日誌的用途有如下幾點 可以記錄對資料庫所在的變更,包括ddl和dml語句。用於資料庫的增量...