由於業務需求,需要變更表的字元集(例如從gbk變更為utf8mb4),如果直接使用ALTER命令修改字元集會鎖表,當資料表過大時,對業務的影響較大。
本文介紹的操作方法需要先在目標執行個體中建立表結構資訊(新字元集),再通過DTS將源執行個體的資料移轉至目標執行個體,同時可建立簡易復原方案或雙寫方案,平滑地完成RDS MySQL字元集的變更。
注意事項
- 在執行變更字元集之前,請對業務和SQL進行充分的相容性測試和功能驗證,確認正常後再執行本操作。
- DTS在執行全量資料移轉時將佔用源執行個體和目標執行個體一定的讀寫資源,可能會導致資料庫的負載上升。因此您需要在執行資料移轉前評估源執行個體和目標執行個體的效能,同時建議您在業務低峰期執行資料移轉。
- 如果源執行個體的待遷移對象沒有主鍵或唯一約束,且所有欄位沒有唯一性,可能會導致目標執行個體中出現重複資料。
步驟一 將源執行個體中表的結構匯入至新執行個體中
本樣本中通過DMS登入的執行個體的管控模式均為自由操作。
- 匯出源執行個體中需要變更字元集的表的結構指令碼。
- 通過DMS登入源執行個體,詳情請參見通過DMS登入RDS資料庫。
- 在頂部功能表列中,選擇 。說明 此操作需要預先在頁面右上方的中,開啟頂部下拉式功能表的開關。
- 設定匯出資訊。說明 由於目標執行個體的管控模式不同,您需要配置的參數和配置流程可能有所差異息。更多資訊,請參見資料庫匯出。
配置 說明 申請的資料匯出類別 選擇資料庫匯出。 資料庫名 選擇目標資料庫。 說明 您需要有該庫的匯出許可權,更多資訊,請參見查看我的許可權。匯出的表 本樣本選擇為部分表,您可以跟需求選擇部分表或全部表。 說明 若您選擇部分表,則需要在頁面右側選中表並配置過濾條件。匯出內容 選擇為結構。 匯出格式 本樣本預設固定選擇為SQL,且無法變更。 匯出結構類型 根據業務需求選擇匯出的結構類型。 - 預存程序
- 函數
- 觸發器
- 視圖
- 事件
說明 不同類型的資料庫支援的匯出結構類型不同,請以控制台為準。更多選項 單擊巨量資料匯出選項或SQL指令碼拓展選項,然後選中對應的匯出選項。 - 單擊提交申請,等待審批完成。
- 審批通過後,在下載地區框,單擊下載匯出檔案。
- 解壓下載的檔案,然後修改表結構指令碼,調整字元集配置資訊,將其更換為需要變更的目標字元集。
- 新購一個與源執行個體規格相同的RDS MySQL執行個體,詳情請參見快速建立RDS MySQL執行個體。
- 將修改後的表結構指令碼匯入至新的RDS MySQL執行個體中。
- 通過DMS登入新的RDS MySQL執行個體,詳情請參見通過DMS登入RDS資料庫。
- 在頂部功能表列中,選擇 。
- 設定匯入資訊。說明 由於目標執行個體的管控模式不同,您需要配置的參數和配置流程可能有所差異。更多資訊,請參見資料匯入。
配置項 說明 申請的資料變更類別 選擇批量資料匯入。 資料庫 資料匯入操作的目標資料庫。 說明 管控模式為自由操作或穩定變更的執行個體資料庫需要登入後方可選擇。檔案編碼 選擇資料庫的檔案編碼: - UTF-8
- GBK
- ISO-8859-1
- 自動識別
匯入模式 選擇匯入模式,當前支援兩種匯入模式: - 極速模式:在執行階段讀取檔案,將SQL語句直接執行到指定的目標庫。該模式安全性相比安全模式要低,但是執行時效較高。說明 管控模式為安全協同的安全規則配置預設未開啟支援極速模式匯入資料。您可以在對應安全規則的中開啟該檢測項。
- 安全模式:預檢查階段會解析檔案並將SQL或CSV資料緩衝入庫,執行時再從緩衝庫中讀出來執行到指定的目標庫。該模式安全性較好,但是執行時效相比極速模式要低。
檔案類型 選中匯入資料的檔案類型。 - SQL指令碼:安全協同模式下,預設僅放開INSERT和REPLACE命令類型。如需調整,可以由DBA或管理員在安全規則 > SQL變更 > 批量資料匯入中修改。
- CSV格式:檔案中的分隔字元必須為逗號。
- Excel格式:Excel檔案中可以有表頭(屬性),也可以直接是資料。
附件 單擊上傳檔案上傳附件。 說明- 支援SQL、CSV、TXT、XLSX和ZIP檔案類型。
- 附件最大不能超過5 GB。
其他選項 選擇是否忽略異常報錯。 - 不忽略(不選中):系統預設。系統遇到異常會停止執行後續SQL並報錯。
- 忽略(選中):系統執行失敗會忽略異常,並繼續執行後續SQL。
- 單擊提交申請,等待系統預檢查通過,如果預檢查失敗,請根據提示檢查失敗原因後重新提交申請。說明 系統會預檢查您上傳的SQL,如果是CSV檔案,會產生相應的
INSERT
語句。 - 待審批通過後,在執行地區,單擊執行變更。
- 在任務設定對話方塊中,選擇工單執行時間。可以選擇是否立即執行,如果不想立即執行,可以關閉是否立即執行開關,並選擇一個期望開始執行時間,系統會在該時間自動執行。單擊確定執行。
執行方式如下:
立即執行:系統預設。單擊確定執行後,立即執行工單。
定時執行:選擇任務開始執行時間。單擊確定執行後,系統會在設定的時間自動執行任務。
說明執行期間,系統流式讀取已解析的SQL,分批執行到資料庫(每批大小1 MB)。
您可以在執行地區,查看任務執行狀態、任務SQL檢查詳情和調度日誌。
已暫停任務,重啟後,會根據匯入模式選擇從頭執行任務,還是從暫停位置執行。
極速模式:暫停任務後重啟,將從頭開始執行指令碼或匯入資料檔案。
安全模式:暫停任務後重啟,將從暫停位置繼續執行指令碼或匯入資料檔案。
- 匯入成功後,您可以通過執行
show create table <表名>;
命令來確認表的字元集資訊。
步驟二 將源執行個體中表的資料移轉至新的執行個體
- 登入資料轉送控制台。說明
- 若資料轉送控制台自動跳轉至Data Management控制台,您可以在右下角的中單擊,返回至舊版資料轉送控制台。
- 若您登入的是新版資料轉送控制台,您可以單擊右下角的,返回至舊版資料轉送控制台。
在左側導覽列,單擊資料移轉。
在遷移工作清單頁面頂部,選擇遷移的目的地組群所屬地區。
單擊頁面右上方的建立遷移任務。
- 配置遷移任務的源庫及目標庫資訊。
類別 配置 說明 任務名稱 - DTS會自動產生一個任務名稱,建議配置具有業務意義的名稱(無唯一性要求),便於後續識別。 源庫資訊 執行個體類型 選擇RDS執行個體。 執行個體地區 選擇源RDS執行個體所屬地區。 RDS執行個體ID 選擇源RDS執行個體ID。 資料庫帳號 填入源RDS執行個體的資料庫帳號(需具備待遷移庫的讀寫權限)。 資料庫密碼 填入該資料庫帳號對應的密碼。 說明源庫資訊填寫完畢後,您可以單擊資料庫密碼後的測試連接來驗證填入的源庫資訊是否正確。源庫資訊填寫正確則提示測試通過;如果提示測試失敗,單擊測試失敗後的診斷,根據提示調整填寫的源庫資訊。
串連方式 根據需求選擇非加密串連或SSL安全連線。如果設定為SSL安全連線,您需要提前開啟RDS執行個體的SSL加密功能,詳情請參見設定SSL加密。 說明 目前僅中國內地的地區支援設定串連方式。目標庫資訊 執行個體類型 選擇RDS執行個體。 執行個體地區 選擇目標RDS執行個體所屬地區。 RDS執行個體ID 選擇目標RDS執行個體ID。 資料庫帳號 填入目標RDS執行個體的資料庫帳號(需具備遷入的目標庫的讀寫權限)。 資料庫密碼 填入該資料庫帳號對應的密碼。 說明目標庫資訊填寫完畢後,您可以單擊資料庫密碼後的測試連接來驗證填入的目標庫資訊是否正確。目標庫資訊填寫正確則提示測試通過;如果提示測試失敗,單擊測試失敗後的診斷,根據提示調整填寫的目標庫資訊。
串連方式 根據需求選擇非加密串連或SSL安全連線。如果設定為SSL安全連線,您需要提前開啟RDS執行個體的SSL加密功能,詳情請參見設定SSL加密。 說明 目前僅中國內地的地區支援設定串連方式。 - 配置完成後,單擊頁面右下角的授權白名單並進入下一步。 說明 此步驟會將DTS伺服器的IP地址自動添加到RDS MySQL的白名單中,用於保障DTS伺服器能夠正常串連源和目標執行個體。
- 選擇遷移類型和遷移對象。
配置 說明 遷移類型 由於已經在步驟一中完成了結構遷移,此處無需勾選結構遷移。 - 如果只需要全量遷移,僅勾選全量資料移轉。 警告 為保障資料一致性,全量資料移轉期間請勿在源執行個體中寫入新的資料。
- 如果需要不停機遷移,同時勾選全量資料移轉和增量資料移轉。 說明 增量資料移轉階段支援同步的SQL操作為:INSERT、UPDATE、DELETE、CREATE TABLE、ALTER TABLE、RENAME TABLE、TRUNCATE TABLE、DROP TABLE。
遷移對象 在遷移對象框中選擇待遷移的對象(該對象的結構須已在步驟一中完成了遷移),然後單擊將其移動至已選擇對象框。 警告 由於已完成了結構遷移,請勿執行對象名映射操作,否則將導致遷移失敗。 - 如果只需要全量遷移,僅勾選全量資料移轉。
- 啟動遷移任務。
- 單擊頁面右下角的預檢查並啟動。說明
- 在遷移任務正式啟動之前,會先進行預檢查。只有通過預檢查,DTS才能遷移資料。
- 如果預檢查失敗,單擊具體檢查項後的,查看失敗詳情。根據提示修複後,重新進行預檢查。
- 預檢查通過後,單擊下一步。
- 在彈出的購買配置確認對話方塊,選擇鏈路規格並勾選資料轉送(隨用隨付)服務條款。
- 單擊購買並啟動,遷移任務正式開始。
- 單擊頁面右下角的預檢查並啟動。
步驟三 業務切換
您可以根據業務需求選擇下述方案執行業務切換。
- 簡易回退方案(有一定的復原失敗風險,無需改造業務的應用程式)
- 在目標RDS MySQL執行個體中完成遷移後的資料校正。
- 參考業務切換流程文檔中介紹的流程執行業務切換並建立回退方案(將目標庫的增量資料即時移轉回源庫中)。
- 回退方案保持一個業務周期,測試完所有功能,確認無誤後可結束回退方案中建立的反向資料移轉任務。
- 可選:如不再需要源執行個體,可將其釋放(隨用隨付執行個體)或退訂(訂用帳戶執行個體)。
- 雙寫方案(可保障復原成功率,業務的應用程式改造量大)
- 對業務的應用程式進行改造,讓其實現雙寫的邏輯(即資料變更會同時向源和目標執行個體寫入)。
- 結束資料移轉任務。
- 全量資料移轉
請勿手動結束遷移任務,否則可能導致資料不完整。您只需等待遷移任務完成即可,遷移任務會自動結束。
- 增量資料移轉
遷移任務不會自動結束,您需要手動結束遷移任務。
- 觀察遷移任務的進度變更為增量遷移,並顯示為無延遲狀態時,將源庫停寫幾分鐘,此時增量遷移的狀態可能會顯示延遲的時間。
- 等待遷移任務的增量遷移再次進入無延遲狀態後,手動結束遷移任務。
說明 您可以登入源執行個體,執行show processlist;
查看會話資訊,確保沒有新的會話執行寫入操作。 - 全量資料移轉
- 在目標RDS MySQL執行個體中完成遷移後的資料校正。
- 將業務的應用程式設定為雙寫,即資料變更會同時寫入源和目標執行個體。
- 雙寫狀態保持一個業務周期,測試完所有功能,確認無誤後可調整為唯寫入目標執行個體。
- 可選:如不再需要源執行個體,可將其釋放(隨用隨付執行個體)或退訂(訂用帳戶執行個體)。