配置MySQL GTID 主從復(fù)制

GTID是一個(gè)基于原始mysql服務(wù)器生成的一個(gè)已經(jīng)被成功執(zhí)行的全局事務(wù)ID,它由服務(wù)器ID以及事務(wù)ID組合而成。這個(gè)全局事務(wù)ID不僅僅在原始服務(wù)器器上唯一,在所有存在主從關(guān)系 的mysql服務(wù)器上也是唯一的。正是因?yàn)檫@樣一個(gè)特性使得mysql的主從復(fù)制變得更加簡(jiǎn)單,以及數(shù)據(jù)庫(kù)一致性更可靠。本文主要描述了快速配置一個(gè)基于GTID的主從復(fù)制架構(gòu),供大家參考。

一、GTID的概念

1、全局事務(wù)標(biāo)識(shí):global?transaction?identifiers。2、GTID是一個(gè)事務(wù)一一對(duì)應(yīng),并且全局唯一ID。3、一個(gè)GTID在一個(gè)服務(wù)器上只執(zhí)行一次,  避免重復(fù)執(zhí)行導(dǎo)致數(shù)據(jù)混亂或者主從不一致。  4、GTID用來代替?zhèn)鹘y(tǒng)復(fù)制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS開啟復(fù)制。而是使用MASTER_AUTO_POSTION=1的方式開始復(fù)制。  5、MySQL-5.6.5開始支持的,MySQL-5.6.10后開始完善。  6、在傳統(tǒng)的slave端,binlog是不用開啟的,但是在GTID中slave端的binlog是必須開啟的,目的是記錄執(zhí)行過的GTID(強(qiáng)制)。

二、GTID的組成

GTID?=?source_id:transaction_idsource_id,用于鑒別原服務(wù)器,即mysql服務(wù)器唯一的的server_uuid,由于GTID會(huì)傳遞到slave,所以也可以理解為源ID。  transaction_id,為當(dāng)前服務(wù)器上已提交事務(wù)的一個(gè)序列號(hào),通常從1開始自增長(zhǎng)的序列,一個(gè)數(shù)值對(duì)應(yīng)一個(gè)事務(wù)。????????  示例:??????????  3E11FA47-71CA-11E1-9E33-C80AA9429562:23前面的一串為服務(wù)器的server_uuid,即3E11FA47-71CA-11E1-9E33-C80AA9429562,后面的23為transaction_id

三、GTID的優(yōu)勢(shì)

1、更簡(jiǎn)單的實(shí)現(xiàn)failover,不用以前那樣在需要找log_file和log_pos。  2、更簡(jiǎn)單的搭建主從復(fù)制。  3、比傳統(tǒng)的復(fù)制更加安全。  4、GTID是連續(xù)的沒有空洞的,保證數(shù)據(jù)的一致性,零丟失。

四、GTID的工作原理

1、當(dāng)一個(gè)事務(wù)在主庫(kù)端執(zhí)行并提交時(shí),產(chǎn)生GTID,一同記錄到binlog日志中。2、binlog傳輸?shù)絪lave,并存儲(chǔ)到slave的relaylog后,讀取這個(gè)GTID的這個(gè)值設(shè)置gtid_next變量,  即告訴Slave,下一個(gè)要執(zhí)行的GTID值。3、sql線程從relay?log中獲取GTID,然后對(duì)比slave端的binlog是否有該GTID。4、如果有記錄,說明該GTID的事務(wù)已經(jīng)執(zhí)行,slave會(huì)忽略。  5、如果沒有記錄,slave就會(huì)執(zhí)行該GTID事務(wù),并記錄該GTID到自身的binlog,  ???在讀取執(zhí)行事務(wù)前會(huì)先檢查其他session持有該GTID,確保不被重復(fù)執(zhí)行。6、在解析過程中會(huì)判斷是否有主鍵,如果沒有就用二級(jí)索引,如果沒有就用全部掃描。

五、配置GTID

對(duì)于GTID的配置,主要修改配置文件中與GTID特性相關(guān)的幾個(gè)重要參數(shù)(建議使用mysql-5.6.5以上版本),如下:1、主:  [mysqld]#GTID:server_id=135????????????????#服務(wù)器idgtid_mode=on?????????????????#開啟gtid模式enforce_gtid_consistency=on??  #強(qiáng)制gtid一致性,開啟后對(duì)于特定create?table不被支持#binloglog_bin=master-binloglog-slave-updates=1????binlog_format=row????????????  #強(qiáng)烈建議,其他格式可能造成數(shù)據(jù)不一致#relay?logskip_slave_start=1????????????2、從:  [mysqld]#GTID:gtid_mode=onenforce_gtid_consistency=onserver_id=143#binloglog-bin=slave-binloglog-slave-updates=1binlog_format=row??????  #強(qiáng)烈建議,其他格式可能造成數(shù)據(jù)不一致#relay?logskip_slave_start=1

六、配置基于GTID的復(fù)制

