支持的源和目標數據庫
支持的源和目標數據庫,如下表:
| 源數據庫 | 目標數據庫 |
|---|---|
RDS for MySQL 自建 MySQL 5.6部分版本/5.7/8.0 | 云數據庫ClickHouse 22.8.9.24 |
說明
源庫為自建MySQL數據庫時,支持的版本為5.6部分版本/5.7/8.0。
支持的遷移對象及SQL
遷移對象
當前DTS支持表級(指定的表對象)遷移。
支持表的結構遷移。
數據遷移僅針對數據源中的用戶數據庫,而系統庫會被自動過濾。例如:MySQL 數據源中的 information_schema、mysql、performance_schema、sys 庫不會出現在可遷移列表當中。
若源庫為空庫(該庫下未創建任何表),不支持作為待遷移對象。
增量遷移支持的SQL操作
DML
INSERT、UPDATE、DELETE。
DDL
增量遷移的DDL操作僅支持ALTER TABLE下的ADD COLUMN、MODIFY COLUMN、RENAME COLUMN、DROP COLUMN操作,以及TRUNCATE TABLE、DROP TABLE操作。如果是整庫遷移,也支持CREATE TABLE。
注意
- 暫不支持 CREATE TABLE 表名 AS SELECT 語句和 CREATE TABLE表名LIKE語句。
MySQL-ClickHouse數據類型映射
數據類型映射關系如下表:
| 類型 | 源實例中的數據類型 | 數值范圍 | ClickHouse |
|---|---|---|---|
| 整數類型 | BIT[(M)] | 1 ~ 64 | UInt64 |
| TINYINT[(M)] | -128 ~ 127 | Int8 | |
| TINYINT[(M)] UNSIGNED | 0 ~ 255 | UInt8 | |
| SMALLINT[(M)] | -32768 ~ 32767 | Int16 | |
| SMALLINT[(M)] UNSIGNED | 0 ~ 65535 | UInt16 | |
| MEDIUMINT[(M)] | -8388608 ~ 8388607 | Int32 | |
| MEDIUMINT[(M)] UNSIGNED | 0 ~ 16777215 | UInt32 | |
| INT[(M)] | -2147483648 ~ 2147483647 | Int32 | |
| INT[(M)] UNSIGNED | 0 ~ 4294967295 | UInt32 | |
| BIGINT[(M)] | -9223372036854775808 ~ 9223372036854775807 | Int64 | |
| BIGINT[(M)] UNSIGNED | 0 ~ 18446744073709551615 | UInt64 | |
| 小數類型 | DECIMAL[(M[,D])] M:0~65 ; D:0~30 | DECIMAL | DECIMAL(10, 0) |
| DECIMAL(M) | DECIMAL(M, 0) | ||
| DECIMAL(M, D) | DECIMAL(M, D) | ||
DEC[(M[,D])] M:0~65 ; D:0~30 | DEC | DECIMAL(10, 0) | |
| DEC(M) | DECIMAL(M, 0) | ||
| DEC(M, D) | DECIMAL(M, D) | ||
NUMERIC[(M[,D])] M:0~65 ; D:0~30 | NUMERIC | DECIMAL(10, 0) | |
| NUMERIC(M) | DECIMAL(M, 0) | ||
| NUMERIC(M, D) | DECIMAL(M, D) | ||
FIXED[(M[,D])] M:0~65 ; D:0~30 | FIXED | DECIMAL(10, 0) | |
| FIXED(M) | DECIMAL(M, 0) | ||
| FIXED(M, D) | DECIMAL(M, D) | ||
| FLOAT[(M,[D])] | 1.175494351E-38 ~ 3.402823466E+38 | Float32 | |
| DOUBLE[(M,D)] | 2.2250738585072014E-308 ~ 1.7976931348623157E+308 | Float64 | |
| REAL[(M,D)] | 1.175494351E-38 ~ 3.402823466E+38 | Float32 | |
| 時間類型 | DATE | 1000-01-01~9999-12-31 說明 格式為YYYY-MM-DD。 | DATE |
DATETIME[(fsp)] 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 說明 格式為YYYY-MM-DD hh:mm:ss[.fraction](UTC時間)。 | DATETIME | DateTime64(0) | |
| DATETIME(fsp) | DateTime64(fsp) | ||
| TIMESTAMP[(fsp)] | 1970-01-01 00:00:01.000000 ~ 2038-01-19 03:14:07.999999 說明 格式為YYYY-MM-DD hh:mm:ss[.fraction](UTC時間)。 | DateTime64[(fsp)]說明: 不包含時區信息,clickhouse的時區建議和源庫MySQL的時區保持一致。 | |
| TIME[(fsp)] | -838:59:59.000000 ~ 838:59:59.000000 說明 格式為hh:mm:ss[.fraction](UTC時間)。 | STRING | |
| YEAR[(4)] | 1901 ~ 2155,或0000. | Int16 | |
| 字符串類型 | CHAR[(M)] | 0 ~ 255 字符 | STRING |
| VARCHAR(M) | 0 ~ 65,535 字符 | STRING | |
BINARY[(M)] 0 ~ 255 字節 | BINARY | FixedString(1) | |
| BINARY(M) | FixedString(M) | ||
| VARBINARY(M) | 0 ~ 65,535 字節 | STRING | |
| TINYBLOB | 255 (2^8 ? 1) 字節 | STRING | |
| TINYTEXT | 255 (2^8 ? 1) 字符 | STRING | |
| BLOB | 65,535 (2^16 ? 1) 字節 | STRING | |
| TEXT | 65,535 (2^16 ? 1) 字符 | STRING | |
| MEDIUMBLOB | 16,777,215 (2^24 ? 1) 字節 | STRING | |
| MEDIUMTEXT | 16,777,215 (2^24 ? 1) 字符 | STRING | |
| LONGBLOB | 4,294,967,295 or 4GB (2^32 ? 1) 字節 | STRING | |
| LONGTEXT | 4,294,967,295 or 4GB (2^32 ? 1) 字符 | STRING | |
| ENUM('value1','value2',...) | 最多可包含65,535枚舉值 | ENUM('value1','value2',...) | |
| SET('value1','value2',...) | 最多可包含64個元素 | STRING | |
| 空間類型 | GEOMETRY | 任意幾何類型的值 | STRING |
| POINT | 無 | STRING | |
| LINESTRING | 無 | STRING | |
| POLYGON | 無 | STRING | |
| MULTIPOINT | 無 | STRING | |
| MULTILINESTRING | 無 | STRING | |
| MULTIPOLYGON | 無 | STRING | |
| GEOMETRYCOLLECTION | 任何幾何類型的值的集合 | STRING | |
| JSON類型 | JSON | 無 | STRING |
ClickHouse的時間類型數據存在范圍限制,若MySQL中的時間不在該范圍內,會導致遷移到云數據庫ClickHouse的時間不正確。
| MySQL數據類型 | 最小值 | 最大值 | 映射到ClickHouse數據類型 | 最小值 | 最大值 |
|---|---|---|---|---|---|
| Date | 1000-01-01 | 9999-12-31 | Date | 1970-01-01 00:00:00 | 2149-06-06 00:00:00 |
| Date32 | 1925-01-01 00:00:00 | 2283-11-11 00:00:00 | |||
| DateTime | 1970-01-01 08:00:00 | 2106-02-07 14:28:15 | |||
| TimeStamp | 1970-01-01 00:00:01.000000 | 2038-01-19 03:14:07.999999 | DateTime64 | 1925-01-01 08:00:00 | 2283-11-12 07:59:59 |
| DateTime | 1000-01-01 00:00:00.000000 | 9999-12-31 23:59:59.999999 | DateTime64 | 同上 | 同上 |
數據庫賬號及權限
數據庫賬號及權限如下表:
| 數據庫 | 所需權限 | 參考賦權語句 |
|---|---|---|
| 源庫 | 源庫為MySQL5.7時:
源庫為MySQL8.0時:
| 源庫為MySQL5.7時:
|
| 目標庫 | 以下全局權限: 以下庫級別權限: | 一鍵授權: GRANT [ON CLUSTER 集群名稱] SHOW USERS, SHOW ROLES, REMOTE, ALTER ADD COLUMN, ALTER MODIFY COLUMN, ALTER DROP COLUMN, ALTER RENAME COLUMN, CREATE DATABASE, CREATE TABLE, DROP TABLE, TRUNCATE ON *.* TO '遷移賬號'; |
注意
如果目標庫ClickHouse不是集群部署,請將授權語句中的集群部分‘[ON CLUSTER 集群名稱]’去掉。
目標庫ClickHouse表結構說明
遷移到ClickHouse的表結構和ClickHouse的部署架構有關:
集群部署,單副本
在集群的每個節點上創建一個本地表和一個分布式表。分布式表的名稱與源端表名映射后的名字一致,本地表的名稱為<分布式表名稱>+_local,本地表使用ReplacingMergeTree引擎。集群部署,多副本
在集群的每個節點上創建一個本地表和一個分布式表。分布式表的名稱與源端表名映射后的名字一致,本地表的名稱為<分布式表名稱>+_local,本地表使用ReplicatedReplacingMergeTree引擎。
此外,DTS會在目標表(包括本地表和分布式表)中添加兩個字段:
_ctyun_dts_version ,類型為UInt64,默認值為now(),記錄了數據插入的時間戳;
_ctyun_dts_sign,類型為Int8,默認值為0,標記數據的存在性,0表示數據存在,1表示數據已邏輯刪除。
用戶可使用where條件過濾掉ClickHouse被邏輯刪除的數據,例如:select * from table_name final where _ctyun_dts_sign< 1,其中,表名后的final字段可以過濾相同排序鍵的數據。
| 名稱 | 數據類型 | 默認值 | 說明 |
|---|---|---|---|
_ctyun_dts_sign | Int8 | 0 | 記錄是否被刪除: |
_ctyun_dts_version | UInt64 | now() | 數據寫入ClickHouse的時間戳。 |
操作須知
DTS遷移過程一般包含四個階段:預檢查階段、結構遷移階段、全量階段、增量階段。為了確保數據遷移各個階段的平順,在創建遷移任務前,請務必閱讀以下使用須知。
待遷移對象不支持無主鍵的表。
在庫表結構遷移階段,DTS會在目標表中添加字段_ctyun_dts_version和_ctyun_dts_sign。若您配置遷移類型時未勾選庫表結構遷移,則需要手動在目標端創建接收數據的表,并在表中添加額外的字段。根據目標端ClickHouse的部署架構,需要創建的表結構也不相同,具體請查看“目標庫ClickHouse表結構說明”章節。
如遷移對象為表級別,則單次遷移任務僅支持遷移最多10000張表。當超出數量限制,任務會在提交后會請求報錯。如果遇到這種情形,建議您拆分待遷移的表,分批配置成多個任務,或者配置為整庫遷移。
目標庫若已存在行數據,DTS在增量遷移過程中源庫相同主鍵的數據將覆蓋目標庫已存在的數據,因此在啟動遷移任務前需要用戶自行判斷數據是否需要清除,建議用戶在遷移前自行清空目標庫。
MySQL源數據庫的binlog日志必須打開,且binlog日志格式必須為Row格式。
在磁盤空間允許的情況下,建議源數據庫binlog保存時間越長越好,建議為7天。否則DTS在增量遷移時可能因無法獲取Binlog而導致任務失敗。由于您所設置的Binlog日志保存時間低于DTS要求的時間進而導致的問題,不在DTS的SLA保障范圍內。
在任務進入增量遷移階段之前,不建議對源數據庫做DDL操作,這樣可能會引起任務遷移失敗。
遷移過程中,請勿修改、刪除提供給DTS連接訪問的源庫和目標庫及用戶名、密碼、權限,或修改源庫和目標庫的端口號;若用戶源庫、目標庫的密碼發生變化,請先暫停任務再修改DTS配置的連接源庫、目標庫的密碼。
選擇表級對象遷移時,增量遷移過程中不建議對表進行重命名操作。
增量遷移場景下,不支持源數據庫進行恢復操作。
增量遷移并開啟增量DDL支持的場景下,當前暫不支持在結構遷移與全量遷移詳情頁面顯示增量階段新增的表。
若源表使用了外鍵約束如FOREIGN KEY REFERENCES ON DELETE CASCADE或FOREIGN KEY REFERENCES ON UPDATE CASCADE時,當刪除或更新父表的數據時,子表關聯的數據會被自動刪除或更新,但這些子表的刪除或更新操作并不會記錄到源庫的二進制日志(Binlog)中,從而導致遷移后數據不一致的問題。為解決該問題,可在使用DTS遷移數據前在源庫創建觸發器實現關聯子表的數據操作,確保所需執行的刪除或更新都可以記錄到Binlog中,從而保證遷移前后的數據一致性。
操作步驟
1、購買DTS數據遷移實例。
在管理控制臺點擊“創建實例”進入訂購頁面,“實例類型”選擇“數據遷移”,“目標庫實例”的“數據庫類型”選擇ClickHouse,選擇實例,完成其他信息的填寫并完成購買。
說明
遷移前請您詳細閱讀快速入門-準備工作概覽-網絡準備章節內容,了解并做好網絡方面的準備工作。
2、進入實例配置頁面。
DTS實例購買成功后,進入【數據遷移】實例列表頁面,上一步驟購買成功的實例在實例列表中顯示狀態為“待配置”,進入實例配置頁面的操作分兩種情況:
當DTS實例的網絡接入類型為“公網EIP”時,請先點擊“綁定彈性IP”按鈕完成公網彈性IP的綁定,然后點擊該實例操作列的“實例配置”按鈕。
當DTS實例網絡接入類型為“VPC網絡”時,直接點擊該實例操作列的“實例配置”按鈕。
3、配置源庫及目標庫信息。
進入實例配置第一個步驟的【配置源庫及目標庫信息】頁面,填入源庫與目標庫的相關配置信息,包括數據庫類型、IP地址端口、數據庫賬號、數據庫密碼等信息。
完成上述信息的填寫后,點擊源數據庫和目標數據庫的“測試連接”按鈕進行數據庫連接測試,檢查數據庫能否正常連接。
4、配置遷移對象及高級配置。
源庫和目標庫連通性測試成功后,點下一步按鈕,進入實例配置第二個步驟的【配置遷移對象及高級配置】頁面,在“源庫對象”中選擇要遷移的源庫對象,選中后點擊“>”按鈕,將待遷移對象移動到“已選擇對象”中。
頁面下方展示了檢測到的ClickHouse部署架構:如果為非集群,表引擎固定選中ReplacingMergeTree。如果為集群,用戶可以選擇一個集群名稱。如果是單副本集群,則固定選中ReplacingMergeTree引擎;如果是多副本集群,則固定選中ReplicatedReplacingMergeTree引擎。
說明
關于配置遷移對象及高級配置頁面的詳細說明,請參考數據傳輸服務 - 用戶指南 - 數據遷移 - 實例配置和實例編輯 - 配置遷移實例文檔中配置遷移對象及高級配置詳細說明。
5、定義ClickHouse表的各種鍵
完成遷移對象和高級配置后,點擊“下一步”,進入ClickHouse表的定義頁面。在這里可以選擇ClickHouse表的排序鍵、主鍵、分布鍵、分區鍵:
ClickHouse表的排序鍵默認為源端MySQL表的主鍵;
ClickHouse表的主鍵默認為其排序鍵,并且只能從其排序鍵中選擇一列或多列,且必須匹配排序鍵的最左前綴;
ClickHouse表的分布鍵默認為其排序鍵中第一個有非空約束的列,分布鍵不可以選擇為可空的字段;
ClickHouse表的分區鍵默認為其排序鍵中滿足類型是'BIGINT'、'INT'、'TIMESTAMP'、'DATETIME'、'DATE'的第一列,分區鍵不可以選擇為可空的字段。
6、預檢查和啟動遷移。
完成定義ClickHouse表的各種鍵后,點擊“下一步預檢查”,進入實例配置的【預檢查】頁面。預檢查會檢查如下列信息,并給出檢查結果,用戶可以依據檢查結果進行下一步操作。
| 檢查項 | 檢查內容 |
|---|---|
| log_slave_updates參數檢查 | 如果源庫為集群的從節點,檢查源庫的log_slave_updates參數是否設置為ON。 |
| 存儲引擎檢查 | 檢查源庫中待遷移的表的存儲引擎。 |
| 待遷移表主鍵檢查 | 檢查待遷移表是否都存在主鍵。 |
| 源庫binlog存在性檢查 | 查看源庫的binlog文件是否被誤刪除。 |
| 源庫binlog影像類型檢查 | 查看源庫的binlog_row_image參數是不是FULL。 |
| 源庫binlog是否開啟檢查 | 查看源庫的log_bin參數是不是ON。 |
| 源庫binlog模式檢查 | 查看源庫的binlog_format參數是不是ROW。 |
| 源庫binlog保留時間檢查 | 檢查源庫的binlog保留時間是否滿足要求。 |
| 源庫用戶權限檢查 | 檢查源庫用于DTS任務的用戶是否具有相應的權限。 |
| 源庫連通性檢查 | 檢查數據傳輸服務能否連通源數據庫。 |
| 同名對象存在性檢查 | 檢查目標庫中是否存在和待遷移庫同名的庫,若存在,檢查該庫下面是否存在同名的表。 |
| 目標庫用戶權限檢查 | 檢查目標庫用于DTS任務的用戶是否具有相應的權限。 |
| 目標庫連通性檢查 | 檢查數據傳輸服務器能否連通目標數據庫。 |
| 源庫和目標庫時區一致性檢查 | 檢查源庫和目標庫的時區設置的值是否一致。 |
如果預檢查通過,可點擊【預檢查】頁面底部的“啟動遷移”按鈕,開始遷移任務。