由于業(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í)例的管控模式均為自由操作

  1. 導(dǎo)出源實(shí)例中需要變更字符集的表的結(jié)構(gòu)腳本。
    1. 通過(guò)DMS登錄源實(shí)例,詳情請(qǐng)參見(jiàn)通過(guò)DMS登錄RDS數(shù)據(jù)庫(kù)
    2. 在頂部菜單欄中,選擇數(shù)據(jù)庫(kù)開(kāi)發(fā) > 數(shù)據(jù)導(dǎo)出 > 數(shù)據(jù)庫(kù)導(dǎo)出
      說(shuō)明 此操作需要預(yù)先在頁(yè)面右上方的設(shè)置中,打開(kāi)頂部下拉菜單的開(kāi)關(guān)。
    3. 設(shè)置導(dǎo)出信息。
      導(dǎo)出
      說(shuō)明 由于目標(biāo)實(shí)例的管控模式不同,您需要配置的參數(shù)和配置流程可能有所差異息。更多信息,請(qǐng)參見(jiàn)數(shù)據(jù)庫(kù)導(dǎo)出
      配置說(shuō)明
      申請(qǐng)的數(shù)據(jù)導(dǎo)出類別選擇數(shù)據(jù)庫(kù)導(dǎo)出
      數(shù)據(jù)庫(kù)名選擇目標(biāo)數(shù)據(jù)庫(kù)。
      說(shuō)明 您需要有該庫(kù)的導(dǎo)出權(quán)限,更多信息,請(qǐng)參見(jiàn)查看我的權(quán)限
      導(dǎo)出的表本示例選擇為部分表,您可以跟需求選擇部分表全部表
      說(shuō)明 若您選擇部分表,則需要在頁(yè)面右側(cè)選中表并配置過(guò)濾條件。
      導(dǎo)出內(nèi)容選擇為結(jié)構(gòu)
      導(dǎo)出格式本示例默認(rèn)固定選擇為SQL,且無(wú)法變更。
      導(dǎo)出結(jié)構(gòu)類型根據(jù)業(yè)務(wù)需求選擇導(dǎo)出的結(jié)構(gòu)類型。
      • 存儲(chǔ)過(guò)程
      • 函數(shù)
      • 觸發(fā)器
      • 視圖
      • 事件
      說(shuō)明 不同類型的數(shù)據(jù)庫(kù)支持的導(dǎo)出結(jié)構(gòu)類型不同,請(qǐng)以控制臺(tái)為準(zhǔn)。
      更多選項(xiàng)單擊大數(shù)據(jù)導(dǎo)出選項(xiàng)SQL腳本拓展選項(xiàng),然后選中對(duì)應(yīng)的導(dǎo)出選項(xiàng)。
    4. 單擊提交申請(qǐng),等待審批完成。
    5. 審批通過(guò)后,在下載區(qū)域框,單擊下載導(dǎo)出文件下載
  2. 解壓下載的文件,然后修改表結(jié)構(gòu)腳本,調(diào)整字符集配置信息,將其更換為需要變更的目標(biāo)字符集。字符集
  3. 新購(gòu)一個(gè)與源實(shí)例規(guī)格相同的RDS MySQL實(shí)例,詳情請(qǐng)參見(jiàn)創(chuàng)建RDS MySQL實(shí)例
  4. 將修改后的表結(jié)構(gòu)腳本導(dǎo)入至新的RDS MySQL實(shí)例中。
    1. 通過(guò)DMS登錄新的RDS MySQL實(shí)例,詳情請(qǐng)參見(jiàn)通過(guò)DMS登錄RDS數(shù)據(jù)庫(kù)
    2. 在頂部菜單欄中,選擇數(shù)據(jù)庫(kù)開(kāi)發(fā) > 數(shù)據(jù)變更 > 數(shù)據(jù)導(dǎo)入
    3. 設(shè)置導(dǎo)入信息。
      說(shuō)明 由于目標(biāo)實(shí)例的管控模式不同,您需要配置的參數(shù)和配置流程可能有所差異。更多信息,請(qǐng)參見(jiàn)數(shù)據(jù)導(dǎo)入
      配置項(xiàng)說(shuō)明
      申請(qǐng)的數(shù)據(jù)變更類別選擇批量數(shù)據(jù)導(dǎo)入
      數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)入操作的目標(biāo)數(shù)據(jù)庫(kù)。
      說(shuō)明 管控模式自由操作穩(wěn)定變更的實(shí)例數(shù)據(jù)庫(kù)需要登錄后方可選擇。
      文件編碼選擇數(shù)據(jù)庫(kù)的文件編碼:
      • UTF-8
      • GBK
      • ISO-8859-1
      • 自動(dòng)識(shí)別
      導(dǎo)入模式選擇導(dǎo)入模式,當(dāng)前支持兩種導(dǎo)入模式:
      • 極速模式:在執(zhí)行階段讀取文件,將SQL語(yǔ)句直接執(zhí)行到指定的目標(biāo)庫(kù)。該模式安全性相比安全模式要低,但是執(zhí)行時(shí)效較高。
        說(shuō)明 管控模式為安全協(xié)同的安全規(guī)則配置默認(rèn)未開(kāi)啟支持極速模式導(dǎo)入數(shù)據(jù)。您可以在對(duì)應(yīng)安全規(guī)則的安全規(guī)則 > SQL變更 > 基礎(chǔ)配置項(xiàng)中開(kāi)啟該檢測(cè)項(xiàng)。
      • 安全模式:預(yù)檢查階段會(huì)解析文件并將SQL或CSV數(shù)據(jù)緩存入庫(kù),執(zhí)行時(shí)再?gòu)木彺鎺?kù)中讀出來(lái)執(zhí)行到指定的目標(biāo)庫(kù)。該模式安全性較好,但是執(zhí)行時(shí)效相比極速模式要低。
      文件類型選中導(dǎo)入數(shù)據(jù)的文件類型。
      • SQL腳本:安全協(xié)同模式下,默認(rèn)僅放開(kāi)INSERT和REPLACE命令類型。如需調(diào)整,可以由DBA或管理員在安全規(guī)則 > SQL變更 > 批量數(shù)據(jù)導(dǎo)入中修改。
      • CSV格式:文件中的分隔符必須為逗號(hào)。
      • Excel格式:Excel文件中可以有表頭(屬性),也可以直接是數(shù)據(jù)。
      附件單擊上傳文件上傳附件。
      說(shuō)明
      • 支持SQL、CSV、TXT、XLSX和ZIP文件類型。
      • 附件最大不能超過(guò)5 GB。
      其他選項(xiàng)選擇是否忽略異常報(bào)錯(cuò)。
      • 不忽略(不選中):系統(tǒng)默認(rèn)。系統(tǒng)遇到異常會(huì)停止執(zhí)行后續(xù)SQL并報(bào)錯(cuò)。
      • 忽略(選中):系統(tǒng)執(zhí)行失敗會(huì)忽略異常,并繼續(xù)執(zhí)行后續(xù)SQL。
    4. 單擊提交申請(qǐng),等待系統(tǒng)預(yù)檢查通過(guò),如果預(yù)檢查失敗,請(qǐng)根據(jù)提示檢查失敗原因后重新提交申請(qǐng)。
      說(shuō)明 系統(tǒng)會(huì)預(yù)檢查您上傳的SQL,如果是CSV文件,會(huì)生成相應(yīng)的INSERT語(yǔ)句。
    5. 待審批通過(guò)后,在執(zhí)行區(qū)域,單擊執(zhí)行變更執(zhí)行
    6. 任務(wù)設(shè)置對(duì)話框中,選擇工單執(zhí)行時(shí)間。可以選擇是否立即執(zhí)行,如果不想立即執(zhí)行,可以關(guān)閉是否立即執(zhí)行開(kāi)關(guān),并選擇一個(gè)期望開(kāi)始執(zhí)行時(shí)間,系統(tǒng)會(huì)在該時(shí)間自動(dòng)執(zhí)行。單擊確定執(zhí)行任務(wù)設(shè)置
      執(zhí)行方式如下:
      • 立即執(zhí)行:系統(tǒng)默認(rèn)。單擊確定執(zhí)行后,立即執(zhí)行工單。
      • 定時(shí)執(zhí)行:選擇任務(wù)開(kāi)始執(zhí)行時(shí)間。單擊確定執(zhí)行后,系統(tǒng)會(huì)在設(shè)定的時(shí)間自動(dòng)執(zhí)行任務(wù)。
      說(shuō)明
      • 執(zhí)行期間,系統(tǒng)流式讀取已解析的SQL,分批執(zhí)行到數(shù)據(jù)庫(kù)(每批大小1 MB)。
      • 您可以在執(zhí)行區(qū)域,查看任務(wù)執(zhí)行狀態(tài)、任務(wù)SQL檢查詳情和調(diào)度日志。
      • 已暫停的任務(wù),重啟后,會(huì)根據(jù)導(dǎo)入模式選擇從頭執(zhí)行任務(wù),還是從暫停位置執(zhí)行。
        • 極速模式:暫停任務(wù)后重啟,將從頭開(kāi)始執(zhí)行腳本或?qū)霐?shù)據(jù)文件。
        • 安全模式:暫停任務(wù)后重啟,將從暫停位置繼續(xù)執(zhí)行腳本或?qū)霐?shù)據(jù)文件。
    7. 導(dǎo)入成功后,您可以通過(guò)執(zhí)行show create table <表名>;命令來(lái)確認(rèn)表的字符集信息。