1、新配置的mysql服務(wù)器  對(duì)于新配置的mysql服務(wù)器,按本文第五點(diǎn)描述配置參數(shù)文件后,在slave端執(zhí)行以下操作  (root@localhost)?[(none)]>?CHANGE?MASTER?TO??  ????->??MASTER_HOST='192.168.1.135',????  ????->??MASTER_USER='repl',????  ????->??MASTER_PASSWORD='xxx',????  ????->??MASTER_PORT=3306,????  ????->??MASTER_AUTO_POSITION?=?1;Query?OK,?0?rows?affected,?2?warnings?(0.01?sec)    (root@localhost)?[(none)]>?start?slave;  Query?OK,?0?rows?affected?(0.01?sec)    (root@localhost)?[(none)]>?show?slave?status?G?###可以看到復(fù)制工作已經(jīng)開始且正常  ***************************?1.?row?***************************  ???????????????Slave_IO_State:?Waiting?for?master?to?send?event  ??????????????????Master_Host:?192.168.1.135  ??????????????????Master_User:?repl  ??????????????????Master_Port:?3306  ????????????????Connect_Retry:?60  ??????????????Master_Log_File:?master-binlog.000001  ??????????Read_Master_Log_Pos:?151  ???????????????Relay_Log_File:?slave-relay-log.000002  ????????????????Relay_Log_Pos:?369  ????????Relay_Master_Log_File:?master-binlog.000001  ?????????????Slave_IO_Running:?Yes  ????????????Slave_SQL_Running:?Yes    2、已運(yùn)行經(jīng)典復(fù)制mysql服務(wù)器轉(zhuǎn)向GTID復(fù)制  a、按本文第五點(diǎn)描述配置參數(shù)文件;  b、所有服務(wù)器設(shè)置global.read_only參數(shù),等待主從服務(wù)器同步完畢;  ????????mysql>?SET?@@global.read_only?=?ON;?  c、依次重啟主從服務(wù)器;  d、使用change?master?更新主從配置;  ????????mysql>?CHANGE?MASTER?TO  ????????>?MASTER_HOST?=?host,  ????????>?MASTER_PORT?=?port,  ????????>?MASTER_USER?=?user,  ????????>?MASTER_PASSWORD?=?password,  ????????>?MASTER_AUTO_POSITION?=?1;  e、從庫(kù)開啟復(fù)制  ????????mysql>?START?SLAVE;  f、驗(yàn)證主從復(fù)制

GTID是一個(gè)基于原始mysql服務(wù)器生成的一個(gè)已經(jīng)被成功執(zhí)行的全局事務(wù)ID,它由服務(wù)器ID以及事務(wù)ID組合而成。這個(gè)全局事務(wù)ID不僅僅在原始服務(wù)器器上唯一,在所有存在主從關(guān)系 的mysql服務(wù)器上也是唯一的。正是因?yàn)檫@樣一個(gè)特性使得mysql的主從復(fù)制變得更加簡(jiǎn)單,以及數(shù)據(jù)庫(kù)一致性更可靠。本文主要描述了快速配置一個(gè)基于GTID的主從復(fù)制架構(gòu),供大家參考。

一、GTID的概念

1、全局事務(wù)標(biāo)識(shí):global?transaction?identifiers。2、GTID是一個(gè)事務(wù)一一對(duì)應(yīng),并且全局唯一ID。3、一個(gè)GTID在一個(gè)服務(wù)器上只執(zhí)行一次,避免重復(fù)執(zhí)行導(dǎo)致數(shù)據(jù)混亂或者主從不一致。  4、GTID用來代替?zhèn)鹘y(tǒng)復(fù)制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS開啟復(fù)制。而是使用MASTER_AUTO_POSTION=1的方式開始復(fù)制。  5、MySQL-5.6.5開始支持的,MySQL-5.6.10后開始完善。6、在傳統(tǒng)的slave端,binlog是不用開啟的,但是在GTID中slave端的binlog是必須開啟的,目的是記錄執(zhí)行過的GTID(強(qiáng)制)。

二、GTID的組成

GTID?=?source_id:transaction_idsource_id,用于鑒別原服務(wù)器,即mysql服務(wù)器唯一的的server_uuid,由于GTID會(huì)傳遞到slave,所以也可以理解為源ID。  transaction_id,為當(dāng)前服務(wù)器上已提交事務(wù)的一個(gè)序列號(hào),通常從1開始自增長(zhǎng)的序列,一個(gè)數(shù)值對(duì)應(yīng)一個(gè)事務(wù)。????????  示例:??????????  3E11FA47-71CA-11E1-9E33-C80AA9429562:23前面的一串為服務(wù)器的server_uuid,即3E11FA47-71CA-11E1-9E33-C80AA9429562,后面的23為transaction_id

三、GTID的優(yōu)勢(shì)

