Mysql二進制日誌binlog命令

第一節: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

相關文章
相關標籤/搜索