使用技巧(需要人為配合)
如果您使用的是全量遷移模式(離線遷移),確保源和目標數據庫無業務寫入,保證遷移前后數據一致。
如果您使用的是全量+增量遷移模式(在線遷移),支持在源數據庫有業務數據寫入的情況下進行遷移,推薦提前2-3天啟動任務,并配合如下使用技巧和對應場景的操作要求,以確保順利遷移。
全量遷移
基于以下原因,建議您結合定時啟動功能,選擇業務低峰期開始運行遷移任務,相對靜態的數據,遷移時復雜度將會降低。如果遷移不可避免業務高峰期,推薦使用遷移限速功能,即“流速模式”選擇“限速”。
全量遷移會對源數據庫有一定的訪問壓力。
遷移無主鍵表時,為了確保數據一致性,會存在3s以內的單表級鎖定。
正在遷移的數據被其他事務長時間鎖死,可能導致讀數據超時。
由于MySQL固有特點限制,CPU資源緊張時,存儲引擎為Tokudb的表,讀取速度可能下降至10%。
數據對比
建議您結合數據對比的“稍后啟動”功能,選擇業務低峰期進行數據對比,以便得到更為具有參考性的對比結果。由于同步具有輕微的時差,在數據持續操作過程中進行對比任務,可能會出現少量數據不一致對比結果,從而失去參考意義。
操作要求
針對一些無法預知或人為因素及環境突變導致遷移失敗的情況,數據庫復制服務提供以下常見的操作限制,供您在遷移過程中參考
類型名稱
操作限制(需要人為配合)
注意事項
環境要求均不允許在遷移過程中修改,直至遷移結束。
相互關聯的數據對象要確保同時遷移,避免遷移因關聯對象缺失,導致遷移失敗。常見的關聯關系:視圖引用表、視圖引用視圖、存儲過程/函數/觸發器引用視圖/表、主外鍵關聯表等。
不支持外鍵級聯操作。
由于MySQL本身限制,若源庫的一次性事件(EVENT)設定的觸發時間在遷移開始前,該事件(EVENT)不會遷移到目標庫。
多對一場景下,創建遷移任務時,目標庫讀寫設置需要跟已有任務設置為一致。
增量遷移會過濾創建用戶、刪除用戶及修改用戶權限的DDL操作。
由于無主鍵表缺乏行的唯一性標志,網絡不穩定時涉及少量重試,表數據存在少量不一致的可能性。
不支持目標數據庫恢復到全量遷移時間段范圍內的PITR操作。
若專屬計算集群不支持4vCPU/8G或以上規格實例,則無法創建遷移任務。
源庫和目標庫為RDS for MySQL實例時,不支持帶有TDE特性并建立具有加密功能表。
操作須知
在任務啟動、任務全量遷移階段,不建議對源數據庫做刪除類型的DDL操作,比如刪除數據庫、索引、視圖等,這樣可能會引起任務遷移失敗。
在結束遷移任務時,將進行所選事件(EVENT)和觸發器(TRIGGER)的遷移。請確保任務結束前,不要斷開源和目標數據庫的網絡連通性,并在結束任務時關注遷移日志上報的狀態,達到數據庫完整遷移效果。
遷移過程中,不允許修改、刪除連接源和目標數據庫的用戶的用戶名、密碼、權限,或修改源和目標數據庫的端口號。
遷移任務目標數據庫可以設置“只讀”和“讀寫”。
只讀:目標數據庫實例將轉化為只讀、不可寫入的狀態,遷移任務結束后恢復可讀寫狀態,此選項可有效的確保數據遷移的完整性和成功率,推薦此選項。
讀寫:目標數據庫可以讀寫,但需要避免操作或接入應用后會更改遷移中的數據(注意:無業務的程序常常也有微量的數據操作),進而形成數據沖突、任務故障、且無法修復續傳,充分了解要點后可選擇此選項。
增量遷移場景下,不支持源數據庫進行恢復到某個備份點的操作(PITR)。
增量遷移過程中,若源庫存在分布式事務,可能會導致遷移失敗。
為了保持數據一致性,不允許對正在遷移中的目標數據庫進行修改操作(包括但不限于DDL、DML操作)。
增量遷移階段,支持斷點續傳功能,在主機系統崩潰的情況下,對于非事務性的無主鍵的表可能會出現重復插入數據的情況。
遷移過程中,不允許源庫寫入binlog格式為statement的數據。
遷移過程中,不允許源庫執行清除binlog的操作。
選擇表級對象遷移時,增量遷移過程中不支持對表進行重命名操作。
源庫不支持阿里云RDS的只讀副本。
如果源數據庫為自建庫,并且安裝了Percona ? ? ? ?Server for MySQL 5.6.x或Percona Server for MySQL ? ? ? ?5.7.x時,內存管理器必須使用Jemalloc庫,以避免因系統表頻繁查詢帶來的內存回收不及時,并最終導致數據庫Out of Memory問題。
遷移過程中,不允許在源庫創建庫名為ib_logfile的數據庫。
建議將expire_log_day參數設置在合理的范圍,確保恢復時斷點處的binlog尚未過期,以保證服務中斷后的順利恢復。
環境要求
實時遷移對環境有一些特定的要求,請確保環境配置滿足以下條件。該類型的要求系統會自動檢查,并給出處理建議。
類型名稱
使用限制(DRS自動檢查)
數據庫權限設置
全量遷移最小權限要求:
源數據庫帳戶需要具備如下權限:
SELECT、SHOW VIEW、EVENT。
目標數據庫帳號必須擁有如下權限:
SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ? ROUTINE、TRIGGER、WITH GRANT ? OPTION。
全量+增量最小遷移權限要求:
源數據庫帳戶需要具備如下權限:
SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION ? SLAVE、REPLICATION CLIENT。
目標數據庫帳號必須擁有如下權限:
SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ? ROUTINE、TRIGGER、WITH GRANT ? OPTION。
用戶遷移最小權限要求:
用戶遷移時,當源數據庫為非阿里云數據庫時,帳戶需要有mysql.user的SELECT權限,源數據庫為阿里云數據庫,則帳戶需要同時具有mysql.user和mysql.user_view的SELECT權限。
目標數據庫帳戶需要有mysql庫的SELECT,INSERT,UPDATE,DELETE權限。
遷移對象約束
支持數據庫、表、視圖、索引、約束、函數、存儲過程、觸發器(TRIGGER)和事件(EVENT)的遷移。
不支持系統庫的遷移以及事件狀態的遷移。
不支持非MyISAM和非InnoDB表的遷移。
源數據庫要求
源數據庫中的庫名不能包含:'<`>/\"以及非ASCII字符。
源數據庫中的表名、視圖名不能包含:'<>/\"以及非ASCII字符。
源數據庫中的庫名不允許為ib_logfile。
MySQL源數據庫的binlog日志必須打開,且binlog日志格式必須為Row格式。
在磁盤空間允許的情況下,建議源數據庫binlog保存時間越長越好,建議為3天。
源數據庫expire_logs_days參數值為0,可能會導致遷移失敗。
增量遷移時,必須設置MySQL源數據庫的server_id。如果源數據庫版本小于或等于MySQL5.6,server_id的取值范圍在2-4294967296之間;如果源數據庫版本大于或等于MySQL5.7,server_id的取值范圍在1-4294967296之間。
MySQL源數據庫建議開啟skip-name-resolve,減少連接超時的可能性。
源數據庫GTID狀態建議為開啟狀態。
源庫不支持mysql binlog dump命令。
源數據庫和目標數據庫字符集需保持一致,否則遷移失敗。
源數據庫log_slave_updates參數需設置為開啟狀態,否則會導致遷移失敗。
源數據庫的binlog_row_image參數需設置為FULL,否則會導致遷移失敗。
源數據庫MySQL8.0目前不支持參數lower_case_table_names等于0的遷移。
目標數據庫要求
不支持從高版本遷移到低版本。
建議MySQL目標庫的binlog日志格式為Row格式,否則增量遷移可能出錯。
目標數據庫實例的運行狀態必須正常。
目標數據庫實例必須有足夠的磁盤空間。
除了MySQL系統數據庫之外,目標數據庫不能包含與源數據庫同名的數據庫。
建議目標庫的事務隔離級別至少保證在已提交讀。
DRS遷移時會有大量數據寫入目標庫,目標庫max_allowed_packet 參數過小會導致無法寫入,建議將目標庫max_allowed_packet參數值設置大一點,使其大于100MB。
目標數據庫GTID狀態建議為開啟狀態。
源數據庫和目標數據庫的參數server_uuid相同, 將導致增量遷移失敗。
源數據庫和目標數據庫的參數collation_server需保持一致,否則可能導致遷移失敗。
所選遷移對象和外鍵依賴的表需一起進行遷移,否則會導致遷移失敗。
源數據庫和目標數據庫的參數time_zone需保持一致,否則可能導致遷移失敗。
源數據庫和目標數據庫的sql_mode參數值需保持一致,否則可能導致遷移失敗。
遷移的對象中包含引擎為MyISAM的表,則目標數據庫sql_mode不能包含no_engine_substitution參數,否則可能會導致遷移失敗。
源數據庫和目標數據庫的innodb_strict_mode參數值需保持一致,否則可能導致遷移失敗。
目標數據庫和源數據庫的lower_case_table_names參數需保持一致,否則可能導致遷移失敗。
目標數據庫的log_bin_trust_function_creators參數需設置為on,否則可能導致遷移失敗。