MySQL->RDS for MySQL
使用技巧(需要人為配合)
推薦提前2-3天啟動任務,并配合如下使用技巧和操作要求,以確保任務穩定運行。
基于以下原因,建議您結合定時啟動功能,選擇業務低峰期開始運行同步任務。
全量同步會對源數據庫增加50MB/s的查詢壓力,以及2~4個核的CPU壓力。
同步無主鍵表時,為了確保數據一致性,會存在3s以內的單表級鎖定。
正在同步的數據被其他事務長時間鎖死,可能導致讀數據超時。
由于MySQL固有特點限制,CPU資源緊張時,存儲引擎為Tokudb的表,讀取速度可能下降至10%。
建議您結合數據對比的“稍后啟動”功能,選擇業務低峰期進行數據對比,以便得到更為具有參考性的對比結果。由于同步具有輕微的時差,在數據持續操作過程中進行對比任務,可能會出現少量數據不一致對比結果,從而失去參考意義。
如果涉及多對一場景的同步任務,可參考多對一的場景約束及操作建議。
如果涉及表級匯集的多對一同步任務,則不支持DDL,否則會導致同步全部失敗。
操作要求
針對一些無法預知或人為因素及環境突變導致同步失敗的情況,數據庫復制服務提供以下常見的操作限制,供您在同步過程中參考。
表 操作要求
類型名稱
操作限制(需要人為配合)
注意事項
環境要求均不允許在同步過程中修改,直至同步結束。
相互關聯的數據對象要確保同時同步,避免因關聯對象缺失,導致同步失敗。常見的關聯關系:視圖引用表、視圖引用視圖、存儲過程/函數/觸發器引用視圖/表、主外鍵關聯表等。
不支持源數據庫恢復到之前時間點的操作(PITR)。
支持斷點續傳功能,但是對于無主鍵的表可能會出現重復插入數據的情況。
創建同步任務時,不允許將目標庫設為只讀。
當前僅MySQL->MySQL的同步支持多對一任務同步,進行表級多對一同步時,源庫不允許存在無主鍵表。
源庫和目標庫是相同的RDS實例時,不支持沒有庫映射的實時同步。
源庫不允許存在與目標庫同名的無主鍵表。
不支持目標數據庫恢復到全量同步時間段范圍內的PITR操作。
不支持外鍵級聯操作。
進行多對一同步任務時,若多個同步任務同步同一張表,則在任務啟動之后,系統會自動創建一個父任務來關聯多個同步任務,父任務的命名規則為“DRS-Group-(目標庫實例名)”。
若專屬計算集群不支持4vCPU/8G或以上規格實例,則無法創建同步任務。
源庫和目標庫為RDS for MySQL實例時,不支持帶有TDE特性并建立具有加密功能表。
操作須知
實時同步過程中,如果修改了源庫或者目標庫的用戶名、密碼,會導致同步任務失敗,需要在數據庫復制服務控制臺將上述信息重新修改正確,然后重試任務可繼續進行實時同步。一般情況下不建議在同步過程中修改上述信息。
實時同步過程中,如果修改了源庫或者目標庫端口,會導致同步任務失敗。針對該情況,數據庫復制服務提供不同的處理機制。
對于源庫端口,需要在數據庫復制服務控制臺修改為正確的端口,然后重試任務可繼續進行實時同步。
對于目標庫端口,系統自動更新為正確的端口,需要重試任務即可進行同步。一般情況下不建議在同步過程中修改端口。
實時同步過程中,如果源庫為非本云關系型數據庫實例,不支持修改IP地址。如果是本云關系型數據庫實例,對于因修改IP地址導致同步任務失敗的情況,系統自動更新為正確的IP地址,需要重試任務可繼續進行同步。一般情況下,不建議修改IP地址。
不支持強制清理binlog,否則會導致同步任務失敗。
當在全量同步過程中,對MyISAM表執行修改操作時,可能造成數據不一致。
全量同步過程中不支持DDL操作。
表級同步時,增量同步過程中只支持表的DDL操作。
表級同步時,增量同步過程中不建議對表進行重命名操作。
表級同步時,增量同步過程支持使用Online ? ? ? ?DDL,可參考DRS實時同步支持使用Online ? ? ? ?DDL工具。
建議將expire_log_day參數設置在合理的范圍,確保恢復時斷點處的binlog尚未過期,以保證服務中斷后的順利恢復。
環境要求
實時同步對環境有一些特定的要求,請確保環境配置滿足以下條件。該類型的要求系統會自動檢查,并給出處理建議。
表 環境要求
類型名稱
使用限制(DRS自動檢查)
數據庫權限設置
源數據庫帳戶需要具備如下權限:
SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION ? SLAVE、REPLICATION CLIENT。
提供的目標數據庫帳號必須擁有如下權限:
SELECT、CREATE、DROP、DELETE、INSERT、UPDATE。
RDS for MySQL實例的root帳戶默認已具備上述權限。
同步對象約束
支持表、主鍵索引、唯一索引、普通索引、存儲過程、視圖、函數的同步,不支持事件、觸發器的同步。
庫映射時源庫中不允許存在存儲過程、視圖、函數對象。
映射的庫中不允許存在除表外的對象且在同步過程中不允許創建這些對象,否則會導致同步任務失敗。
不支持非MyISAM和非InnoDB表的同步。
不支持已選擇的表與未選擇的表之間互相rename的DDL操作,否則會導致同步任務失敗。
源數據庫要求
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之間。
源數據庫中的庫名不能包含:'<`>/\"以及非ASCII字符。
源數據庫中的表名、視圖名不能包含:'<>/\"以及非ASCII字符。
源數據庫中的庫名和庫映射的名稱不允許為ib_logfile。
不支持非MyISAM和非InnoDB的表同步到RDS。
數據庫映射時,源庫中存在視圖、存儲過程等對象,可能會導致實時同步失敗。
目標數據庫要求
目標數據庫實例的運行狀態必須正常,若數據庫實例是主備實例,復制狀態也必須正常。
目標數據庫實例必須有足夠的磁盤空間。
除了MySQL系統數據庫之外,當目標庫和源庫同名時,目標數據庫中若存在與源庫同名的表,則表結構必須與源庫保持一致。
目標數據庫的字符集必須與源數據庫一致。
目標數據庫的時區設置必須與源數據庫一致。
DRS同步時會有大量數據寫入目標庫,目標庫max_allowed_packet 參數過小會導致無法寫入,建議將目標庫max_allowed_packet參數值設置為大于100MB。
同步的對象中包含引擎為MyISAM的表,則目標數據庫sql_mode不能包含no_engine_substitution參數,否則可能會導致同步失敗。
映射到目標庫中的庫名不能包含:“.”、 “<”、“>”、“”、和“'”。