支持的源和目標數據庫
| 源數據庫 | 目標數據庫 |
|---|---|
| RDS for MySQL、 自建 MySQL 5.6部分版本/5.7/8.0 |
RDS for PostgreSQL |
支持的同步對象及SQL
同步對象
- 當前DTS僅支持表級(指定的表對象)同步。
- 數據同步僅針對數據源中的用戶數據庫,而系統庫會被自動過濾。例如:MySQL 類型數據源中的 information_schema、mysql、performance_schema、sys 庫不會出現在可同步列表當中。
- 若源庫為空庫(該庫下未創建任何表),不支持作為待同步對象。
- 支持的轉換類型參見附表,不支持mysql中的空間類型。
- 當前暫不支持庫表列映射等功能。
注意如果待遷移對象包含無主鍵表,可能導致目標端數據重復,更因其上的更新、刪除操作效率低而可能引發同步延遲變大的現象。
增量數據同步支持同步的SQL操作
- DML
- INSERT、UPDATE、DELETE
- DDL
- 增量同步的DDL操作僅支持CREATE INDEX、DROP INDEX、ALTER TABLE、TRUNCATE TABLE 和DROP TABLE,如果是整庫同步,支持CREATE TABLE。
注意
MySQL中索引名與索引所在表關聯,同一database中不同表上可以存在相同名稱的索引,而PG中索引名在同一schema下是唯一的,同一schema下的不同表中不能存在同名索引。因此在建、刪索引時,對索引名進行了重命名處理。
暫不支持 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 REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, PROCESS ON *.* TO '同步賬號'@'%';
源庫為MySQL8.0時:
GRANT SELECT ON mysql.* TO '同步賬號'@'%';
GRANT SELECT, EXECUTE, EVENT, TRIGGER ON 待同步的庫.* TO '同步賬號'@'%';
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT, SHOW VIEW, SHOW_ROUTINE ON *.* TO '同步賬號'@'%';
目標庫
schema的創建權限
授予用戶user_name在數據庫database_name下的schema創建權限:
?GRANT CREATE ON DATABASE database_name TO user_name;
注意如果待同步對象包含用戶自定義function,則在滿足上述權限的基礎上,目標端數據庫同時需將log_bin_trust_function_creators參數設置為1,參考語句如下:set global log_bin_trust_function_creators = 1;
操作需知
DTS同步過程一般包含四個階段:預檢查階段、結構同步階段、全量階段、增量階段。為了確保數據同步各個階段的平順,在創建同步任務前,請務必閱讀以下使用須知。
任務開始前
源庫要求
- 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不同步USER信息,因此在調用目標庫的視圖、存儲過程和函數時需要對調用者授予讀寫權限。
- 建議在適當的范圍內設置源庫的expire_log_day參數,以確保在服務中斷后能夠順利恢復,并保證斷點處的binlog尚未過期。
- 在任務進入增量遷移階段之前,不建議對源數據庫做DDL操作,這樣可能會引起任務遷移失敗。
- 遷移過程中,請勿修改、刪除提供給DTS連接訪問的源庫和目標庫及用戶名、密碼、權限,或修改源庫和目標庫的端口號;若用戶源庫、目標庫的密碼發生變化,請先暫停任務再修改DTS配置的連接源庫、目標庫的密碼。
- 選擇表級對象同步時,增量同步過程中不建議對表進行重命名操作。
- 增量同步場景下,不支持源數據庫進行恢復操作。
- 當將MySQL5.x同步到PostgreSQL,如源端數據庫的引擎類型為MyISAM時,請您先手工將源端的MyISAM存儲引擎改為InnoDB再進行同步。
- 增量遷移并開啟增量DDL支持的場景下,當前暫不支持在結構遷移與全量遷移詳情頁面顯示增量階段新增的表。
- 若源表使用了外鍵約束如FOREIGN KEY REFERENCES ON DELETE CASCADE或FOREIGN KEY REFERENCES ON UPDATE CASCADE時,當刪除或更新父表的數據時,子表關聯的數據會被自動刪除或更新,但這些子表的刪除或更新操作并不會記錄到源庫的二進制日志(Binlog)中,從而導致遷移后數據不一致的問題。為解決該問題,可在使用DTS遷移數據前在源庫創建觸發器實現關聯子表的數據操作,確保所需執行的刪除或更新都可以記錄到Binlog中,從而保證遷移前后的數據一致性。
目標庫要求
- 若要做增量同步,且同步對象包含外鍵,則目標數據庫的session_replication_role參數必須設置為replica,同步結束后,此參數需改為origin。
- 目標庫不可以包含與待同步對象類型相同且名稱相同的表,否則任務可能出錯。系統庫、系統模式、系統表等除外。
- 選擇表級對象同步時,增量同步過程中不建議對表進行重命名操作。
- 目標數據庫關聯RDS實例必須有足夠的磁盤空間,磁盤大小建議取以下兩種中的最小值:。
- 源庫待同步數據量大小的1.5倍。
- 源庫待同步數據量大小加200GB。
結構、全量過程中
- 請勿修改源庫和目標庫的端口號,請勿修改、刪除源庫和目標庫連接用戶的密碼、權限,否則可能導致任務失敗。
- 請勿在源庫執行任何DDL,否則可能導致數據不一致或任務失敗。
- 請勿在目標庫做寫入操作,否則可能導致數據不一致。
增量過程中
- 請勿修改源庫和目標庫的端口號,請勿修改、刪除源庫和目標庫連接用戶的密碼、權限,否則可能導致任務失敗。
- 請勿修改源數據庫表的主鍵或者唯一鍵(主鍵不存在時),否則可能導致增量數據不一致或任務失敗。
- 請勿在目標庫做寫入操作,否則可能導致數據不一致。
數據稽核
- 建議在源庫的業務低峰期進行數據比對,防止誤報不一致數據,以及減少對源庫和DTS任務的沖擊。
- 在增量同步過程中做對比時,源庫若存在寫入,則對比結果可能不一致。
操作步驟
-
購買DTS數據同步實例。
在管理控制臺點擊“創建實例”進入訂購頁面,“資源配置”選擇“引導模式”中,“場景功能”選擇“數據同步”,“源數據庫”選擇“MySQL”,“目標數據庫”選擇“PostgreSQL”,完成其他信息的填寫并完成購買;說明相關配置信息,除“資源配置”的“鏈路規格”和“網絡配置”訂購后不可修改外,其他選擇均可在實例配置頁面修改。
-
進入實例配置頁面。
DTS實例購買成功后,進入【數據同步】實例列表頁面,上一步驟購買成功的實例在實例列表中顯示狀態為“待配置”,進入實例配置頁面的操作。
-
配置源庫及目標庫信息。
進入實例配置第一個步驟的【配置源庫及目標庫信息】頁面,填入源庫與目標庫的相關配置信息,包括數據庫類型、IP地址端口、數據庫賬號、數據庫密碼等信息。
完成上述信息的填寫后,點擊源數據庫和目標數據庫的“測試連接”按鈕進行數據庫連接測試,檢查數據庫能否正常連接。
-
配置同步對象及高級配置。
源庫和目標庫連通性測試成功后,點下一步按鈕,進入實例配置第二個步驟的【配置同步對象及高級配置】頁面,在“源庫對象”中選擇要遷移的源庫對象,包含:庫、TABLE,選中后點擊“>”按鈕,將待同步對象移動到“已選擇對象”中。
-
預檢查。
點擊“下一步預檢查”,進入【預檢查】頁面。預檢查會檢查如下列表信息,并給出檢查結果,用戶可以依據檢查結果進行下一步操作。
檢查項
檢查內容
log_slave_updates參數檢查
如果源庫為集群的從節點,檢查源庫的log_slave_updates參數是否設置為ON。
存儲引擎檢查
檢查源庫中待同步的表的存儲引擎。
待同步表主鍵檢查
檢查待同步表是否都存在主鍵。
源庫binlog存在性檢查
查看源庫的binlog文件是否被誤刪除。
源庫binlog影像類型檢查
查看源庫的binlog_row_image參數是不是FULL。
源庫binlog是否開啟檢查
查看源庫的log_bin參數是不是ON。
源庫binlog保留時間檢查
檢查源庫的binlog保留時間是否滿足要求。
源庫binlog模式檢查
查看源庫的binlog_format參數是不是ROW。
源庫和目標庫字符集一致性檢查
檢查源庫和目標庫的字符集是否一致。
源庫用戶權限檢查
檢查源庫用于DTS任務的用戶是否具有相應的權限。
目標庫用戶權限檢查
檢查目標庫用于DTS任務的用戶是否具有相應的權限。
目標庫連通性檢查
檢查數據傳輸服務器能否連通目標數據庫。
-
確認配置和啟動同步。
預檢查通過后,點擊“下一步”進入【確認配置】頁面,用戶可確認配置的所有信息,確認無誤后,點擊右下角的【啟動任務】,開始同步任務。
MySQL - PostgreSQL類型轉換附表
MySQL PostgreSQL 數值類型 bit bit boolean boolean bigint bigint bigint unsigned numeric int integer int unsigned bigint smallint smallint smallint unsigned integer mediumint integer mediumint unsigned integer tinyint? smallint tinyint unsigned smallint float real float unsigned double precision double double precision decimal decimal 字符類型 char char varchar? varchar text text tinytext text mediumtext text longtext text binary bytea varbinary bytea tinyblob bytea blob bytea mediumblob bytea longblob bytea enum varchar set varchar json varchar 時間類型 year integer date(
'1000-01-01' to '9999-12-31'
)
date(
4713 BC to ?5874897 AD
)
time(
'-838:59:59.000000'-'838:59:59.000000'
)
time(
'00:00:00'-'24:00:00'
)
datetime(?'1000-01-01 00:00:00'?to?'9999-12-31 23:59:59') timestamp timestamp('1970-01-01 00:00:01.000000'?to?'2038-01-19 03:14:07.499999') timestamp