您好,登錄后才能下訂單哦!
MySQL復(fù)制技術(shù)指部署中遇到的問題
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ù)來(lái)跳所有錯(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ù)來(lái)進(jìn)行處理。
MySQL 5.5.3版本開始,支持屬性提升特性,包括有損轉(zhuǎn)化和無(wú)損轉(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
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。