binlog介紹


1、什么是binlog

        binlog一個二進制格式的文件,用於記錄用戶對數據庫更新的SQL語句信息,例如更改數據庫表和更改內容的SQL語句都會記錄到binlog,但是對庫表等內容的查詢不會記錄

   默認情況下,binlog日志是二進制格式的,不能使用查看文本工具的命令(比如,catvi等)查看,使用mysqlbinlog解析查看

2.binlog的作用

      當有數據寫入到數據庫時,還會同時把更新的SQL語句寫入到對應的binlog文件里,這個文件就是上文說的binlog文件。使用mysqldump備份時,只是對一段時間的數據進行全備,但是如果備份后突然發現數據庫服務器故障,這個時候就要用到binlog的日志了。

主要作用是用於數據庫的主從復制及數據的增量恢復。

1.啥是binlog? 記錄數據庫增刪改,不記錄查詢的二進制日志.
2.作用:用於數據恢復.

3、如何開啟binlog日志功能

在mysql的配置文件my.cnf增加log_bin參數即可開啟binlog日志,也可以通過賦值來指定binlog日志的文件名,實例如下:

[root@DB02 ~]# grep log_bin /etc/my.cnf 
log_bin = /application/mysql/logs/dadong-bin
# log_bin
[root@DB02 ~]#
提示:也可以按“log_bin = /application/mysql/logs/dadong-bin”命名,目錄要存在
為什么要刷新binlog?找到全備數據和binlog文件的恢復臨界點.

4、 如何配置binlog

[root@db02 ~]# mkdir /application/mysql/logs
[root@db02 ~]# chown -R mysql.mysql /application/mysql/logs
開啟binlog
編輯/etc/my.cnf
[mysqld]
log_bin = /application/mysql/logs/dadong-bin
重啟:/etc/init.d/mysqld restart
[root@db02 ~]# ll /application/mysql/logs/
total 8
-rw-rw---- 1 mysql mysql 120 Jun 21 12:04 dadong-bin.000001
-rw-rw---- 1 mysql mysql  42 Jun 21 12:04 dadong-bin.index

如何刷新

每天晚上0點備份數據庫
mysqldump -A -B -F >/opt/$(date +%F).sql
[root@db02 ~]# ll /application/mysql/logs/
-rw-rw---- 1 mysql mysql 168 Jun 21 12:06 dadong-bin.000001
-rw-rw---- 1 mysql mysql 168 Jun 21 12:06 dadong-bin.000002
-rw-rw---- 1 mysql mysql 210 Jun 21 12:07 dadong-bin.index
提示:每個庫刷新一次.

5、mysql工具mysqlbinlog常用參數

mysqlbinlog命令常用參數

參數說明

-d ,--database=name

根據指定庫拆分binlog拆分單表binlog通過SQL關鍵字過濾

-r ,--result-file=name

指定解析binlog輸出SQL語句的文件

-R--read-from-remote-server

mysql服務器讀取binlog日志,是下面參數的別名

-j,--start-position=#

讀取binlog的起始位置點,#號是具體的位置點

--stop-position=#

讀取binlog的停止位置點,#號是具體的位置點

--start-datetime=name

讀取binlog的起始位置點,name具體的時間,格式為2004-12-25 11:25:26

--stop-datetime=name

讀取binlog的停止位置點,name是具體的時間,格式為:2004-12-25 11:25:26

--base64-output=decode-rows

解析row級別binlog日志的方法例如:mysqlbinlog  --base64-output=decode-rows -v  mysqlbin.000016

 

例子:

例:mysqlbinlog -d dadong dadong-bin.000001 dadong-bin.000002 -r bin.log   ##利用mysqlbinlog解析binlog文件到bin.log中。
利用mysqlbinlog  -d參數詳解指定庫的binlog日志
-d 指定解析dadong數據庫,
-r 接卸成sql語句,指定生成的文件

mysqlbinlog可以指定-d實現分庫導出binlog,如果使用-d參數,那更新數據時,必須有use庫名,才能分出指定庫的binlog,列如,寫入數據庫的語句必須采用下面寫法:

use  daong;
insert into test values(1,'dongdong')

6、獲取binlog內容

6.1、按照位置截取binlog內容

按照位置截取binlog內容的優點是精確,但是要花費時間選擇位置,例如:要截取dadong-bin.000009文件從位置365位置465日志,命令如下:

[root@DB02 ~]# mysqlbinlog dadong-bin.000009 --start-position=365 --stop-position=465 -r pos.sql
提示:開始位置必須存在binlog里,結尾位置點可以不存在。
若指定了開始位置,不指定結束位置,則會截取開始處到結尾的binlog日志:
mysqlbinlog dadong-bin.000009 --start-position=365  -r pos.sql
若指定了結束位置,不指定開始位置,則截取最開始到最后面的全部binlog日志:
mysqlbinlog dadong-bin.000009  --stop-position=465 -r pos.sql
所謂的位置點,就是mysqlbinlog解析文件里的不同行行首的“#at 數字”標識的數據。

 例子:

mysqlbinlog dadong-bin.000009 --start-position=365 --stop-position=456 -r pos.sql

mysqlbinlog dadong-bin.000005 --start-position=2265 --stop-position=2552 -r pos.sql
mysqlbinlog dadong-bin.000009 --start-position=365 --stop-position=456 -r pos.sql
mysqlbinlog dadong-bin.000009 --start-position=365 -r pos.sql
mysqlbinlog dadong-bin.000009 --stop-position=456 -r pos.sql
截取部分binlog根據pos
mysqlbinlog dadong-bin.000009 --start-position=365 --stop-position=456 -r pos.sql
mysqlbinlog dadong-bin.000009 --start-position=365 -r pos.sql
mysqlbinlog dadong-bin.000009 --stop-position=456 -r pos.sql

截取部分binlog根據時間
mysqlbinlog dadong-bin.000009 --start-datetime='2014-10-16 17:14:15' --stop-datetime='2014-10-16 17:15:15' -r time.sql
mysqlbinlog dadong-bin.000009 --start-datetime='2014-10-16 17:14:15'  -r time.sql
mysqlbinlog dadong-bin.000009  --stop-datetime='2014-10-16 17:15:15' -r time.sql

6.2、按時間位置截取binlog內容

 通過時間參數截取部分binlog:--start-datetime=‘2017-10-16 17:14:25’ --stop-datetime=‘2017-10-16 17:18:30’

 


免責聲明!

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



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