1. 程式人生 > >LOG的含義 : Mysql 之 binlog介紹

LOG的含義 : Mysql 之 binlog介紹

1、什麼是binlog

        binlog是一個二進位制格式的檔案,用於記錄使用者對資料庫更新的SQL語句資訊,例如更改資料庫表和更改內容的SQL語句都會記錄到binlog裡,但是對庫表等內容的查詢不會記錄

   預設情況下,binlog日誌是二進位制格式的,不能使用檢視文字工具的命令(比如,cat,vi等)檢視,而使用mysqlbinlog解析檢視。

2.binlog的作用

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

主要作用是用於資料庫的主從複製及資料的增量恢復。

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

3、如何開啟binlog日誌功能

在mysql的配置檔案my.cnf中,增加log_bin引數即可開啟binlog日誌,也可以通過賦值來指定binlog日誌的檔名,例項如下:

[[email protected] ~]# grep log_bin /etc/my.cnf 
log_bin = /application/mysql/logs/dadong-bin
# log_bin
[[email protected] ~]#
提示:也可以按“log_bin = /application/mysql/logs/dadong-bin”命名,目錄要存在
為什麼要重新整理binlog?找到全備資料和binlog檔案的恢復臨界點.

4、 如何配置binlog

[[email protected] ~]# mkdir /application/mysql/logs
[[email protected] ~]# chown -R mysql.mysql /application/mysql/logs
開啟binlog
編輯/etc/my.cnf
[mysqld]
log_bin = /application/mysql/logs/dadong-bin
重啟:/etc/init.d/mysqld restart
[[email protected] ~]# 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
[
[email protected]
~]# 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的日誌,命令如下:

 

[[email protected] ~]# 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’

 

轉  https://www.cnblogs.com/dadonggg/p/8617826.html