1、更簡(jiǎn)單的實(shí)現(xiàn)failover,不用以前那樣在需要找log_file和log_pos。  2、更簡(jiǎn)單的搭建主從復(fù)制。  3、比傳統(tǒng)的復(fù)制更加安全。  4、GTID是連續(xù)的沒有空洞的,保證數(shù)據(jù)的一致性,零丟失。

四、GTID的工作原理

1、當(dāng)一個(gè)事務(wù)在主庫(kù)端執(zhí)行并提交時(shí),產(chǎn)生GTID,一同記錄到binlog日志中。2、binlog傳輸?shù)絪lave,并存儲(chǔ)到slave的relaylog后,讀取這個(gè)GTID的這個(gè)值設(shè)置gtid_next變量,  即告訴Slave,下一個(gè)要執(zhí)行的GTID值。3、sql線程從relay?log中獲取GTID,然后對(duì)比slave端的binlog是否有該GTID。4、如果有記錄,說明該GTID的事務(wù)已經(jīng)執(zhí)行,slave會(huì)忽略。  5、如果沒有記錄,slave就會(huì)執(zhí)行該GTID事務(wù),并記錄該GTID到自身的binlog,  ???在讀取執(zhí)行事務(wù)前會(huì)先檢查其他session持有該GTID,確保不被重復(fù)執(zhí)行。6、在解析過程中會(huì)判斷是否有主鍵,如果沒有就用二級(jí)索引,如果沒有就用全部掃描。

五、配置GTID

對(duì)于GTID的配置,主要修改配置文件中與GTID特性相關(guān)的幾個(gè)重要參數(shù)(建議使用mysql-5.6.5以上版本),如下:1、主:  [mysqld]#GTID:server_id=135????????????????#服務(wù)器idgtid_mode=on?????????????????#開啟gtid模式enforce_gtid_consistency=on??  #強(qiáng)制gtid一致性,開啟后對(duì)于特定create?table不被支持#binloglog_bin=master-binloglog-slave-updates=1????binlog_format=row????????????  #強(qiáng)烈建議,其他格式可能造成數(shù)據(jù)不一致#relay?logskip_slave_start=1????????????2、從:  [mysqld]#GTID:gtid_mode=onenforce_gtid_consistency=onserver_id=143#binloglog-bin=slave-binloglog-slave-updates=1binlog_format=row??????  #強(qiáng)烈建議,其他格式可能造成數(shù)據(jù)不一致#relay?logskip_slave_start=1

六、配置基于GTID的復(fù)制

1、新配置的mysql服務(wù)器  對(duì)于新配置的mysql服務(wù)器,按本文第五點(diǎn)描述配置參數(shù)文件后,在slave端執(zhí)行以下操作  (root@localhost)?[(none)]>?CHANGE?MASTER?TO??  ????->??MASTER_HOST='192.168.1.135',????  ????->??MASTER_USER='repl',????  ????->??MASTER_PASSWORD='xxx',????  ????->??MASTER_PORT=3306,????  ????->??MASTER_AUTO_POSITION?=?1;Query?OK,?0?rows?affected,?2?warnings?(0.01?sec)    (root@localhost)?[(none)]>?start?slave;  Query?OK,?0?rows?affected?(0.01?sec)    (root@localhost)?[(none)]>?show?slave?status?G?###可以看到復(fù)制工作已經(jīng)開始且正常  ***************************?1.?row?***************************  ???????????????Slave_IO_State:?Waiting?for?master?to?send?event  ??????????????????Master_Host:?192.168.1.135  ??????????????????Master_User:?repl  ??????????????????Master_Port:?3306  ????????????????Connect_Retry:?60  ??????????????Master_Log_File:?master-binlog.000001  ??????????Read_Master_Log_Pos:?151  ???????????????Relay_Log_File:?slave-relay-log.000002  ????????????????Relay_Log_Pos:?369  ????????Relay_Master_Log_File:?master-binlog.000001  ?????????????Slave_IO_Running:?Yes  ????????????Slave_SQL_Running:?Yes    2、已運(yùn)行經(jīng)典復(fù)制mysql服務(wù)器轉(zhuǎn)向GTID復(fù)制  a、按本文第五點(diǎn)描述配置參數(shù)文件;  b、所有服務(wù)器設(shè)置global.read_only參數(shù),等待主從服務(wù)器同步完畢;  ????????mysql>?SET?@@global.read_only?=?ON;?  c、依次重啟主從服務(wù)器;  d、使用change?master?更新主從配置;  ????????mysql>?CHANGE?MASTER?TO  ????????>?MASTER_HOST?=?host,  ????????>?MASTER_PORT?=?port,  ????????>?MASTER_USER?=?user,  ????????>?MASTER_PASSWORD?=?password,  ????????>?MASTER_AUTO_POSITION?=?1;  e、從庫(kù)開啟復(fù)制  ????????mysql>?START?SLAVE;  f、驗(yàn)證主從復(fù)制

以上就是配置MySQL GTID 主從復(fù)制的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.php.cn)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享