數據同步支持的源和目標數據庫
| 源數據庫 | 目標數據庫 |
|---|---|
| RDS for MySQL 自建 MySQL 5.6部分版本/5.7/8.0 |
RDS for MySQL |
說明自建MySQL數據庫版本為5.6部分版本/5.7/8.0,且源數據庫版本不得高于目標數據庫版本。
支持的同步對象及SQL
同步對象
- 當前DTS支持表級(指定的表對象)、庫級(整庫)同步。
- 支持表、索引、存儲過程、視圖、函數、事件、觸發器的結構同步。
- 支持源庫賬號及權限、密碼遷移。
注意事項
- 視圖、存儲過程、函數依賴的表不支持做表名映射。
- 在結構同步時,如果源數據源中包含視圖(VIEW)、函數(FUNCTION)、存儲過程(PROCEDURE)、觸發器(TRIGGER)、事件(EVENT),DTS會將上述對象的定義者(DEFINER)轉換為當前同步任務中訪問目標數據源的賬號,原定義者賬號將保留調用權限(INVOKER)。
- 數據同步僅針對數據源中的用戶數據庫,而系統庫會被自動過濾。例如:MySQL 類型數據源中的 information_schema、mysql、performance_schema、sys 庫不會出現在可同步列表當中。
- 同步過程中,如果待同步對象中存在觸發器或事件,則系統會在全量同步結束以后才會同步觸發器和事件。
- 若源庫為空庫(該庫下未創建任何表、視圖、函數、事件、觸發器、存儲過程),不支持作為待同步對象。
- 如果待遷移對象包含無主鍵表,可能導致目標端數據重復,更因其上的更新、刪除操作效率低而可能引發同步延遲變大的現象。
- 當進行賬號權限遷移時:
- 會對源庫賬號的授權信息和目標庫登錄用戶的授權信息進行檢查;如果目標庫登錄用戶不包含源庫賬號所需的授權信息,則該源庫賬號的權限不進行遷移。
- 如果源庫和目標庫存在相同的賬號信息,則在目標端會跳過該賬號和權限的遷移。
- 賬號遷移在所有表,視圖,函數等結構遷移完成之后再遷移。
增量數據同步支持同步的SQL操作
-
DML
INSERT、UPDATE、DELETE。
-
DDL
增量同步的DDL操作僅支持CREATE INDEX、DROP INDEX、ALTER TABLE、TRUNCATE TABLE 和DROP TABLE,如果是整庫同步,支持CREATE TABLE。
注意暫不支持 CREATE TABLE 表名 AS SELECT 語句。
數據庫賬號及權限
數據庫賬號及權限如下表:
數據庫 所需權限 參考賦權語句 源庫 源庫為MySQL5.7時:
對MySQL庫的SELECT權限。
對待同步庫的SELECT,EVENT,TRIGGER權限。
?部分全局權限:
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
PROCESS
如果是整庫同步,需要對所有數據庫的查詢權限。
源庫為MySQL8.0時:
對MySQL庫的SELECT權限。
對待同步庫的SELECT,?EXECUTE,?EVENT,TRIGGER權限。
?部分全局權限:
PROCESS
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
SHOW_ROUTINE
如果是整庫同步,需要對所有數據庫的查詢權限。
源庫為MySQL5.7時:
GRANT SELECT ON mysql.* TO '同步賬號'@'%';
GRANT SELECT, EVENT,TRIGGER ON 待同步的庫.* TO '同步賬號'@'%';
GRANT RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, PROCESS ON *.* TO '同步賬號'@'%';
源庫為MySQL8.0時:
GRANT?SELECT?ON mysql.*?TO?'同步賬號'@'%';
GRANT?SELECT,?EXECUTE,?EVENT,?TRIGGER?ON?待同步的庫.*?TO?'同步賬號'@'%';
GRANT?RELOAD,?PROCESS,?REPLICATION?SLAVE,?REPLICATION?CLIENT,?SHOW?VIEW,?SHOW_ROUTINE?ON *.* TO '同步賬號'@'%';
目標庫
以下全局權限:
SHOW DATABASES
PROCESS
CREATE USER
以下18項 庫權限:
ALTER
ALTER ROUTINE
CREATE?
CREATE ROUTINE
CREATE TEMPORARY TABLES
CREATE VIEW
DELETE
DROP
EVENT
EXECUTE
INDEX?INSERT
REFERENCES
SELECT
SHOW VIEW
TRIGGER
UPDATE
GRANT SELECT ON mysql.* TO '遷移賬號'@'%';
GRANT SHOW DATABASES,PROCESS,CREATE USER ON *.*?TO '遷移賬號'@'%';
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES,CREATE VIEW, DELETE ,DROP, EVENT, EXECUTE, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE ON `待遷移庫`.* TO '遷移賬號'@'%';
注意如果待同步對象包含用戶自定義function,則在滿足上述權限的基礎上,目標端數據庫同時需將log_bin_trust_function_creators參數設置為1,參考語句如下:
set?global?log_bin_trust_function_creators?=?1;
操作須知
-
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之間。
-
源數據庫GTID狀態建議為開啟狀態,源數據庫實例沒有開啟GTID的情況下DTS不支持主備HA切換,因為DTS任務會因為位點不續接而中斷導致無法恢復。
-
目標庫若已存在數據,DTS在增量同步過程中源庫相同主鍵的數據將覆蓋目標庫已存在的數據,因此在同步前需要用戶自行判斷數據是否需要清除,建議用戶在同步前自行清空目標庫。
-
目標實例及關聯RDS實例的運行狀態必須正常,若關聯RDS實例是主備實例,復制狀態也必須正常。
-
目標庫關聯RDS實例必須有足夠的磁盤空間,建議至少為待同步數據量的2.5倍。(全量數據同步會并發執行 INSERT 操作,導致目標數據庫的表產生碎片,因此全量同步完成后目標數據庫的表存儲空間會比源實例的表存儲空間大,且會產生大量的BINLOG,占用大量空間)。
-
目標庫關聯RDS數據庫的字符集必須與源數據庫一致。
-
在結構同步時,DTS會將視圖、存儲過程和函數中的DEFINER轉換為INVOKER。
-
由于DTS不同步USER信息,因此在調用目標庫的視圖、存儲過程和函數時需要對調用者授予讀寫權限。
-
建議在適當的范圍內設置源庫的expire_log_day參數,以確保在服務中斷后能夠順利恢復,并保證斷點處的binlog尚未過期。
-
在任務進入增量遷移階段之前,不建議對源數據庫做DDL操作,這樣可能會引起任務遷移失敗。
-
遷移過程中,請勿修改、刪除提供給DTS連接訪問的源庫和目標庫及用戶名、密碼、權限,或修改源庫和目標庫的端口號;若用戶源庫、目標庫的密碼發生變化,請先暫停任務再修改DTS配置的連接源庫、目標庫的密碼。
-
選擇表級對象同步時,增量同步過程中不建議對表進行重命名操作。
-
增量同步場景下,不支持源數據庫進行恢復操作。
-
增量同步場景下,支持無主鍵表的數據同步。
-
當將MySQL5.x同步到MySQL5.7,如源端數據庫的引擎類型為MyISAM時,請您先手工將源端的MyISAM存儲引擎改為InnoDB再進行同步。
-
當將MySQL5.x同步到MySQL8.x,如源端數據庫的引擎類型為MyISAM時,DTS自動將目標庫的引擎類型轉換為innoDB。
-
當您在同步數據時包含了觸發器(TRIGGER),可能會因為DTS寫入目標端的增量數據觸發TRIGGER導致源庫和目標庫數據不一致。為避免數據不一致的問題,DTS會在同步時在觸發器對象頭部加入觸發控制語句,示例代碼如下所示:
-
源庫觸發器:
CREATE TRIGGER testtrigger BEFORE INSERT ON test1 FOR EACH ROW BEGIN UPDATE test SET num = num - 1 WHERE id = 1; END; -
目標庫觸發器:
CREATE TRIGGER testtrigger BEFORE INSERT ON test1 FOR EACH ROW BEGIN IF (SELECT @`__#ctyun_dts_writer#__) IS NULL THEN UPDATE test SET num = num - 1 WHERE id = 1; END IF; END;
-
-
增量遷移并開啟增量DDL支持的場景下,當前暫不支持在結構遷移與全量遷移詳情頁面顯示增量階段新增的表。
-
如果只勾選增量遷移,請確保目標端已經存在源端庫表和所需數據,數據同步可指定增量位點。
-
若源表使用了外鍵約束如FOREIGN KEY REFERENCES ON DELETE CASCADE或FOREIGN KEY REFERENCES ON UPDATE CASCADE時,當刪除或更新父表的數據時,子表關聯的數據會被自動刪除或更新,但這些子表的刪除或更新操作并不會記錄到源庫的二進制日志(Binlog)中,從而導致遷移后數據不一致的問題。為解決該問題,可在使用DTS遷移數據前在源庫創建觸發器實現關聯子表的數據操作,確保所需執行的刪除或更新都可以記錄到Binlog中,從而保證遷移前后的數據一致性。
操作步驟
1、購買DTS數據同步實例。
在管理控制臺點擊“創建實例”進入訂購頁面,“實例類型”選擇“數據同步”,“目標庫實例”的“數據庫類型”選擇MySQL,選擇實例,完成其他信息的填寫并完成購買。
2、進入實例配置頁面。
DTS實例購買成功后,進入【數據同步】實例列表頁面,上一步驟購買成功的實例在實例列表中顯示狀態為“待配置”,進入實例配置頁面的操作分兩種情況:
- 當DTS實例的網絡接入類型為“公網EIP”時,請先點擊“綁定彈性IP”按鈕完成公網彈性IP的綁定,然后點擊該實例操作列的“實例配置”按鈕。
- 當DTS實例網絡接入類型為“VPC網絡”時,直接點擊該實例操作列的“實例配置”按鈕。
3、配置源庫及目標庫信息。
進入實例配置第一個步驟的【配置源庫及目標庫信息】頁面,填入源庫與目標庫的相關配置信息,包括數據庫類型、IP地址端口、數據庫賬號、數據庫密碼等信息。
完成上述信息的填寫后,點擊源數據庫和目標數據庫的“測試連接”按鈕進行數據庫連接測試,檢查數據庫能否正常連接。
4、配置同步對象及高級配置。
源庫和目標庫連通性測試成功后,點下一步按鈕,進入實例配置第二個步驟的【配置同步對象及高級配置】頁面,在“源庫對象”中選擇要遷移的源庫對象,包含:庫、TABLE、VIEW、FUNCTION等,選中后點擊“>”按鈕,將待同步對象移動到“已選擇對象”中。
根據同步需要,勾選遷移模式、同步策略、是否包含增量DDL、是否遷移數據庫賬號和權限、是否限制全量遷移速率等選項。
說明關于配置同步對象及高級配置頁面的詳細說明,與配置遷移對象類似,具體請參考數據傳輸服務 - 用戶指南 - 數據遷移 - 實例配置和實例編輯 - 配置遷移實例文檔配置遷移對象及高級配置詳細說明。
5、預檢查。
完成同步對象和高級配置后,點擊“下一步預檢查”,進入【預檢查】頁面。預檢查會檢查如下列表信息,并給出檢查結果,用戶可以依據檢查結果進行下一步操作。
| 檢查項 | 檢查內容 |
|---|---|
| gtid_mode參數檢查 | 檢查源庫和目標庫的gtid_mode參數是否為ON。 |
| lower_case_table_names一致性檢查 | 檢查源車和目標庫的lower_case_table_names變量是否一致。 |
| mysql版本檢查 | 檢查源庫和目標庫的mysql版本是不是符合要求。 |
| schema字符集檢查 | 檢查待同步庫的字符設置是否在要求范圍內。 |
| sql_mode參數一致性檢查 | 檢查源庫和目標庫的sql_mode參數是否一致。 |
| log_slave_updates參數檢查 | 如果源庫為集群的從節點,檢查源庫的log_slave_updates參數是否設置為ON。 |
| 同名對象存在性檢查 | 檢查目標庫中是否存在和待同步庫同名的庫,若存在,檢查該庫下面是否存在同名的表、視圖、函數和存儲過程。 |
| 存儲引擎檢查 | 檢查源庫中待同步的表的存儲引擎。 |
| 待同步表主鍵檢查 | 檢查待同步表是否都存在主鍵。 |
| 源庫binlog存在性檢查 | 查看源庫的binlog文件是否被誤刪除。 |
| 源庫binlog影像類型檢查 | 查看源庫的binlog_row_image參數是不是FULL。 |
| 源庫binlog是否開啟檢查 | 查看源庫的log_bin參數是不是ON。 |
| 源庫binlog保留時間檢查 | 檢查源庫的binlog保留時間是否滿足要求。 |
| 源庫binlog模式檢查 | 查看源庫的binlog_format參數是不是ROW。 |
| 源庫server_id檢查 | 查看源庫的server_id是否大于0。 |
| 源庫和目標庫字符集一致性檢查 | 檢查源庫和目標庫的字符集是否一致。 |
| 源庫和目標庫時區一致性檢查 | 檢查源庫和目標庫的時區設置的值是否一致。 |
| 源庫用戶權限檢查 | 檢查源庫用于DTS任務的用戶是否具有相應的權限。 |
| 源庫連通性檢查 | 檢查數據傳輸服務能否連通源數據庫。 |
| 目標庫連通性檢查 | 檢查數據傳輸服務器能否連通目標數據庫。 |
| 目標庫日志包大小檢查 | 檢查目標庫的日志包大小是否符合要求。 |
| 目標庫用戶權限檢查 | 檢查目標庫用于DTS任務的用戶是否具有相應的權限。 |
6、確認配置和啟動
預檢查通過后,點擊“下一步”進入【確認配置】頁面,用戶可確認配置的所有信息,確認無誤后,點擊右下角的【啟動任務】,開始同步任務。
