溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL入門--MySQL復(fù)制技術(shù)之部署中遇到的問題

發(fā)布時(shí)間:2020-08-10 20:03:03 來(lái)源:ITPUB博客 閱讀:183 作者:panpong 欄目:MySQL數(shù)據(jù)庫(kù)

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

向AI問一下細(xì)節(jié)

免責(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)容。

AI