遷移外部數據庫
簡介
蜂巢的外部數據庫遷移功能支持多線程數據庫備份和恢複,也支持基於業務負載的自適應遷移和遷移失敗的重試。此外,蜂巢提供了較為全麵的遷移參數檢查,提高了遷移數據的成功率。目前,蜂巢提供外部 MySQL 實例的遷移功能。本文將以有公網 IP 的外部 MySQL 數據庫實例遷移至蜂巢 RDS 為例。
注意事項
- 本功能不會遷移源實例mysql.user表中的賬號信息,請確保在將業務IP切換到新實例前重新創建賬號;
- 用戶在遷移過程中或遷移結束後可以通過「數據庫與賬號」功能重新創建賬號。
前提條件
開始遷移前,務必檢查以下內容:
- 若使用 增量遷移,請確認外部數據庫實例已開啟 binlog 並設置 server_id(目前 server_id 不能設置為 0 或 1);
遷移限製:
- 在遷移 MySQL 5.5 以下版本時可能失敗,若遇到,請提蜂巢 工單 解決。
- 不支持遷移名稱中包含「;」符號的數據庫;
- 在遷移時,如果外部實例是 MySQL 5.5 及以下版本,會選擇 RDS 5.5.30 版本作為遷移的目標版本。對於MySQL 5.6 或 5.7 版本則選擇 RDS 5.7 版本作為遷移的目標版本;
- 不支持遷移 MySQL 係統庫,如 information_schema、performance_schema、#bak_database 或 data_dictionary、mysql 和 sys 等。
- 在開始遷移前,會進行遷移預檢查,包括遷移賬號的權限檢查,如果遷移賬號有 mysql.user 表訪問權限,則通過該表進行權限檢查,若無,則通過 information_schema 係統庫的 USER_PRIVILEGES 和 SCHEMA_PRIVILEGES 兩張表來檢查賬號的權限;
- 遷移所需的權限包括 SELECT 、LOCK TABLES 權限(導出一致性數據),導出 SCHEMA 所需的相關權限, REPLICATION SLAVE 、REPLICATION CLIENT 權限(僅在增量遷移時);
- 請將遷移賬號的Host字段設置為“%”;
其他說明:
- 如果遷移賬號有SUPER權限,則在導出外部實例數據階段,會臨時修改外部實例 MySQL InnoDB 參數 innodb_old_blocks_time,完成數據導出或導出失敗時,RDS 會自動將其設置回原值;
- 如果遷移賬號有 RELOAD 權限,則使用 FTWRL(flush tables with read lock)來獲取一致性數據點,若無,則通過 lock tables xx read 語法來獲取一致性數據點;
- 在將數據導入 RDS 實例階段,RDS 實例的 sync-binlog、innodb_flush_log_at_trx_commit、log_slow_queries 參數均會進行臨時優化,完成數據導入或導入失敗時,會自動將其設置回原值。
創建遷移賬號
我們建議新建一個擁有相應權限的賬號進行數據遷移。 登錄 MySQL 客戶端,使用如下命令創建賬號並賦予權限:
GRANT all privileges ON [數據庫名].[表名] TO '[期望創建的用戶名]'@'[用戶地址]' IDENTIFIED BY '[期望設置的密碼]' with grant option;
- 方便起見,本例中直接賦予數據庫所有表的全部權限:「GRANT all privileges ON *.*」;
- [用戶地址] 可以是 IP 地址、計算機名、域名,如果想從任意地址連接,使用「%」即可;
- 重要:該帳號擁有所有權限,出於安全考慮,數據遷移完成後,請刪除該賬號或直接刪除本地數據庫。
其他公有雲RDS實例遷移
需要遷移第三方RDS實例時,由於數據庫賬號權限管理的限製,無法自由地對遷移賬號賦權,此時請確保所創建的賬號有前述所規定的權限即可;
獲取數據庫列表
登錄蜂巢控製台,選擇「數據庫」,點擊「遷移外部數據庫」按鈕:
進入「獲取數據庫列表」步驟,需要輸入待遷移的外部數據庫 IP 地址、端口、數據庫賬號以及密碼等信息,如下圖所示,輸入完畢後,點擊「下一步」:
如果連接失敗,請檢查以下內容:- 遷移賬號權限;
- 賬號、密碼、IP 地址、端口;
- MySQL 數據庫版本須高於 5.1.41;
選擇待遷移的數據庫
連接外部數據庫成功後,開始「選擇待遷移的數據庫」,這裏顯示了該數據庫實例內的所有數據庫,如下圖所示。蜂巢支持一次性遷移同一實例下多個數據庫,選擇所需遷移的數據庫名稱,點擊「下一步」:
- 不支持遷移名稱中包含「;」符號的數據庫;
- 不支持遷移 MySQL 係統庫,如 mysql 、information_schema、performance_schema、sys 或 data_dictionary 等。
參數設置
選擇完數據庫之後,進入「參數設置」步驟,如下圖所示。具體的參數詳情,請參見 參數說明,在確認參數無誤後,點擊「下一步」發起遷移操作。
注意:點擊「下一步」後,默認會進行參數預檢查,包括實例連通性、各個參數設置是否正確等,如果發現錯誤,蜂巢會顯示出錯信息,你可以進行相應修改後重新點擊「下一步」。
參數說明
遷移類型
- 增量遷移
增量遷移包括全量遷移和增量複製兩個階段。完成全量遷移後,會將遷移過程發生的數據變更同步到目標實例,如果遷移期間進行了 DDL 操作,那麼這些結構變更不會遷移到目標實例。 - 全量遷移
將源實例遷移對象的結果定義及數據全部遷移到目標實例。遷移過程中,為了保證數據一致性,非事務表會被鎖定,鎖定期間這些表無法寫入,鎖定時長依賴於這些表的數據量大小,在這些非事務表遷移完成後,鎖才會釋放。 - 結構遷移
將源實例遷移對象(數據庫、表)的結構定義(schema)遷移到目標實例。支持結構遷移的對象包括:表、視圖、觸發器、存儲過程、存儲函數等。
導出並發度
表示啟用多少個線程來同時導出表中的數據。請合理選擇數據導出線程數,係統默認為 2 個,建議剛開始使用暫先不超過 3 個。
導入並發度
表示啟用多少個線程來同時導入表中的數據。RDS 的數據導入線程需要根據 RDS 本身的存儲介質性能進行合理規劃。係統默認為 2 個,蜂巢的經驗表明:2至4個線程一般來說已能夠達到最大數據寫入性能。
持鎖超時時間
表示進行數據導出時,允許對源實例加讀鎖(通過執行 flush tables with read lock 獲取讀鎖)的時長,單位為 s。注意,該值的設置會極大影響遷移,設小會導致遷移出錯,設大的話需要關注是否對外部實例業務產生影響。
負載監控閾值
表示從源實例導出數據時,允許導出線程 select 數據的最大負載,通過 threads_running 數值來衡量,如果該參數超過閾值則數據導出暫停,降到閾值以下時再繼續。係統默認的監控項為 300,如果外部實例壓力較大,連接數較多,請合理選擇監控項,並適當增加監控項。
創建新實例
係統預檢查無誤後,顯示如下「創建新實例」頁麵,即可進行數據遷移,此時隻需填寫新實例名稱,選擇合適的內存及存儲空間後,點擊「開始遷移」即可,數據庫列表會自動生成遷移的數據庫實例。
注意:需要確保遷移中創建的 RDS 實例有足夠的空間用於遷移外部實例數據,可以通過設置存存儲空間來進行調整。
如果遷移失敗,可以通過數據庫實例列表中的「查看進度」查看原因。並根據係統出錯提示,參照 參數說明 適當調整參數,最後點擊「重試」即可。
如果不確定如何調整參數,建議提工單聯係技術人員協助處理。
支持文檔
最後更新:2017-01-03 10:48:56