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’