mysql主從之gtid主從搭建


1. 准備主從環境(1主2從)

1.1 准備數據路徑及配置文件

數據庫軟件目錄: /opt/mysql/
數據庫數據目錄: /data/{master20,slave21,slave22}/{data,binlog}
主庫端口3320
從庫端口分別為3321,3322
配置文件如下: cat
> /data/master20/my.cnf <<EOF [mysqld] basedir=/opt/mysql/ datadir=/data/master20/data socket=/data/master20/mysql.sock server_id=100 port=3320 secure-file-priv=/tmp # 配置的數據庫安全路徑, 能在數據庫界面中直接導出結果到該目錄下. autocommit=0 log_bin=/data/master20/binlog/master20-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 user=mysql character_set_server = utf8mb4 [mysql] prompt=master20 [\\d]> EOF
cat
> /data/slave21/my.cnf <<EOF [mysqld] basedir=/opt/mysql/ datadir=/data/slave21/data socket=/data/slave21/mysql.sock server_id=110 port=3321 secure-file-priv=/tmp autocommit=0 log_bin=/data/slave21/binlog/slave21-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 user=mysql character_set_server = utf8mb4 [mysql] prompt=slave21 [\\d]> EOF
cat
> /data/slave22/my.cnf <<EOF [mysqld] basedir=/opt/mysql/ datadir=/data/slave22/data socket=/data/slave22/mysql.sock server_id=120 port=3322 secure-file-priv=/tmp autocommit=0 log_bin=/data/slave22/binlog/slave22-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 user=mysql character_set_server = utf8mb4 [mysql] prompt=slave22 [\\d]> EOF

1.2 初始化三個實例

mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql  --datadir=/data/master20/data
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql  --datadir=/data/slave21/data
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql  --datadir=/data/slave22/data

1.2 配置systemd啟動

cd /etc/systemd/system

cp mysqld.service master20.service
cp mysqld.service slave21.service
cp mysqld.service slave22.service

vim master20.service
ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/master20/my.cnf
vim slave21.service
ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/slave21/my.cnf
vim slave22.service
ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/slave22/my.cnf
chown -R mysql.mysql /data/*

systemctl start master20.service
systemctl start slave21.service
systemctl start slave22.service

 

1.3 補充:

以上步驟詳情可參考本人另一篇數據庫安裝: https://www.cnblogs.com/quzq/p/12904956.html

 

2. GTID復制

2.1 GTID介紹

GTID(Global Transaction ID)是對於一個已提交事務的唯一編號,並且是一個全局(主從復制)唯一的編號。
它的官方定義如下:
GTID = source_id :transaction_id
7E11FA47-31CA-19E1-9E56-C43AA21293967:29    # gtid編號的格式
什么是sever_uuid,和Server-id 區別?
核心特性: 全局唯一,具備冪等性

2.2 GTID核心參數

gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1

gtid-mode=on                        --啟用gtid類型,否則就是普通的復制架構
enforce-gtid-consistency=true       --強制GTID的一致性
log-slave-updates=1                 --強制slave記錄二進制日志

2.3 構建主從

master:3320
slave:3321,3322

3320:
grant replication slave  on *.* to repl@'%' identified by '123';

21\22:
change master to 
master_host='10.0.0.51',
MASTER_PORT=3320, master_user
='repl', master_password='123' , MASTER_AUTO_POSITION=1;
# 該參數會自動讀取relaylog中的最后一個gtid號,來向主庫申請日志, 如未從relaylog中讀取到,則從第一個gtid開始同步
# 該參數值代表從哪個gtid號開始請求, 如從庫是使用xbk物理恢復的,則此處值需要是恢復文件中最后一個gtid號+1 start slave;

2.4 關於gtid主從的備忘

1. 主庫開啟gtid后, 導出的備份文件如果用於從庫的恢復, 則在導出時一定不能加 --set-gtid-purged=OFF 參數
  該參數會忽略gtid號, 導致恢復的從庫沒有gtid號記錄.
2. 不使用以上參數導出的備份, 在恢復從庫后, 從庫中也會記錄有gtid號
3. 參考: https://www.cnblogs.com/quzq/p/12885971.html

2.5 GTID 復制和普通復制的區別

CHANGE MASTER TO
MASTER_HOST='10.0.0.51', MASTER_USER='repl', MASTER_PASSWORD='123', MASTER_PORT=3307, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=444, MASTER_CONNECT_RETRY=10; change master to master_host='10.0.0.51', master_user='repl', master_password='123' , MASTER_AUTO_POSITION=1; start slave;

0)在主從復制環境中,主庫發生過的事務,在全局都是由唯一GTID記錄的,更方便Failover (1)額外功能參數(3個) (2)change master to 的時候不再需要binlog 文件名和position號,MASTER_AUTO_POSITION=1; (3)在復制過程中,從庫不再依賴master.info文件,而是直接讀取最后一個relaylog的 GTID號 (4) mysqldump備份時,默認會將備份中包含的事務操作,以以下方式 SET @@GLOBAL.GTID_PURGED='8c49d7ec-7e78-11e8-9638-000c29ca725d:1'; 告訴從庫,我的備份中已經有以上事務,你就不用運行了,直接從下一個GTID開始請求binlog就行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM