二十五 二進位制日誌之GTID模式

2022-07-18 19:18:18 字數 2774 閱讀 5137

gtid介紹

從5.7開始建議將二進位制日誌記錄模式改為gtid記錄模式

對於binlog中的每乙個事務,都會生成乙個gtid號碼;

這裡的事務對於ddl,dcl語句來講每乙個event就是乙個事務,就會有乙個gtid號,跟事件一樣;

對於dml語句來講,從begin到commit,是乙個事務,就有乙個gtid號,這個跟事件不一樣要注意;

gtid的組成

由兩部分組成,severi_uuid跟tid組成;

severi_uuid:tid

tid:事務號碼,從1開始,是乙個自增長的數字

例如:d60b549f-9e10-11e9-ab04-000c294a1b3b:1-15

而server-uuid是資料庫在第一次初始化並啟動時就生成了,存放於data/目錄下auto.cnf檔案中

$ cd /usr/local/mysql5.7/data/

$ cat auto.cnf

[auto]

server-uuid=65c12fe4-613e-11eb-9271-000c29a2912e

開啟gtid

#修改配置檔案

$ vim /etc/my.cnf

[mysqld]

gtid-mode=on #開啟gtid模式

enforce-gtid-consistency=true #強制gtid一致性

$ /etc/init.d/mysqld restart

gtid的冪等性

如果拿有gtid的日誌去恢復時,當檢查到當前系統中有相同的gtid號時,就會自動跳過,這樣就會影響到binlog恢復和主從複製。

所以需要強制gtid一致性。

案例1、建立測試資料

mysql> create database gtid charset utf8mb4;

#此時executed_gtid_set列中什麼都沒有,見下圖

mysql> show master status;

#建立表

mysql> use gtid;

mysql> create table t1(id int);

#已生成gtid

mysql> show master status;

#使用dml語句但未提交會發現gtid號碼未增長,見下圖

mysql> insert into t1 values(1);

mysql> show master status;

#提交後,gtid增長

mysql> commit;

mysql> show master status;

mysql> drop database gtid;

開啟gtid之後,建立gtid資料庫就會生成gtid事務

注意使用dml語句commit之後才算乙個事務

開啟gtid後,檢視binlog事件資訊

2、匯出gtid事務

第4號gtid事務是刪庫語句,所以匯出1-3號的gtid事務進行恢復

--skip-gtids表示在匯出時,忽略原有的gtid資訊

$ mysqlbinlog --skip-gtids \

--include-gtids='d60b549f-9e10-11e9-ab04-000c294a1b3b:1-3' \

mysql-bin.000005 >/tmp/gtid.sql

如果不忽略原有的gtid資訊,會由於冪等性的檢查而報如下錯誤,這是因為1-3事務在原有資料已經存在

error 1049 (42000): unknown database 'gtid'

query ok, 0 rows affected (0.00 sec)

error 1046 (3d000): no database selected

3、恢復1-3號gtid事務

mysql> set sql_log_bin=0; #暫時關閉記錄二進位制日誌

mysql> source /tmp/gtid.sql #開始恢復

mysql> set sql_log_bin=1; #開啟記錄二進位制日誌

gtid相關的引數

--skip-gtids

不檢查gtid冪等性

--include-gtids='d60b549f-9e10-11e9-ab04-000c294a1b3b:6','d60b549f-9e10-11e9-ab04-000c294a1b3b:8'

只擷取6跟8的gtid事務引數

--exclude-gtids='d60b549f-9e10-11e9-ab04-000c294a1b3b:6','d60b549f-9e10-11e9-ab04-000c294a1b3b:8'

排除6跟8的gtid事務引數

學習來自:老男孩深標dba課程 第六章 日誌管理

mysql 二進位制日誌

如果mysql 伺服器啟用了二進位制日誌,你可以使用mysqlbinlog工具來恢復從指定的時間點開始 例如,從你最後一次備份 直到現在或另乙個指定的時間點的資料。mysqlbinlog 用於處理二進位制日誌檔案的實用工具 要想從二進位制日誌恢復資料,你需要知道當前二進位制日誌檔案的路徑和檔名。一般...

mysql 二進位制日誌

1.日誌型別 二進位制日誌記錄了所有對mysql資料庫的修改事件,包括增刪改事件和對錶結構的修改事件。2.配置使用二進位制日誌 在my.ini 配置 log bin mysql bin 3.二進位制日誌格式 基於段的日誌格式 binlog format statement 記錄了操作的sql語句。優...

啟用二進位制日誌

1.開啟配置檔案 sudo vi etc my.cnf 2.編輯配置檔案 log bin data mysql binlogs server1 日誌生成位置 server id 100 主從時要唯一,設定要注意 3.重啟mysql服務 sudo systemctl restart mysql 4.驗...