步驟二 將源實(shí)例中表的數(shù)據(jù)遷移至新的實(shí)例

  1. 登錄數(shù)據(jù)傳輸控制臺(tái)
    說(shuō)明
    • 若數(shù)據(jù)傳輸控制臺(tái)自動(dòng)跳轉(zhuǎn)至數(shù)據(jù)管理DMS控制臺(tái),您可以在右下角的jiqiren中單擊返回舊版,返回至舊版數(shù)據(jù)傳輸控制臺(tái)。
    • 若您登錄的是新版數(shù)據(jù)傳輸控制臺(tái),您可以單擊右下角的返回舊版,返回至舊版數(shù)據(jù)傳輸控制臺(tái)。
  2. 在左側(cè)導(dǎo)航欄,單擊數(shù)據(jù)遷移
  3. 遷移任務(wù)列表頁(yè)面頂部,選擇遷移的目標(biāo)集群所屬地域。
  4. 單擊頁(yè)面右上角的創(chuàng)建遷移任務(wù)
  5. 配置遷移任務(wù)的源庫(kù)及目標(biāo)庫(kù)信息。
    設(shè)置源和目標(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加密
  6. 配置完成后,單擊頁(yè)面右下角的授權(quán)白名單并進(jìn)入下一步
    說(shuō)明 此步驟會(huì)將DTS服務(wù)器的IP地址自動(dòng)添加到RDS MySQL的白名單中,用于保障DTS服務(wù)器能夠正常連接源和目標(biāo)實(shí)例。
  7. 選擇遷移類型和遷移對(duì)象。
    選擇遷移類型和對(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)致遷移失敗。
  8. 啟動(dòng)遷移任務(wù)。
    1. 單擊頁(yè)面右下角的預(yù)檢查并啟動(dòng)
      說(shuō)明
      • 在遷移任務(wù)正式啟動(dòng)之前,會(huì)先進(jìn)行預(yù)檢查。只有通過(guò)預(yù)檢查,DTS才能遷移數(shù)據(jù)。
      • 如果預(yù)檢查失敗,單擊具體檢查項(xiàng)后的提示,查看失敗詳情。根據(jù)提示修復(fù)后,重新進(jìn)行預(yù)檢查。
    2. 預(yù)檢查通過(guò)后,單擊下一步
    3. 在彈出的購(gòu)買配置確認(rèn)對(duì)話框,選擇鏈路規(guī)格并勾選數(shù)據(jù)傳輸(按量付費(fèi))服務(wù)條款
    4. 單擊購(gòu)買并啟動(dòng),遷移任務(wù)正式開(kāi)始。

步驟三 業(yè)務(wù)切換

您可以根據(jù)業(yè)務(wù)需求選擇下述方案執(zhí)行業(yè)務(wù)切換。

  • 簡(jiǎn)易回退方案(有一定的回滾失敗風(fēng)險(xiǎn),無(wú)需改造業(yè)務(wù)的應(yīng)用程序)
    1. 在目標(biāo)RDS MySQL實(shí)例中完成遷移后的數(shù)據(jù)校驗(yàn)。
    2. 參考業(yè)務(wù)切換流程文檔中介紹的流程執(zhí)行業(yè)務(wù)切換并建立回退方案(將目標(biāo)庫(kù)的增量數(shù)據(jù)實(shí)時(shí)遷移回源庫(kù)中)。
    3. 回退方案保持一個(gè)業(yè)務(wù)周期,測(cè)試完所有功能,確認(rèn)無(wú)誤后可結(jié)束回退方案中創(chuàng)建的反向數(shù)據(jù)遷移任務(wù)。
    4. 可選:如不再需要源實(shí)例,可將其釋放(按量付費(fèi)實(shí)例)或退訂(包年包月實(shí)例)。
  • 雙寫(xiě)方案(可保障回滾成功率,業(yè)務(wù)的應(yīng)用程序改造量大)
    1. 對(duì)業(yè)務(wù)的應(yīng)用程序進(jìn)行改造,讓其實(shí)現(xiàn)雙寫(xiě)的邏輯(即數(shù)據(jù)變更會(huì)同時(shí)向源和目標(biāo)實(shí)例寫(xiě)入)。
    2. 結(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ù)。

        1. 觀察遷移任務(wù)的進(jìn)度變更為增量遷移,并顯示為無(wú)延遲狀態(tài)時(shí),將源庫(kù)停寫(xiě)幾分鐘,此時(shí)增量遷移的狀態(tài)可能會(huì)顯示延遲的時(shí)間。
        2. 等待遷移任務(wù)的增量遷移再次進(jìn)入無(wú)延遲狀態(tài)后,手動(dòng)結(jié)束遷移任務(wù)。結(jié)束增量遷移任務(wù)
      說(shuō)明 您可以登錄源實(shí)例,執(zhí)行show processlist;查看會(huì)話信息,確保沒(méi)有新的會(huì)話執(zhí)行寫(xiě)入操作。
    3. 在目標(biāo)RDS MySQL實(shí)例中完成遷移后的數(shù)據(jù)校驗(yàn)。
    4. 將業(yè)務(wù)的應(yīng)用程序設(shè)置為雙寫(xiě),即數(shù)據(jù)變更會(huì)同時(shí)寫(xiě)入源和目標(biāo)實(shí)例。
    5. 雙寫(xiě)狀態(tài)保持一個(gè)業(yè)務(wù)周期,測(cè)試完所有功能,確認(rèn)無(wú)誤后可調(diào)整為只寫(xiě)入目標(biāo)實(shí)例。
    6. 可選:如不再需要源實(shí)例,可將其釋放(按量付費(fèi)實(shí)例)或退訂(包年包月實(shí)例)。