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)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END