mysql replication(主從複製)(三)GTIDs

一、理論部分mysql

1.一、什麼是GTIDs?
sql

1)GTIDs(Global transaction identifiers)是mysql5.65新加入的一項技術數據庫

2)檔使用GITDs時,不管是在Master上提交事務仍是在Slave上應用,每個事務均可以被識別並跟蹤。vim

3)添加新的Slave或者當發生故障須要將Master身份遷移到Slave上時,都無需考慮那一個二進制日誌以及哪個position。這樣極大簡化相關操做。bash

4)GTIDs是徹底基於事務的,所以,不支持MYISAM存儲引擎。服務器


這是由MyISAM 和 InnoDB 區別形成:ide

InnoDB和MyISAM是許多人在使用MySQL時最經常使用的兩個表類型,這兩個表類型各有優劣,視具體應用而定。性能

基本的差異爲:MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,可是不提供事務支持,而InnoDB提供事務支持已經外部鍵等高級數據庫功能。測試

1.二、GTID的組成:網站

1)GTID由source_id和transaction_id兩部分組成。

2)source_id來自於server_uuid,能夠在auto.cnf中查看。

3)transaction_id是一個序列數字,從小到大自動生成。

例子:

fc6e129e-a2b4-11e3-a7d8-000c297d497f:23

":"前是server-uuid,後是transaction_id

查看server-uuid:

cat /var/lib/mysql/auto.cnf

1.三、GTIDs的工做原理

1)Slave發送已經執行過的GTID的範圍給Master。

2)Master根據收到的GTID範圍,補充發送每個丟失的事物給Slave。

wKiom1YDU1_iMiHBAAB63oz4okk358.jpg

如上圖所示:

你想從Trx4開始複製,但Trx2在數據庫中因某種緣由丟失:

Transaction_id處理方式:

直接從Trx4開始同步,Trx2不再被執行。

GTIDs的處理方式:

Trx2被補充性複製,從Trx4開始日後複製。

1.四、使用GTIDs的限制條件

1)不支持MYSAM。這可能致使多個GTID分配給同一個實務。

2)create table ...select(子查詢建立表)語句不支持。

3)create/drop temporary teble語句不支持。

4)必須使用enforce-gtid-consistency參數。

5)slq-slave-skip-counter不支持。

6)在MySQL5.6.9以後的版本導入使用mysqldump製做的備份時,須要保證二進制日誌不包含GITDs。

7)在MySQL5.6.7以前,使用mysql_upgrade命令會出現問題。

1.五、舊MySQL版本對配置GTIDs的要求

配置基於GTIDs的Replication

生產環境中,大多數狀況下使用的MySQL5.6基本上都是MySQL5.5或更低版本升級而來。這就意味着以前的MySQL Replication的方案是基於傳統的方式。因此,咱們須要利用已有的環境升級至基於GITDs的Replication。

二、實驗部分

2.一、實驗的前提


如下實驗以「mysql replication(主從複製)(一)MS模式」爲基礎,若是你作以下測試,請先參閱以下連接:

http://cmdschool.blog.51cto.com/2420395/1696474

如下操做目的是將mysql升級到5.6版本。

In Master&Slave

2.1.一、step1

查看未升級前的版本:

mysql -V

wKioL1YD55nTUZWlAAB3aMOe2Pw617.jpg

2.1.二、step2

安裝mysql的yum源:

yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

若是以上源不適用請自行到官方網站下載:

http://dev.mysql.com/downloads/repo/

升級mysql相關部件:

yum -y update mysql mysql-devel mysql-server

2.1.三、step3

查看升級後的版本:

mysql -V

wKioL1YD7RSRE_BNAABD8DWgGK0543.jpg

2.1.四、step4

嘗試啓動服務:

/etc/init.d/mysqld start

有可能服務不能啓用:

wKioL1YD5aPA2BolAABC1yDk_ec013.jpg

查看日誌中的報錯:

tail -n 200 /var/log/mysqld.log

wKiom1YD5dShW-KRAAbEBLsQeOw991.jpg

cd /var/lib/mysql/
rm ibdata1 ib_logfile0 ib_logfile1
/etc/init.d/mysqld start

wKioL1YD5oiBlg2QAAAwJRTQNq4986.jpg

「/var/lib/mysql/」請根據本身數據庫實際存放路徑調整。  

2.1.五、step5

更新自帶的數據庫

mysql_upgrade -u root -p

wKiom1YQomyQVhWlAAHQQiwOXpA645.jpg

2.二、實驗的步驟

2.2.一、step1

In Master&Slave

服務器都設置爲read-only

mysql> set @@global.read_only=on;

wKioL1YErO7yX5s-AABdZzIViTQ756.jpg

2.2.二、step2

In Master&Slave

中止服務:

/etc/init.d/mysqld stop

wKioL1YEr3ejT3GyAAA0l4r7pAA196.jpg

2.2.三、step3

開啓GTIDS

In Master&Slave

兩臺機器都包含如下配置參數,用vim編輯他們的/etc/my.cnf

[mysqld]
gtid-mode=on
enforce-gtid-consistency 
log-slave-updates
log-bin

wKioL1YErbWiRfq-AAIRYyHwkDc679.jpg

In Slave

vim編輯Slave的/etc/my.cnf

skip-slave-start

wKiom1YEroiQiMU0AAGsR5oYpKg450.jpg

注意:

1)「skip-slave-start」參數目的是啓服務時「Slave_IO_Running」&「Slave_SQL_Running」爲「NO」狀態,你須要在作完實驗後註解掉。

2)「binlog-format=row」若是Master端開啓Slave端也要開啓,不然Slave狀態會異常。

2.2.四、step4

In Master&Slave

/etc/init.d/mysqld start

wKioL1YEr_iB0TgQAAA5hZintLE890.jpg

In Slave

從新配置Slave的change master

mysql> change master to
    -> master_host='10.168.0.103',
    -> master_port=3306,
    -> master_user='repl',
    -> master_password='repl',
    -> master_auto_position=1;
mysql> start slave;

wKiom1YEtBrDhCOWAADqa4EGPoY846.jpg

檢查:

show slave status\G

wKiom1YE8WCANP_DAAJK0aOUEiQ209.jpg

wKioL1YE8RLCFPbwAAJlt7t7kh8579.jpg

注意查看:auto_position的參數狀態。

相關文章
相關標籤/搜索