第一節:mysql
binlog配置:sql
注意:MySQL默認是沒有開啓二進制日誌的。vim
基礎參數查看:ide
開關:spa
[(none)]>select @@log_bin;rest
日誌路徑及名字日誌
[(none)]>select @@log_bin_basename;code
服務ID號:orm
[(none)]>select @@server_id;server
二進制日誌格式:
[(none)]>select @@binlog_format;
雙一標準之二:
[(none)]>select @@sync_binlog;
binlog
一、做用:
配合備份,恢復數據的日誌,它是主從複製的前提
二、配置參數
server_id=8
log_bin=/data/binlog/mysql-bin
這個參數先建立好,必定記得給受權
binlog_format=row #記錄二進制的格式,主要是針對變量語句,行的模式
server_id=3306
主要是在主從複製過程當中必需要加的,可是在5.7版本中,要用如下參數(log_bin),開啓binlog日誌,即便是單機也是必加的
log_bin=/data/binlog/mysql-bin
(1)開啓二進制日誌功能
(2)設置二進制日誌目錄及名稱前綴
binlog_format=row
binlog的記錄格式??
三、事件event
二進制日誌記錄的最小單元
開始position 位置號
結束position 位置號
Position:
開始標識: at 194
結束標識: end_log_pos 254
194? 254?
某個事件在binlog中的相對位置號,位置號的做用是什麼?
爲了方便咱們截取事件,主要截取二進制日誌
對於DDL,DCL,一個語句就是一個event
對於DML語句來說:只記錄已提交的事務。
四、記錄什麼語句
DDL:原封不動的記錄當前DDL(statement語句方式)。
DCL:原封不動的記錄當前DDL(statement語句方式)。
DML:ROW 模式
row 和語句模式的優缺點
statement:可讀性較高,日誌量少,可是不夠嚴謹
row:行模式,行的變化,記錄數據比較準確,可讀性很低,日誌量大,足夠嚴謹
五、日誌查看
show binary logs 查看一共多少個binlog
show master status 查看mysql正在使用的日誌文件
show binlog enents in ‘xxx’ 查看當前事件來截取二進制 的啓點和終點
enents 又擴展到了form 和limit 來查詢
能夠更快速的過濾
mysql -e "show binlog enents in ‘xxx’ form limit"
mysqlbinlog -d --start-position --stop-position --start-datetime --stop-datetime
--base64-output=decode-rows -vvv
Master [binlog]>show binlog events in 'mysql-bin.000003';
+------------------+-----+----------------+-----------+-------------+----------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+----------------------------------------+
| mysql-bin.000003 | 4 | Format_desc | 6 | 123 | Server ver: 5.7.20-log, Binlog ver: 4 |
| mysql-bin.000003 | 123 | Previous_gtids | 6 | 154 | |
| mysql-bin.000003 | 154 | Anonymous_Gtid | 6 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000003 | 219 | Query | 6 | 319 | create database binlog |
| mysql-bin.000003 | 319 | Anonymous_Gtid | 6 | 384 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000003 | 384 | Query | 6 | 486 | use `binlog`; create table t1 (id int) |
+------------------+-----+----------------+-----------+-------------+--------------------------------------
Log_name:binlog文件名
Pos:開始的position *****
Event_type:事件類型
Format_desc:格式描述,每個日誌文件的第一個事件,多用戶沒有意義,MySQL識別binlog必要信息
Server_id:mysql服務號標識
End_log_pos:事件的結束位置號 *****
Info:事件內容*****
補充:
SHOW BINLOG EVENTS
[IN 'log_name']
[FROM pos]
[LIMIT [offset,] row_count]
[root@db01 binlog]# mysql -e "show binlog events in 'mysql-bin.000004'" |grep drop
六、截取日誌
重點就是啓點和終點
[root@db01 binlog]# mysqlbinlog --start-datetime='2020-12-26 17:00:00' --stop-datetime='2020-12-26 17:01:00' /data/binlog/mysql-bin.000004
七、用gtid截取二進制日誌,當日志量比較大的時候用gtid比較方便
重要參數介紹:
vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true
systemctl restart mysqld
基於GTID進行查看binlog
具有GTID後,截取查看某些事務日誌:
--include-gtids
--exclude-gtids
mysqlbinlog --include-gtids='dff98809-55c3-11e9-a58b-000c2928f5dd:1-6'
--exclude-gtids='dff98809-55c3-11e9-a58b-000c2928f5dd:4' /data/binlog/mysql-bin.000004