在MySQL數(shù)據(jù)庫中,提供了一種使數(shù)據(jù)在多個(gè)服務(wù)器下同步的技術(shù),叫做復(fù)制(Replication)。其中,MySQL支持的并行復(fù)制技術(shù),可以讓老版本的MySQL復(fù)制功能中的串行過程更快、更高效。但是,有些用戶可能會(huì)發(fā)現(xiàn),他們在使用并行復(fù)制時(shí)卻發(fā)現(xiàn)數(shù)據(jù)并沒有在多個(gè)服務(wù)器下同步。
[mysqld] log-bin=mysql-bin server_id=1 binlog_format=row binlog_row_image=full gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON slave_parallel_type=LOGICAL_CLOCK slave_parallel_workers=4
針對這種情況,一般需要檢查以下幾種情況:
首先,需要保證MySQL版本在5.7及以上,因?yàn)椴⑿袕?fù)制是從MySQL 5.7版本開始支持的新特性。
其次,要確保在MySQL主服務(wù)器配置文件中設(shè)置了log_bin參數(shù)。這個(gè)參數(shù)表示啟用二進(jìn)制日志記錄。同時(shí),還需要設(shè)置server_id參數(shù),為復(fù)制提供唯一的標(biāo)識(shí)符。
接下來,需要設(shè)置binlog_format的值為row。因?yàn)樾袕?fù)制比語句復(fù)制更加準(zhǔn)確,可以確保在主副本之間的更改得到精確地復(fù)制。
然后,還需要設(shè)置binlog_row_image參數(shù)。該參數(shù)提示MySQL想通過復(fù)制行似乎更多的行方式,以更少的日志量捕獲更多的修改。
此外,需要在MySQL的主服務(wù)器配置文件中開啟全局事務(wù)標(biāo)識(shí)(GTID),這樣可以防止重復(fù)復(fù)制和復(fù)制沖突。
最后,需要在主服務(wù)器中設(shè)置log_slave_updates參數(shù)為ON,表示將從服務(wù)器上的所有修改寫入二進(jìn)制日志。這樣就可以確保子服務(wù)器能夠復(fù)制向上游的更改。
以上設(shè)置完成后,在主服務(wù)器中設(shè)置slave_parallel_workers參數(shù),指定在副本服務(wù)器上運(yùn)行的復(fù)制線程數(shù)量。需要注意的是,slave_parallel_workers的值不能超過可用的CPU個(gè)數(shù),否則可能會(huì)導(dǎo)致服務(wù)器奔潰。
通過以上設(shè)置,就可以讓MySQL支持并行復(fù)制。但是,如果設(shè)置都正確而并行復(fù)制依然不生效,那么可能是其他原因?qū)е碌?,需要仔?xì)檢查。