支持的源和目标数据库
支持的源和目标数据库,如下表:
源数据库 | 目标数据库 |
---|---|
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支持的场景下,当前暂不支持在结构迁移与全量迁移详情页面显示增量阶段新增的表。
操作步骤
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任务的用户是否具有相应的权限。 |
目标库连通性检查 | 检查数据传输服务器能否连通目标数据库。 |
源库和目标库时区一致性检查 | 检查源库和目标库的时区设置的值是否一致。 |
如果预检查通过,可点击【预检查】页面底部的“启动迁移”按钮,开始迁移任务。