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日志的文件名,實例如下:
[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’