GTID主從簡介 GTID是基於mysql生成的事務ID,由伺服器ID和事務ID組成。 這個ID在主庫及從庫上都是唯一的。 這個特性可以讓mysql的主從複製變得更加簡單,一致性更加可靠。 GTID優勢 1. 更簡單的實現同步,不需要再找log_file和log_pos 2. GTID是連續的,沒有 ...
GTID主從簡介
GTID是基於mysql生成的事務ID,由伺服器ID和事務ID組成。
這個ID在主庫及從庫上都是唯一的。
這個特性可以讓mysql的主從複製變得更加簡單,一致性更加可靠。
GTID優勢
- 更簡單的實現同步,不需要再找log_file和log_pos
- GTID是連續的,沒有中斷,數據一致性高,不會發生丟失
- 搭建主從更簡單
- 比傳動主從更安全
GTID劣勢
- 不支持主從關係中存在非事務資料庫
- 不支持CREATE TABLE … SELECT語句
- 不支持針對臨時表的操作:
- 開啟 GTID 後不能再使用原來的傳統的複製方式;
配置GTID主從
環境:
- 主資料庫
- CentOS7/RedHat7
- IP-192.168.233.129
- Hostname-Lynk
- 有數據
- 副資料庫
- CentOS7/RedHat7
- IP-192.168.233.247
- Hostname-Hyrule
- 無數據
給從庫授權
#以下操作在主庫進行
mysql> CREATE USER 'repl'@'192.168.233.247' IDENTIFIED BY 'repl123';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.233.247';
Query OK, 0 rows affected (0.00 sec)
確保數據一致
#新開一個終端,對主庫鎖表,防止配置期間有其他人寫入,鎖表期間不能關閉終端或退出mysql互動式命令行
mysql> FLUSH TABLES WITH READ LOCK;
#全備主庫
[root@lynk ~]# mysqldump -uroot -plynk123~ --all-databases > /opt/all-201902271749.sql
#複製備份文件到從庫
[root@lynk ~]# scp /opt/all-201902271749.sql [email protected]:/opt/
#在從庫恢復主庫的備份
[root@Hyrule ~]# mysql -uroot -plynk123~ < /opt/all-201902271749.sql
配置主庫
[root@lynk ~]# vim /etc/my.cnf
#添加以下內容
#資料庫伺服器唯一標識符,主庫的server-id值必須比從庫的大
server_id=1
gtid_mode=on
#強制gtid一致性,開啟後對於特定create table不被支持
enforce_gtid_consistency=on
log_bin=master-binlog
log-slave-updates=1
binlog_format=row
skip_slave_start=1
#結束主庫鎖表狀態,只要退出另一個終端中mysql互動式命令行就行了
mysql> quit
#重啟主庫
[root@lynk ~]# systemctl restart mysqld
配置從庫
[root@Hyrule ~]# vim /etc/my.cnf
#添加以下內容
gtid_mode=on
enforce_gtid_consistency=on
server_id=2
log-bin=slave-binlog
log-slave-updates=1
binlog_format=row
skip_slave_start=1
#重啟從庫
[root@Hyrule ~]# systemctl restart mysqld
#配置主從複製
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.233.129',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='repl123',
-> MASTER_PORT=3306,
-> MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status \G
#確保以下兩項是Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes