MySQL復(fù)制技術(shù)指部署中遇到的問題
崇信ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
A. 復(fù)制中斷
mysql主從復(fù)制,經(jīng)常會(huì)遇到錯(cuò)誤而導(dǎo)致slave端復(fù)制中斷,這個(gè)時(shí)候一般就需要人工干預(yù),跳過錯(cuò)誤才能繼續(xù)
跳過錯(cuò)誤有兩種方式:
1.跳過指定數(shù)量的事務(wù):
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳過一個(gè)事務(wù)
mysql>slave start
2.修改mysql的配置文件,通過slave_skip_errors參數(shù)來跳所有錯(cuò)誤或指定類型的錯(cuò)誤
vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146 #跳過指定error no類型的錯(cuò)誤
#slave-skip-errors=all #跳過所有錯(cuò)誤
B. 冷備份恢復(fù)的UUID問題
本次的slave是通過關(guān)閉master后,直接復(fù)制datadir目錄下的所有文件到slave服務(wù)器;然后啟動(dòng)slave,則會(huì)報(bào)錯(cuò)
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
分析問題:
上面報(bào)錯(cuò)說的是replication架構(gòu)中需要保證每個(gè)mysql實(shí)例UUID(UUID保存在datadir目錄下的auto.cnf文件中)唯一,就跟server_id一樣需要保證主從架構(gòu)中所有mysql實(shí)例server_id唯一。
之所以出現(xiàn)會(huì)出現(xiàn)這樣的問題,是因?yàn)槲业膹膸?kù)主機(jī)是克隆的主庫(kù)所在的主機(jī),所以auto.cnf文件中保存的UUID會(huì)出現(xiàn)重復(fù)(server_id已經(jīng)在my.cnf文件中修改過)
解決問題:
關(guān)于該問題的解決方案其實(shí)很簡(jiǎn)單,停掉備庫(kù)實(shí)例,刪除備庫(kù)的auto.cnf文件,啟動(dòng)備庫(kù)實(shí)例,此時(shí)備庫(kù)就會(huì)產(chǎn)生一個(gè)新的auto.cnf文件(產(chǎn)生新的UUID)。網(wǎng)上也有人說直接修改auto.cnf里面的uuid值,然后重啟從庫(kù)實(shí)例,該種方案沒有測(cè)試過。
C. Last_SQL_Errno: 1677
Last_SQL_Errno: 1677
Last_SQL_Error: Column 0 of table ‘a(chǎn)a.heartbeat’ cannot be converted from type ‘smallint’ to type ‘int(11)’
@Shane Bester建議slave_type_conversions=ALL_NON_LOSSY,能解決這個(gè)問題。以前沒有關(guān)注過這個(gè)參數(shù),我們線上環(huán)境都沒有設(shè)置。
slave_type_conversions:在slave上進(jìn)行字段類型轉(zhuǎn)化的,因?yàn)橹鱾渲g可能在某些情況下,有相同的表名,但字段多少、字段類型、字段順序不一樣,可能導(dǎo)致1677錯(cuò)誤,這時(shí)需要設(shè)置相應(yīng)參數(shù)來進(jìn)行處理。
MySQL 5.5.3版本開始,支持屬性提升特性,包括有損轉(zhuǎn)化和無損轉(zhuǎn)換
參數(shù)支持值:
1、ALL_LOSSY:可以將int型轉(zhuǎn)化成tinyint,存在截?cái)嗟那闆r,有損轉(zhuǎn)化
2、ALL_NON_LOSSY:不允許出現(xiàn)截?cái)嗲闆r,slave的類型范圍大于master方可轉(zhuǎn)化。設(shè)置這個(gè)參數(shù)后,如果存在截?cái)嗲闆r,slave會(huì)報(bào)錯(cuò)
3、以后兩個(gè)參數(shù)都設(shè)置,就存在截?cái)嗟那闆r
4、未設(shè)置,主備之間必須一致
在slave上類型轉(zhuǎn)化需要注意:
Whether you use statement-based or row-based replication, the slave’s copy of the table cannot contain more columns than the master’s copy if you wish to employ attribute promotion.
參考:
http://dev.mysql.com/doc/refman/5.5/en/replication-features-differing-tables.html#replication-features-attribute-promotion
在一臺(tái)主機(jī)上增加一個(gè)slave,啟動(dòng)的時(shí)候報(bào)
[ERROR] Slave SQL: Slave failed to initialize relay
log info structure from the repository, Error_code: 1872
原因可能是:1、my.cnf沒指定relay_log,2、沒有reset slave