環境準備html
主數據庫:CentOS7 MySQL8.0 192.168.10.6 keepalivedmysql
從數據庫:CentOS7 MySQL8.0 192.168.10.7 keepalivedweb
GTID主從複製的配置思路:sql
第1步:同步服務器。 只有在不使用GTID的狀況下複製服務器時才須要執行此步驟。對於新服務器,請繼續執行步驟3. 經過發出如下命令,將服務器設置爲每一個服務器上的read_only系統變量爲 只讀 ON:shell
mysql> SET @@global.read_only = ON;數據庫
第2步:中止兩臺服務器。 以下所示, 使用mysqladmin中止每一個服務器,其中username是具備足夠權限關閉服務器的MySQL用戶的用戶名:vim
shell> mysqladmin -uusername -p shutdown服務器
第3步:啓用啓用了GTID的兩臺服務器。session
主數據庫配置:app
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
二、在主數據庫裏建立一個同步帳號並受權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;