閱讀907 返回首頁    go 阿裏雲 go 技術社區[雲棲]


使用 DTS 遷移 MySQL 數據__遷移數據_快速入門(MySQL)_雲數據庫 RDS 版-阿裏雲

使用數據傳輸服務(DTS)將本地數據庫遷移到 RDS for MySQL,可以實現應用不停服務的情況下,平滑完成數據庫的遷移工作。

背景信息

DTS 數據遷移支持 MySQL 的結構遷移、全量遷移和增量遷移。

  • 結構遷移

    DTS 會將本地數據庫的結構定義遷移到目標實例。目前 DTS 支持結構遷移的對象有:表、視圖、觸發器、存儲過程、存儲函數。

  • 全量遷移

    DTS 會將本地數據庫遷移對象的數據全部遷移到目標實例。如果用戶還選擇了增量遷移,那麼全量遷移過程中,為了保證數據一致性,無主鍵的非事務表會被鎖定,鎖定期間這些表無法寫入,鎖定時長依賴於這些表的數據量大小,在這些無主鍵非事務表遷移完成後,鎖才會釋放。

  • 增量遷移

    增量遷移會將遷移過程進行數據變更同步到目標實例,如果遷移期間進行了 DDL 操作,那麼這些結構變更不會遷移到目標實例。

遷移限製

將本地數據庫遷移到 RDS 上有以下限製。

  • 遷移過程中,不支持 DDL 操作
  • 結構遷移不支持 event 的遷移
  • 如果使用了對象名映射功能後,依賴這個對象的其他對象可能遷移失敗
  • 當選擇增量遷移時,本地 MySQL 實例需要開啟 binlog,且本地庫的 binlog_format 要為 row。如果本地 MySQL 為5.6版本時,它的 binlog_row_image 還須設置為 full

前提條件

已完成 RDS 實例數據庫的準備,可參見 設置連接模式創建數據庫和賬號

操作步驟

本例以有公網 IP 的本地數據庫遷移到 RDS 上為例。

準備本地數據

在正式遷移之前,需要先在本地數據庫和 RDS 實例中創建遷移賬號,並在 RDS 實例中創建要遷移的數據庫,並將要遷移的數據庫的讀寫權限授權給遷移賬號。不同的遷移類型需要不同的權限,如下表所示。

遷移類型 結構遷移 全量遷移 增量遷移
本地數據庫 select select select
replication slave
replication client
RDS 實例 讀寫權限 讀寫權限 讀寫權限
  1. 在本地數據庫中創建遷移賬號。

    1. CREATE USER 'username'@'host' IDENTIFIED BY 'password';

    參數說明:

    • username:要創建的賬號
    • host:指定該賬號登錄數據庫的主機。如果是本地用戶可以使用 localhost,如果想讓該用戶從任意主機登錄,可以使用通配符 %
    • password:該賬號的登錄密碼

    例:要創建賬號為 William,密碼為 Changme123 的賬號從任意主機登錄本地數據庫,命令如下:

    1. CREATE USER 'William'@'%' IDENTIFIED BY 'Changme123';
  2. 在本地數據庫中給遷移賬號授權,本地數據庫中遷移賬號的權限要求請參見上表。

    1. GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

    參數說明:

    • privileges:該賬號的操作權限,如 SELECT、INSERT、UPDATE 等。如果要授權該賬號所有權限,則使用 ALL
    • databasename:數據庫名。如果要授權該賬號所有的數據庫權限,則使用通配符 *
    • tablename:表名。如果要授權該賬號所有的表權限,則使用通配符 *
    • username:要授權的賬號名
    • host:授權登錄數據庫的主機名。如果是本地用戶可以使用 localhost,如果想讓該用戶從任意主機登錄,可以使用通配符 %
    • WITH GRANT OPTION:授權該賬號能使用GRANT命令,該參數為可選

    例:授權賬號 William 對所有數據庫和表的所有權限,並可以從任意主機登錄本地數據庫,命令如下:

    1. GRANT ALL ON *.* TO 'William'@'%';

    說明: 如果需要進行增量遷移,那麼需要確認本地數據庫的 binlog 是否開啟並正確設置,執行以下步驟。

  3. 開啟本地數據庫的 binlog。

    使用如下命令查詢是否開啟了binlog。

    1. show global variables like "log_bin";

    如果查詢結果為 log_bin=OFF,那麼本地數據庫沒有開啟 binlog。為了使遷移過程中產生的增量數據能同步遷移,需要修改配置文件 my.cnf 中的如下參數。

    1. log_bin=mysql_bin
    2. binlog_format=row
    3. server_id=大於 1 的整數
    4. binlog_row_image=full //當本地 MySQL 版本大於 5.6 時,則需設置該項
  4. 修改完成後,重啟 MySQL 進程。
    1. $mysql_dir/bin/mysqladmin -u root -p shutdown
    2. $mysql_dir/bin/safe_mysqld &
    其中,“mysql_dir”為MySQL安裝目錄。

