支持的源和目标数据库
支持的源和目标数据库,如下表:
| 源数据库 | 目标数据库 |
|---|---|
RDS for MySQL | Doris 2.0以上版本 |
说明
源库为自建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、DROP COLUMN操作,以及TRUNCATE TABLE、DROP TABLE、RENAME TABLE操作。
注意
RENAME TABLE操作可能导致同步数据不一致。例如同步对象只包含某个表,当源端在同步过程中对该表执行重命名时,由于同步任务无法自动追踪表名变更,该表的后续数据将无法同步至目标库。为有效规避此风险,建议在配置数据同步时,将目标表所属的整个数据库作为同步对象进行全库同步。
数据库账号及权限
数据库账号及权限如下表:
| 数据库 | 所需权限 | 参考赋权语句 |
|---|---|---|
源库 | 源库为MySQL5.7时:
源库为MySQL8.0时:
| 源库为MySQL5.7时: GRANT SELECT ON mysql.* TO '迁移账号'@'%'; GRANT SELECTON 待迁移的库.* TO '迁移账号'@'%'; GRANT RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, PROCESS ON *.* TO '迁移账号'@'%';
源库为MySQL8.0时: GRANT SELECT ON mysql.* TO '迁移账号'@'%'; GRANT SELECT ON 待迁移的库.* TO '迁移账号'@'%'; GRANT RELOAD, PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '迁移账号'@'%'; |
| 目标库 | 数据库的访问权限: Usage_priv 数据库的读写权限: Select_priv Load_priv Alter_priv Create_priv Drop_priv |
操作须知
目前只支持将数据同步到Doris的Unique或Duplicate表模型中,若目标表为Duplicate表模型,并且同步实例发生过下面的操作,会导致目标库中出现重复数据,您可自行根据附加列(_ctyun_dts_is_deleted、_ctyun_dts_version和_ctyun_dts_record_id)进行去重操作:
重试操作;
重启操作;
对同一条数据执行过多次DML操作,DTS会将UPDATE或DELETE语句转换为INSERT语句。
待同步对象中包含既无主键也无唯一约束的表,可能会导致目标数据库中出现重复数据。在配置实例时,建议同步类型勾选“库表结构同步”,并在库表列配置阶段将表模型设置为“duplicate”,否则可能导致实例运行失败或数据丢失。
由于Doris数据库的库、表、列名称有相关限制,如出现下面情况,需要使用映射功能进行修改,否则可能会导致任务失败:
待同步的库名或表名不是以字母开头;
若待同步对象(库、表、列)的名称包含中文;
在库表列进行参数设置时,分桶数量仅支持正整数,默认值为auto。
在库表结构同步阶段,如果表模型设置为“duplicate”,DTS自动添加额外的三个列,具体请查看“附加列信息”章节。
在MySQL中,VARCHAR(M)类型的M表示字符长度;在Doris数据库中,VARCHAR(N)类型的N表示字节长度。若使用DTS创建表,会自动将Doris数据库中VARCHAR类型字段的长度设置为MySQL中VARCHAR字段长度的四倍,若您不使用DTS提供的库表结构同步功能,建议您自行上述操作。
在数据同步期间,请勿在目标Doris数据库中新建集群或者增加BE(Backend)节点,否则会导致任务失败。您可以尝试通过重新启动同步实例,来恢复失败的任务。
如迁移对象为表级别,则单次迁移任务仅支持迁移最多10000张表。当超出数量限制,任务会在提交后会请求报错。如果遇到这种情形,建议您拆分待迁移的表,分批配置成多个任务,或者配置为整库迁移。
目标库若已存在行数据,DTS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。
MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。
在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为7天。否则DTS在增量迁移时可能因无法获取Binlog而导致任务失败。由于您所设置的Binlog日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。
在任务进入增量迁移阶段之前,不建议对源数据库做DDL操作,这样可能会引起任务迁移失败。
迁移过程中,请勿修改、删除提供给DTS连接访问的源库和目标库及用户名、密码、权限,或修改源库和目标库的端口号;若用户源库、目标库的密码发生变化,请先暂停任务再修改DTS配置的连接源库、目标库的密码。
选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
增量迁移场景下,源库MySQL执行Online DDL变更时,会导致任务失败。
增量迁移场景下,不支持源数据库进行恢复操作。
增量迁移并开启增量DDL支持的场景下,当前暂不支持在结构迁移与全量迁移详情页面显示增量阶段新增的表。
操作步骤
1、购买DTS数据迁移实例。
在管理控制台点击“创建实例”进入订购页面,“实例类型”选择“数据迁移”,“目标库实例”的“数据库类型”选择Doris,选择实例,完成其他信息的填写并完成购买。
说明
迁移前请您详细阅读快速入门-准备工作概览-网络准备章节内容,了解并做好网络方面的准备工作。
2、进入实例配置页面。
DTS实例购买成功后,进入【数据迁移】实例列表页面,上一步骤购买成功的实例在实例列表中显示状态为“待配置”,进入实例配置页面的操作分两种情况:
当源库或目标库的网络接入类型为“公网EIP”时,请在实例列表的“IP地址列”点击“绑定弹性IP”按钮完成公网弹性IP的绑定,然后点击该实例操作列的“实例配置”按钮。
当源库和目标库的网络接入类型不是“公网EIP”时,请直接点击该实例操作列的“实例配置”按钮。
3、配置源库及目标库信息。
进入实例配置第一个步骤的【配置源库及目标库信息】页面,填入源库与目标库的相关配置信息,包括数据库类型、IP地址端口、数据库账号、数据库密码等信息。
完成上述信息的填写后,点击源数据库和目标数据库的“测试连接”按钮进行数据库连接测试,检查数据库能否正常连接。
4、配置迁移对象及高级配置。
源库和目标库连通性测试成功后,点下一步按钮,进入实例配置第二个步骤的【配置迁移对象及高级配置】页面,在“源库对象”中选择要迁移的源库对象,选中后点击“>”按钮,将待迁移对象移动到“已选择对象”中。
5、配置库表列信息。
完成迁移对象和高级配置后,点击“下一步”,若迁移模式选择了“结构同步”,进入【配置库表列】页面,对表模型、主键列、分布键和分桶数量进行设置。
表模型:只支持UniqueKey或DuplicateKey。
主键列:可以选择一个或多个列组成联合主键,默认是源表的主键。
分布键:分布键的选择与表模型相关:当选择DuplicateKey时,分布键可以是任意主键列或者value列;选择UniqueKey时,分布键必须从主键列中选择1个或多个列。
分桶数量:分桶数量只支持正整数,默认值是auto。
若待同步对象的表模型和分桶数量一致时,可批量设置参数。
6、预检查和启动迁移。
完成定义Doris表的库表列信息后,点击“下一步预检查”,进入实例配置的【预检查】页面。预检查会检查如下列信息,并给出检查结果,用户可以依据检查结果进行下一步操作。
| 检查项 | 检查内容 |
|---|---|
| log_slave_updates参数检查 | 如果源库为集群的从节点,检查源库的log_slave_updates参数是否设置为ON。 |
| gtid_mode参数检查 | 检查源库和目标库的gtid_mode参数是否为ON。 |
| lower_case_table_names一致性检查 | 检查源车和目标库的lower_case_table_names变量是否一致。 |
| mysql版本检查 | 检查源库和目标库的mysql版本是不是符合要求。 |
| schema字符集检查 | 检查待迁移库的字符设置是否在要求范围内。 |
| 源库server_id检查 | 检查源库的server_id是否大于1。 |
| 源库和目标库时区一致性检查 | 检查源库和目标库的时区是否一致。 |
| 存储引擎检查 | 检查源库中待迁移的表的存储引擎。 |
| 待迁移表主键检查 | 检查待迁移表是否都存在主键。 |
| 源库binlog存在性检查 | 查看源库的binlog文件是否被误删除。 |
| 源库binlog影像类型检查 | 查看源库的binlog_row_image参数是不是FULL。 |
| 源库binlog是否开启检查 | 查看源库的log_bin参数是不是ON。 |
| 源库binlog模式检查 | 查看源库的binlog_format参数是不是ROW。 |
| 源库binlog保留时间检查 | 检查源库的binlog保留时间是否满足要求。 |
| 源库用户权限检查 | 检查源库用于DTS任务的用户是否具有相应的权限。 |
| 源库连通性检查 | 检查数据传输服务能否连通源数据库。 |
| 同名对象存在性检查 | 检查目标库中是否存在和待迁移库同名的库,若存在,检查该库下面是否存在同名的表。 |
| 目标库用户权限检查 | 检查目标库用于DTS任务的用户是否具有相应的权限。 |
| 目标库连通性检查 | 检查数据传输服务器能否连通目标数据库。 |
如果预检查通过,可点击【预检查】页面底部的“启动迁移”按钮,开始迁移任务。
MySQL - Doris数据类型转换附表
| 类型 | MySQL | Doris |
|---|---|---|
| 整数类型 | BIT | INT |
| TINYINT | TINYINT | |
| TINYINT UNSIGNED | SMALLINT | |
| SMALLINT | SMALLINT | |
| SMALLINT UNSIGNED | INT | |
| MEDIUMINT | INT | |
| MEDIUMINT UNSIGNED | BIGINT | |
| INT | INT | |
| INT UNSIGNED | BIGINT | |
| BIGINT | BIGINT | |
| BIGINT UNSIGNED | LARGEINT | |
| BOOLEAN | |
| 小数类型 | DECIMAL | DECIMAL |
| NUMERIC | DECIMAL | |
| FLOAT | DOUBLE | |
| DOUBLE | DOUBLE | |
| REAL | Float | |
| 时间类型 | DATE | DATE |
| DATETIME | DATETIME | |
| TIMESTAMP | DATETIME | |
| TIME | VARCHAR | |
| YEAR | INT | |
| 字符串类型 | CHAR | CHAR |
| VARCHAR | VARCHAR 注意:为避免数据丢失,VARCHAR(n)类型的数据同步到Doris后会转换为VARCHAR(4*n)。 若未指定数据长度,则采用Doris的默认值VARCHAR(65533)。 若数据长度超过65533,则同步到Doris后会转换为STRING。 | |
| BINARY | STRING | |
| VARBINARY | STRING | |
| TINYBLOB | STRING | |
| TINYTEXT | STRING | |
| BLOB | STRING | |
| TEXT | STRING | |
| MEDIUMBLOB | STRING | |
| MEDIUMTEXT | STRING | |
| LONGBLOB | STRING | |
| LONGTEXT | STRING | |
| ENUM | STRING | |
| SET | STRING | |
| 空间类型 | GEOMETRY | STRING |
| POINT | STRING | |
| LINESTRING | STRING | |
| POLYGON | STRING | |
| MULTIPOINT | STRING | |
| MULTILINESTRING | STRING | |
| MULTIPOLYGON | STRING | |
| GEOMETRYCOLLECTION | STRING | |
| JSON类型 | JSON | STRING |
附加列信息
目标表如果选择是Duplicate表模型,DTS自动添加或需您手动添加的附加列如下表所示:
| 名称 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| _ctyun_dts_is_deleted | Int | 0 | 数据是否被删除。 Insert:记录为0。 Update:记录为0。 Delete:记录为1。 |
| _ctyun_dts_version | Bigint | 0 | 全量同步的数据:记录为0。 增量同步的数据:源库Binlog中对应的时间戳(秒级)。 |
| _ctyun_dts_record_id | Bigint | 0 | 全量同步数据:记录为0。 增量同步数据:增量日志的记录ID,为该日志的唯一标识。当_ctyun_dts_version一致时,可通过该字段去重。 |