Mysql的binlog日誌詳解

Binlog的開啓

mysql5.7默認是不開啓binlog日誌的,具體的開啓方式在開啓的筆記中查看。mysql

Binlog 配置的查看

binlog開啓成功以後,binlog文件的位置能夠在my.inf配置文件中查看。也能夠在mysql的命令行中查看。命令行查看代碼以下linux

show variables like '%log_bin%';

查看當前Binlog的狀況

show master status

輸入圖片說明

每當咱們重啓一次,會自動生成一個binlog文件,咱們重啓完畢以後再來執行一樣的命令sql

輸入圖片說明

存放binlog的目錄下也多個了這麼一個文件。 固然,咱們也能夠手動的來刷新binlog文件,經過 flush logs,一樣會新建立一個binlog文件數據庫

輸入圖片說明

若是咱們想把這些文件所有清空,可使用reset master 來處理session

輸入圖片說明

單個Binlog的描述

找到binlog的目錄,好比咱們要看mysql-bin-0001工具

vi mysql-bin-000001

輸入圖片說明

咱們看到的一堆亂碼。咱們知道這是一堆的二進制文件,因此以文本的方式打開二進制文件必定是有問題的,那麼咱們該如何查看這個文件的內容呢? mysql給咱們提供了一個用於查看binlog日誌的工具,叫作mysqlbinlog測試

輸入圖片說明

這個文件比較長,一次打開看不完怎麼辦呢,這裏可使用linux的管道,這裏就不詳細的說了,能夠本身去查找關於linux的一些知識。 注意到上面的截圖中有一個position字段,這個字段的值爲154,這個表示的就是binlog當前的位置。咱們每次執行dml操做,position都會改變。好比咱們先來建立一個數據 test 在建立以前咱們能夠清一下binlog日誌方便咱們查看,可使用 reset master。在生產環境中,這個操做是很是危險的,那麼咱們可使用flush logs來處理,生成一個新的binlog文件。無論採用哪一種方式,咱們在測試的環境中,只要有一個新的binlog文件就能夠了。生成了新的binlog文件以後,咱們能夠經過show master status 來查看狀態。.net

輸入圖片說明

下面咱們來執行一個dml語句,好比咱們要建立一個test數據庫命令行

create database test;

而後咱們來查看建立以後的狀態,以下,咱們發現position從154變成了313,也就是說咱們的操做是在154到313之間,而後咱們再來看binlog的內容。3d

輸入圖片說明

咱們截取154到313之間的binlog的內容以下:

# at 154

#170708 9:24:02 server id 12345 end_log_pos 219 CRC32 0x30763ffe Anonymous_GTID last_committed=0 sequence_number=1

SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;

# at 219

#170708 9:24:02 server id 12345 end_log_pos 313 CRC32 0x4d0140b3 Query thread_id=5 exec_time=0 error_code=0

SET TIMESTAMP=1499477042/*!*/;

SET @@session.pseudo_thread_id=5/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

SET @@session.sql_mode=1436549152/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

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

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

create database test

/*!*/;

SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;

DELIMITER ;

# End of log file

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

咱們能夠看到,mysql作了不少的隱含的操做,而後加粗的部分就是咱們所執行的操做。

下面咱們來簡單總結一下關於binlog:

1.binlog文件會隨服務的啓動建立一個新文件

2.經過flush logs 能夠手動刷新日誌,生成一個新的binlog文件

3.經過show master status 能夠查看binlog的狀態

4.經過reset master 能夠清空binlog日誌文件

5.經過mysqlbinlog 工具能夠查看binlog日誌的內容

6.經過執行dml,mysql會自動記錄binlog

連接

Mysql的binlog日誌詳解

相關文章
相關標籤/搜索