正式遷移操作

數據準備完畢後,即可進入正式的遷移操作。

  1. RDS 管理控製台 上單擊 遷移數據庫,進入 DTS,如下圖所示。

    DTS

  2. 單擊 創建在線遷移任務,進入 創建遷移任務 頁麵,如下圖所示。

    創建遷移任務

  3. 輸入任務名稱、本地數據庫信息和目標數據庫信息,單擊 授權白名單並進入下一步,如下圖所示。

    填寫遷移任務信息

    • 任務名稱:自定義任務名稱,可以保持默認值
    • 源庫信息
      • 實例類型:本地數據庫的實例類型,可以選擇 有公網IP的自建數據庫ECS上的自建數據庫RDS實例雲數據庫MongoDB
      • 數據庫類型:本地數據庫的類型,可以選擇 OracleMySQLSQLServerPostgreSQLMongoDB
      • 主機名或 IP 地址:本地數據庫的公網地址
      • 端口:本地數據庫的公網端口
      • 賬號:本地數據庫的遷移賬號
      • 密碼:本地數據庫遷移賬號對應的密碼
    • 目標庫信息
      • 實例類型:默認為 RDS 實例
      • RDS 實例 ID:目標 RDS 實例的 ID。點擊下拉菜單將自動聯想當前登錄 RDS 管理控製台 的賬號的 RDS 實例,點擊選擇所需要的實例
      • 賬號:目標 RDS 數據庫的遷移賬號
      • 密碼:目標 RDS 數據庫遷移賬號對應的密碼
  4. 擇遷移類型,並在 遷移對象 中選擇要遷移的對象,單擊 > 將要遷移的對象放入 已選擇 中,單擊 預檢查並啟動,如下圖所示。

    注意

    • 數據遷移隻會將本地數據庫的數據(結構)複製一份到目標數據庫,並不會對本地數據庫數據(結構)造成影響
    • 數據遷移過程中,不支持 DDL 操作,如進行 DDL 操作可能導致遷移失敗
    • DTS 增量遷移的時間最長支持 15 天,如果超過 15 天不停止任務,係統資源可能被回收

    選擇遷移類型及對象

    如果要修改遷移對象在目標數據庫上的名字,可以在 已選擇 列表右側單擊 編輯,修改已選擇的對象名稱,如上圖4所示。

    說明: 以下以預檢查不通過為例進行描述,如果預檢查通過,請直接參見步驟 8。

  5. 係統顯示預檢查結果,如下圖所示。

    檢查不通過

  6. 單擊 檢測結果失敗 的檢測項後的 !,查看失敗詳細信息,根據失敗詳細信息完成錯誤排查。

  7. 錯誤排查完畢後,在 遷移任務列表 頁麵,選擇當前遷移任務,單擊 啟動,如下圖所示。

    啟動遷移任務

  8. 係統預檢查通過後,單擊 確定,自動進行遷移任務,如下圖所示。

    檢查通過

後續操作

因遷移賬號擁有讀寫權限,為了保證本地數據庫安全,請在數據遷移完成後,刪除本地數據庫和 RDS 實例中的遷移賬號。

最後更新:2016-11-23 16:03:53

  上一篇:go 創建高權限賬號__設置實例基礎配置_快速入門(MySQL)_雲數據庫 RDS 版-阿裏雲
  下一篇:go 使用 mysqldump 遷移 MySQL 數據__遷移數據_快速入門(MySQL)_雲數據庫 RDS 版-阿裏雲