溫馨提示×

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

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

MySQL數(shù)據(jù)如何實(shí)現(xiàn)遷移

發(fā)布時(shí)間:2020-05-28 17:12:38 來(lái)源:網(wǎng)絡(luò) 閱讀:363 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

下文給大家?guī)?lái)有關(guān)MySQL數(shù)據(jù)如何實(shí)現(xiàn)遷移內(nèi)容,相信大家一定看過(guò)類(lèi)似的文章。我們給大家?guī)?lái)的有何不同呢?一起來(lái)看看正文部分吧,相信看完MySQL數(shù)據(jù)如何實(shí)現(xiàn)遷移你一定會(huì)有所收獲。   

因?yàn)?a title="云服務(wù)器" target="_blank" href="http://www.kemok4.com/">云服務(wù)器遷移,目前一套硬件老化的MySQL主從云服務(wù)器都需要替換為新云服務(wù)器,總體評(píng)估了一下,在不改變版本的情況下,采用了較新的5.6子版本。就是如下圖所示的左邊和右邊。

  如果要做這個(gè)完整的切換,其實(shí)方式和思路都有很多,我選擇了一種來(lái)做。

  首先我低估了數(shù)據(jù)的情況,以為都是InnoDB表,于是從主庫(kù)使用--single-transaction導(dǎo)出表數(shù)據(jù),直接導(dǎo)入??雌饋?lái)沒(méi)有什么明顯的異常,但是啟動(dòng)slave,發(fā)現(xiàn)數(shù)據(jù)沖突。

2017-08-07 17:40:31 75211 [Warning] Slave: Duplicate entry '632107' for key 'PRIMARY' Error_code: 1062
2017-08-07 17:40:31 75211 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave S
QL thread with "SLAVE START". We stopped at log 'binlog.000019' position 934115248

 所以仔細(xì)審視數(shù)據(jù),發(fā)現(xiàn)原來(lái)里面有個(gè)數(shù)據(jù)庫(kù)里存在大量的MYISAM表。在這種情況系,備份MYISAM表數(shù)據(jù)就很可能出現(xiàn)問(wèn)題,因?yàn)?-single-transaction不會(huì)生效,要備份可以使用mysqlhotcopy等方式來(lái)做,我不喜歡MYISM表,而且這個(gè)人其實(shí)比較懶,不想這樣折騰,而且還對(duì)主庫(kù)造成一定的影響。所以我把目光瞄向了從庫(kù)。

   為了保證數(shù)據(jù)一致性,我完全可以先停掉slave,在有限的時(shí)間里導(dǎo)出數(shù)據(jù),這樣對(duì)于主庫(kù)來(lái)說(shuō)是透明的。

而需要注意的是使用mysqldump導(dǎo)出使用master-data的選項(xiàng)注定是有沖突的,所以我們完全可以不用master-data=2的選項(xiàng),而直接根據(jù)show slave status\G的結(jié)果來(lái)得到具體的偏移量。

# mysqldump --all-databases --master-data=2 > master.sql 
mysqldump: Error: Binlogging on server not active

新的主庫(kù),新的備庫(kù)都是按照這種方式來(lái)搭建,數(shù)據(jù)都來(lái)自舊的從庫(kù),這樣一來(lái),配置好服務(wù)的話,主庫(kù)會(huì)有3個(gè)binlogDump線程。

整個(gè)數(shù)據(jù)導(dǎo)入的過(guò)程中,可以根據(jù)processlist的數(shù)據(jù)看到處理MyISAM表還是比較耗時(shí),我就干等著幾個(gè)MyISAM大表的線程State從“Repair by sorting”和“Repair with keycache”切換。


這個(gè)時(shí)候我們就需要轉(zhuǎn)換一下,我們把新的從庫(kù)指向新的主庫(kù)即可,也就是實(shí)現(xiàn)級(jí)聯(lián)復(fù)制,要做這個(gè)工作,讓數(shù)據(jù)追平之后,保險(xiǎn)起見(jiàn)還是先停掉新主庫(kù)的slave線程,讓新的從庫(kù)重新從新的主庫(kù)來(lái)應(yīng)用日志(show master status\G) 這樣一來(lái),一切一連,一個(gè)級(jí)聯(lián)的環(huán)境就搞定了。

  后期后一些微調(diào),也可以很自然的完成。

而正式切換的時(shí)候,其實(shí)幾乎不需要做什么工作。新的主庫(kù)使用reset slave all即可。

  上面的這是一個(gè)很基礎(chǔ)的環(huán)境切換,如果能夠更深一步,把網(wǎng)絡(luò)層面的工作做好,其實(shí)這個(gè)切換就更加透明,完全可以做到無(wú)感知。

對(duì)于上文關(guān)于MySQL數(shù)據(jù)如何實(shí)現(xiàn)遷移,大家覺(jué)得是自己想要的嗎?如果想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。

向AI問(wèn)一下細(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