由于業(yè)務(wù)需求,需要變更表的字符集(例如從gbk變更為utf8mb4),如果直接使用ALTER命令修改字符集會(huì)鎖表,當(dāng)數(shù)據(jù)表過(guò)大時(shí),對(duì)業(yè)務(wù)的影響較大。
本文介紹的操作方法需要先在目標(biāo)實(shí)例中創(chuàng)建表結(jié)構(gòu)信息(新字符集),再通過(guò)DTS將源實(shí)例的數(shù)據(jù)遷移至目標(biāo)實(shí)例,同時(shí)可建立簡(jiǎn)易回滾方案或雙寫(xiě)方案,平滑地完成RDS MySQL字符集的變更。
注意事項(xiàng)
- 在執(zhí)行變更字符集之前,請(qǐng)對(duì)業(yè)務(wù)和SQL進(jìn)行充分的兼容性測(cè)試和功能驗(yàn)證,確認(rèn)正常后再執(zhí)行本操作。
- DTS在執(zhí)行全量數(shù)據(jù)遷移時(shí)將占用源實(shí)例和目標(biāo)實(shí)例一定的讀寫(xiě)資源,可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的負(fù)載上升。因此您需要在執(zhí)行數(shù)據(jù)遷移前評(píng)估源實(shí)例和目標(biāo)實(shí)例的性能,同時(shí)建議您在業(yè)務(wù)低峰期執(zhí)行數(shù)據(jù)遷移。
- 如果源實(shí)例的待遷移對(duì)象沒(méi)有主鍵或唯一約束,且所有字段沒(méi)有唯一性,可能會(huì)導(dǎo)致目標(biāo)實(shí)例中出現(xiàn)重復(fù)數(shù)據(jù)。
步驟一 將源實(shí)例中表的結(jié)構(gòu)導(dǎo)入至新實(shí)例中
本示例中通過(guò)DMS登錄的實(shí)例的管控模式均為自由操作。
- 導(dǎo)出源實(shí)例中需要變更字符集的表的結(jié)構(gòu)腳本。
- 解壓下載的文件,然后修改表結(jié)構(gòu)腳本,調(diào)整字符集配置信息,將其更換為需要變更的目標(biāo)字符集。
- 新購(gòu)一個(gè)與源實(shí)例規(guī)格相同的RDS MySQL實(shí)例,詳情請(qǐng)參見(jiàn)創(chuàng)建RDS MySQL實(shí)例。
- 將修改后的表結(jié)構(gòu)腳本導(dǎo)入至新的RDS MySQL實(shí)例中。
步驟二 將源實(shí)例中表的數(shù)據(jù)遷移至新的實(shí)例
- 登錄數(shù)據(jù)傳輸控制臺(tái)。說(shuō)明
- 若數(shù)據(jù)傳輸控制臺(tái)自動(dòng)跳轉(zhuǎn)至數(shù)據(jù)管理DMS控制臺(tái),您可以在右下角的中單擊,返回至舊版數(shù)據(jù)傳輸控制臺(tái)。
- 若您登錄的是新版數(shù)據(jù)傳輸控制臺(tái),您可以單擊右下角的,返回至舊版數(shù)據(jù)傳輸控制臺(tái)。
- 在左側(cè)導(dǎo)航欄,單擊數(shù)據(jù)遷移。
- 在遷移任務(wù)列表頁(yè)面頂部,選擇遷移的目標(biāo)集群所屬地域。
- 單擊頁(yè)面右上角的創(chuàng)建遷移任務(wù)。
- 配置遷移任務(wù)的源庫(kù)及目標(biāo)庫(kù)信息。
類別 配置 說(shuō)明 任務(wù)名稱 - DTS會(huì)自動(dòng)生成一個(gè)任務(wù)名稱,建議配置具有業(yè)務(wù)意義的名稱(無(wú)唯一性要求),便于后續(xù)識(shí)別。 源庫(kù)信息 實(shí)例類型 選擇RDS實(shí)例。 實(shí)例地區(qū) 選擇源RDS實(shí)例所屬地域。 RDS實(shí)例ID 選擇源RDS實(shí)例ID。 數(shù)據(jù)庫(kù)賬號(hào) 填入源RDS實(shí)例的數(shù)據(jù)庫(kù)賬號(hào)(需具備待遷移庫(kù)的讀寫(xiě)權(quán)限)。 數(shù)據(jù)庫(kù)密碼 填入該數(shù)據(jù)庫(kù)賬號(hào)對(duì)應(yīng)的密碼。 說(shuō)明 源庫(kù)信息填寫(xiě)完畢后,您可以單擊數(shù)據(jù)庫(kù)密碼后的測(cè)試連接來(lái)驗(yàn)證填入的源庫(kù)信息是否正確。源庫(kù)信息填寫(xiě)正確則提示測(cè)試通過(guò);如果提示測(cè)試失敗,單擊測(cè)試失敗后的診斷,根據(jù)提示調(diào)整填寫(xiě)的源庫(kù)信息。連接方式 根據(jù)需求選擇非加密連接或SSL安全連接。如果設(shè)置為SSL安全連接,您需要提前開(kāi)啟RDS實(shí)例的SSL加密功能,詳情請(qǐng)參見(jiàn)設(shè)置SSL加密。 目標(biāo)庫(kù)信息 實(shí)例類型 選擇RDS實(shí)例。 實(shí)例地區(qū) 選擇目標(biāo)RDS實(shí)例所屬地域。 RDS實(shí)例ID 選擇目標(biāo)RDS實(shí)例ID。 數(shù)據(jù)庫(kù)賬號(hào) 填入目標(biāo)RDS實(shí)例的數(shù)據(jù)庫(kù)賬號(hào)(需具備遷入的目標(biāo)庫(kù)的讀寫(xiě)權(quán)限)。 數(shù)據(jù)庫(kù)密碼 填入該數(shù)據(jù)庫(kù)賬號(hào)對(duì)應(yīng)的密碼。 說(shuō)明 目標(biāo)庫(kù)信息填寫(xiě)完畢后,您可以單擊數(shù)據(jù)庫(kù)密碼后的測(cè)試連接來(lái)驗(yàn)證填入的目標(biāo)庫(kù)信息是否正確。目標(biāo)庫(kù)信息填寫(xiě)正確則提示測(cè)試通過(guò);如果提示測(cè)試失敗,單擊測(cè)試失敗后的診斷,根據(jù)提示調(diào)整填寫(xiě)的目標(biāo)庫(kù)信息。連接方式 根據(jù)需求選擇非加密連接或SSL安全連接。如果設(shè)置為SSL安全連接,您需要提前開(kāi)啟RDS實(shí)例的SSL加密功能,詳情請(qǐng)參見(jiàn)設(shè)置SSL加密。 - 配置完成后,單擊頁(yè)面右下角的授權(quán)白名單并進(jìn)入下一步。 說(shuō)明 此步驟會(huì)將DTS服務(wù)器的IP地址自動(dòng)添加到RDS MySQL的白名單中,用于保障DTS服務(wù)器能夠正常連接源和目標(biāo)實(shí)例。
- 選擇遷移類型和遷移對(duì)象。
配置 說(shuō)明 遷移類型 由于已經(jīng)在步驟一中完成了結(jié)構(gòu)遷移,此處無(wú)需勾選結(jié)構(gòu)遷移。 - 如果只需要全量遷移,僅勾選全量數(shù)據(jù)遷移。 警告 為保障數(shù)據(jù)一致性,全量數(shù)據(jù)遷移期間請(qǐng)勿在源實(shí)例中寫(xiě)入新的數(shù)據(jù)。
- 如果需要不停機(jī)遷移,同時(shí)勾選全量數(shù)據(jù)遷移和增量數(shù)據(jù)遷移。 說(shuō)明 增量數(shù)據(jù)遷移階段支持同步的SQL操作為:INSERT、UPDATE、DELETE、CREATE TABLE、ALTER TABLE、RENAME TABLE、TRUNCATE TABLE、DROP TABLE。
遷移對(duì)象 在遷移對(duì)象框中選擇待遷移的對(duì)象(該對(duì)象的結(jié)構(gòu)須已在步驟一中完成了遷移),然后單擊將其移動(dòng)至已選擇對(duì)象框。 警告 由于已完成了結(jié)構(gòu)遷移,請(qǐng)勿執(zhí)行對(duì)象名映射操作,否則將導(dǎo)致遷移失敗。 - 如果只需要全量遷移,僅勾選全量數(shù)據(jù)遷移。
- 啟動(dòng)遷移任務(wù)。
步驟三 業(yè)務(wù)切換
您可以根據(jù)業(yè)務(wù)需求選擇下述方案執(zhí)行業(yè)務(wù)切換。
- 簡(jiǎn)易回退方案(有一定的回滾失敗風(fēng)險(xiǎn),無(wú)需改造業(yè)務(wù)的應(yīng)用程序)
- 在目標(biāo)RDS MySQL實(shí)例中完成遷移后的數(shù)據(jù)校驗(yàn)。
- 參考業(yè)務(wù)切換流程文檔中介紹的流程執(zhí)行業(yè)務(wù)切換并建立回退方案(將目標(biāo)庫(kù)的增量數(shù)據(jù)實(shí)時(shí)遷移回源庫(kù)中)。
- 回退方案保持一個(gè)業(yè)務(wù)周期,測(cè)試完所有功能,確認(rèn)無(wú)誤后可結(jié)束回退方案中創(chuàng)建的反向數(shù)據(jù)遷移任務(wù)。
- 可選:如不再需要源實(shí)例,可將其釋放(按量付費(fèi)實(shí)例)或退訂(包年包月實(shí)例)。
- 雙寫(xiě)方案(可保障回滾成功率,業(yè)務(wù)的應(yīng)用程序改造量大)
- 對(duì)業(yè)務(wù)的應(yīng)用程序進(jìn)行改造,讓其實(shí)現(xiàn)雙寫(xiě)的邏輯(即數(shù)據(jù)變更會(huì)同時(shí)向源和目標(biāo)實(shí)例寫(xiě)入)。
- 結(jié)束數(shù)據(jù)遷移任務(wù)。
- 全量數(shù)據(jù)遷移
請(qǐng)勿手動(dòng)結(jié)束遷移任務(wù),否則可能導(dǎo)致數(shù)據(jù)不完整。您只需等待遷移任務(wù)完成即可,遷移任務(wù)會(huì)自動(dòng)結(jié)束。
- 增量數(shù)據(jù)遷移
遷移任務(wù)不會(huì)自動(dòng)結(jié)束,您需要手動(dòng)結(jié)束遷移任務(wù)。
- 觀察遷移任務(wù)的進(jìn)度變更為增量遷移,并顯示為無(wú)延遲狀態(tài)時(shí),將源庫(kù)停寫(xiě)幾分鐘,此時(shí)增量遷移的狀態(tài)可能會(huì)顯示延遲的時(shí)間。
- 等待遷移任務(wù)的增量遷移再次進(jìn)入無(wú)延遲狀態(tài)后,手動(dòng)結(jié)束遷移任務(wù)。
說(shuō)明 您可以登錄源實(shí)例,執(zhí)行show processlist;
查看會(huì)話信息,確保沒(méi)有新的會(huì)話執(zhí)行寫(xiě)入操作。 - 全量數(shù)據(jù)遷移
- 在目標(biāo)RDS MySQL實(shí)例中完成遷移后的數(shù)據(jù)校驗(yàn)。
- 將業(yè)務(wù)的應(yīng)用程序設(shè)置為雙寫(xiě),即數(shù)據(jù)變更會(huì)同時(shí)寫(xiě)入源和目標(biāo)實(shí)例。
- 雙寫(xiě)狀態(tài)保持一個(gè)業(yè)務(wù)周期,測(cè)試完所有功能,確認(rèn)無(wú)誤后可調(diào)整為只寫(xiě)入目標(biāo)實(shí)例。
- 可選:如不再需要源實(shí)例,可將其釋放(按量付費(fèi)實(shí)例)或退訂(包年包月實(shí)例)。