MYSQL 基於GTID的復制


1.概述

從MYSQL5.6 開始,mysql開始支持GTID復制。

基於日志點復制的缺點:

從那個二進制日志的偏移量進行增量同步,如果指定錯誤會造成遺漏或者重復,導致數據不一致。

 

基於GTID復制:

1.從服務器會告訴主服務器已執行的事務的GTID值。

2.主庫會告訴從哪些GTID事務沒有被執行。

同一個事務在指定的從庫執行一次。

 

什么是GTID

GTID即全局事務ID,器保證為每一個在主上提交的事務在復制集群中可以生成一個唯一的ID.

GTID=source_id:transaction_id

source_id:是主庫的server UUID,在數據目錄的auto.cnf 文件中。

transaction_id: 從1開始的一個序列。

 

2.基於GTID復制的步驟

1.在主DB服務器上建立復制帳號。

在主庫執行命令

create user repl@'192.168.31.%' identified by 'repl';

grant all privileges  on *.* to repl@'192.168.31.%' identified by 'repl';

 

2.配置主數據庫服務器

修改 /etc/my.cnf

log_bin =on

server_id=1001

gtid-mode=on

enforce_gtid_consistency:強制事務一致性,保證事務的安全

注意如果使用了基於事務點日志配置下面兩種情況不能使用:

  1.create table 。。select

  2.在事務中使用create temporary table 建立臨時表,使用關聯更新事務表和非事務表。

 

3.配置從服務器。

 

server_id=1002

log_bin=on

gtid-mode=on

enforce-gtid-consistency

 

建議配置

read_only=on

保證從服務器數據安全性

master_info_repository=TABLE

relay_log_info_repository=TABLE

從服務器連接主服務器的信息和中繼日志存放咱 master_info,和relay_log中。

 

4.初始化從服務器數據。

 

從主庫導出數據

mysqldump --single-transaction --master-data=2 --all-databases --triggers --routines --events -uroot -p  >all.sql

 

可以使用 scp 命令將數據從主庫機器copy 到從庫:

scp all.sql root@192.168.31.101:/jsaas 

 

從庫導入數據

mysql -uroot -p  < all.sql

 

5.啟動基於GTID的復制

change master to master-host=’主服務IP’,

master_user=’repl’,

master_password=’password’,

master_auto_position=1

 

change master to MASTER_HOST='192.168.1.106',
MASTER_PORT=3308,
MASTER_USER='repl',
MASTER_PASSWORD='repl',
master_auto_position=1; 

可能報錯的情況:

 @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty

在命令行下執行命令:

reset master;

后重啟mysql 服務。

 

start slave;

show slave status \G;

 

 

 

在啟動slave時報錯。

ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

解決辦法:

reset slave;重置slave

再啟動 slave

start slave;

 

測試同步:

1.在主庫創建一張表,插入記錄。

2.在從庫查詢驗證是否正確,經驗證配置正確。

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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