mysql主從(GTID複製模式)

image.png

環境準備html

主數據庫:CentOS7    MySQL8.0    192.168.10.6    keepalivedmysql

從數據庫:CentOS7    MySQL8.0    192.168.10.7    keepalivedweb

GTID主從複製的配置思路:sql

image.png

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

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;

相關文章
相關標籤/搜索