mysql主從(GTID複製模式)

image.png

環境準備

主數據庫:CentOS7    MySQL8.0    192.168.10.6    keepalived

從數據庫:CentOS7    MySQL8.0    192.168.10.7    keepalived

GTID主從複製的配置思路:

image.png

第1步:同步服務器。  只有在不使用GTID的情況下複製服務器時才需要執行此步驟。對於新服務器,請繼續執行步驟3. 通過發出以下命令,將服務器設置爲每個服務器上read_only系統變量爲 只讀 ON

mysql> SET @@global.read_only = ON;

第2步:停止兩臺服務器。 如下所示, 使用mysqladmin停止每個服務器,其中username是具有足夠權限關閉服務器的MySQL用戶的用戶名:

shell> mysqladmin -uusername -p shutdown

第3步:啓用啓用了GTID的兩臺服務器。

主數據庫配置:

vim /etc/my.cnf

server-id=10

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLE

sync-master-info=1

slave-parallel-workers=2

binlog-checksum =CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log-events=1

slave_parallel_type=logical_clock

log-bin=mysql-bin.log

binlog_format=row

relay-log=relay-log.log

skip_slave_start=1

#report-port=3306

#report-host=192.168.10.9

注:有了skip_slave_start,除非使用START SLAVE命令,否則從服務器不會開始複製。

注:設置log_slave_updates,讓從服務器更新記錄日誌,有助於在必要時把從切換成主。

注:在 MySQL 5.6 版本時,基於 GTID 的複製中 log-slave-updates 選項是必須的。但是其增大了從服務器的IO負載, 而在 MySQL 5.7 中該選項已經不是必須項。

重啓服務

systemctl restart mysqld

2、在主數據庫裏創建一個同步賬號並授權slave權限

1)每個從數據庫會使用一個MySQL賬號來連接主數據庫,所以我們要在主數據庫裏創建一個賬號,並且該賬號要授予 REPLICATION SLAVE 權限,你可以爲每個從數據庫分別創建賬號,當然也可以用同一個!

2)你可以用原來的賬號不一定要新創賬號,但你應該注意,這個賬號和密碼會被明文存放在master.info文件中,因此建議單獨創一個只擁有相關權限的賬號,以減少對其它賬號的危害!

3)創建新賬號使用“CREATE USER”,給賬號授權使用“GRANT”命令,如果你僅僅爲了主從複製創建賬號,只需要授予REPLICATION SLAVE權限。

4)下面來創建一個賬號,賬號名:test,密碼:Test@123,只允許192.168.1.的IP段登錄,如下:

mysql> create user 'test'@'192.168.10.%' identified by 'Test@123';

mysql> grant replication slave on *.* to 'test'@'192.168.10.%';

mysql> flush privileges;

5)如果開啓防火牆,可能要配置下端口,如下:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

從數據庫配置:

vim /etc/my.cnf

server-id=20

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLE

sync-master-info=1

slave-parallel-workers=2

binlog-checksum =CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log-events=1

relay-log=relay-log.log

log-bin=mysql-bin.log

binlog_format=row

skip_slave_start=1

#report-port=3306

#report-host=192.168.10.9

重啓服務

systemctl restart mysqld

第4步:配置從站使用基於GTID的自動定位。  告訴從屬使用基於GTID事務的主數據作爲複製數據源,並使用基於GTID的自動定位而不是基於文件的定位。

mysql> CHANGE MASTER TO

MASTER_HOST = 'host', 

MASTER_PORT = port, 

MASTER_USER = 'user', 

MASTER_PASSWORD = 'password', 

MASTER_AUTO_POSITION = 1;

第5步:採取新的備份。啓用GTID之前創建的現有備份現在不能再用於這些服務器,因爲您已啓用GTID。在這一點上做一個新的備份,這樣你就不會沒有可用的備份。

第6步:啓動從站並禁用只讀模式。  像這樣啓動slave:

mysql> START SLAVE;

查看從服務器狀態

mysql> show slave status\G;

只有在步驟1中將服務器配置爲只讀時,才需要執行以下步驟。要允許服務器再次開始接受更新,請發出以下語句:

mysql> SET @@global.read_only = OFF;

重要參數說明:

Retrieved_Gtid_Set: d1fabc3d-4ac8-11e8-9d05-000c292bff01:12-20

Executed_Gtid_Set: d1fabc3d-4ac8-11e8-9d05-000c292bff01:1-20

Retrieved_Gtid_Set:表示接收到的事物

Executed_Gtid_Set:表示已經執行完的事物

當主庫修改後,從庫同步報錯的問題?

MySQL從庫在應用日誌的時候報出了錯誤。從庫啓用過了並行複製。

Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'd1fabc3d-4ac8-11e8-9d05-000c292bff01:12' at master log mysql-bin.000007, end_log_pos 1084. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

修復方式和常規的略有一些差別

stop slave;

set @@session.gtid_next='d1fabc3d-4ac8-11e8-9d05-000c292bff01:12';

begin;

commit;

set @@session.gtid_next='automatic';

start slave;






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章