MySQL 迁移同步到 Greenplum
NineData 数据复制支持 MySQL 到 Greenplum 数据源之间的结构、全量数据和增量数据同步。
背景信息
Greenplum 是一种开源的并行数据仓库解决方案,适用于大规模的数据存储和分析。通过将 MySQL 数据复制到 Greenplum,可以利用其大规模并行处理架构以及高性能数据分析能力,帮助企业更好地处理和分析大规模数据。
功能介绍
NineData 数据复制支持数据源之间的结构、全量数据、增量数据的高性能复制,对于 MySQL 数据源之间的复制,还提供双向复制功能,实现快捷构建异地多活业务架构。
- 结构:支持同构及异构数据源之间的对象结构复制,很大程度上降低了两个数据源之间的数据复制门槛。
- 全量数据:通过智能数据分片实现行级并发批量复制能力,有效保障复制性能。自主研发的新型断点续传技术,保证无主键表的数据准确性。
- 增量数据:支持全对象类型的 DML|DDL 增量数据复制,结合事务级并发、热点合并等技术,在保障事务一致性的基础上,提供强劲复制性能。
- 双向数据实时复制:直接多个节点之间的数据双向复制,保证所有节点的数据均保持最新状态。
通过以上功能,可以轻松高效地实现全量|增量数据复制、全量|增量数据迁移、全量|增量数据同步、数据集成、不停机无缝迁移等场景,为企业提供灵活和可靠的数据复制解决方案。
前提条件
已将源数据源和目标数据源添加至 NineData。如何添加,请参见添加数据源。
源的数据库类型为 MySQL 或类 MySQL 数据库,例如 MySQL、MariaDB、PolarDB MySQL、TDSQL-C、GaussDB MySQL、Aurora 等。
目标数据库为 Greenplum 6.0、5.0。
增量复制的情况下,源数据源必须开启 Binlog,并且 Binlog 相关参数设置如下:
binlog_format
=ROW
binlog_row_image
=FULL
提示如果源数据源为备库,为保证获取完整的 Binlog 日志,还需要开启
log_slave_updates
参数。
使用限制
- 增量复制过程暂不支持同步源端的 DDL 操作。
- 数据复制功能仅针对数据源中的用户数据库,系统库不会被复制。例如:MySQL 类型数据源中的
information_schema
、mysql
、performance_schema
、sys
库不会被复制。 - 源数据源的账号必须拥有如下权限:
- 全量复制:复制对象的
SELECT
权限。 - 增量复制:复制对象的
SELECT
权限、REPLICATION CLIENT
、REPLICATION SLAVE
权限。目标数据源的账号必须拥有 DML 权限。
- 全量复制:复制对象的
- 目标数据源的账号必须拥有目标对象的
CREATE/ALTER/DROP TABLE
、SELECT
、INSERT
、UPDATE
、DELETE
、REFERENCES
、CREATE
、TEMPORARY
、USAGE
权限。 - 执行数据同步前需评估源数据源和目标数据源的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源数据源和目标数据源一定的读写资源,导致数据库负载上升。
- 建议确保同步对象中的每张表都有主键或唯一约束、列名具有唯一性,否则可能会重复同步相同数据。
操作步骤
NineData 数据复制产品已商业化,您仍然可以保有 10 条复制任务免费使用,注意事项如下:
- 10 条复制任务中可以包含 1 条任务,规格为 Micro。
- 状态为的任务不算在 10 条任务的限制内,如果您已经创建了 10 条复制任务,还想要继续创建,可以先终止之前的复制任务,然后再创建新任务。
- 创建复制任务时,仅可选择您已购买的,未购买的规格将以灰度显示,无法选择。如需购买,请通过页面右下角的客服图标联系我们。
登录 NineData 控制台。
在左侧导航栏单击 > 。
在页面,单击页面上的。
在页签,按照下表进行配置,并单击。
参数 说明 输入数据同步任务的名称,为了方便后续查找和管理,请尽量使用有意义的名称。最多支持 64 个字符。 同步对象所在的数据源。 接收同步对象的数据源。 选择需要复制到目标数据源的内容。 - :只同步源数据源的库表结构,不同步数据。
- :同步源数据源的所有对象和数据,即全量数据复制。
- :在全量同步完成后,基于源数据源的日志进行增量同步。
仅为时需要选择。 - :以当前复制任务开始时间为基准,进行增量复制。
- :选择增量复制开始的时间点,您可以根据您的业务所在地域按需选择时区。
- :预检查阶段检测到目标表中存在数据时,停止任务。
- :预检查阶段检测到目标表中存在数据时,忽略该部分数据,追加写入其他数据。
- :预检查阶段检测到目标表中存在数据时,删除该部分数据,重新写入。
在页签,配置下列参数,然后单击。
参数 说明 选择需要复制的内容,您可以选择复制源库所有内容,也可以选择,在列表中选中需要复制的内容,单击>添加到右侧列表。 在页签,系统默认匹配目标数据源中的同名 Schema,如果不存在,则需要手动选择目标 Schema。默认情况下,要求目标库中的表名、列名需要和同步对象一致。如果不一致,您也可以手动进行表名和列名的映射。配置完成后,单击保存并预检查。
在页签,等待系统完成预检查,预检查通过后,单击。
提示- 如果预检查未通过,需要单击目标检查项右侧列的,排查失败的原因,手动修复后单击重新执行预检查,直到通过。
- 为的检查项,可视具体情况修复或忽略。
在页面,提示,同步任务开始运行。此时您可以进行如下操作:
- 单击查看同步任务各个阶段的执行情况。
- 单击可以返回任务列表页面。
查看同步结果
登录 NineData 控制台。
在左侧导航栏单击 > 。
在页面单击目标同步任务的,页面说明如下。
序号 功能 说明 1 同步延迟 源数据源和目标数据源之间的数据同步延迟,0 秒表示两端之间没有延迟,此时您可以选择将业务切换到目标数据源,实现平滑迁移。 2 配置告警 配置告警后,系统会在任务失败时通过您选择的方式通知您。更多信息,请参见运维监控简介。 3 更多 - 暂停:暂停任务,仅状态为运行中的任务可选。
- 终止:结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。如果同步对象中包含触发器,会弹出触发器复制选项,请按需选择。
- 删除:删除任务,任务删除后无法恢复,请谨慎操作。
4 全量复制(包含全量复制的场景下显示) 展示全量复制的进度和详细信息。 - 单击页面右侧的监控:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的限流设置,限制每秒写入到目标数据源的速率。单位为行/秒。
- 单击页面右侧的日志:查看全量复制的执行日志。
- 单击页面右侧的:查看最新的信息。
5 增量复制(包含增量复制的场景下显示) 展示增量复制的各项监控指标。 - 单击页面右侧的:查看当前复制任务正在执行中的操作,包含:
- :复制任务分多个线程执行复制操作,展示当前进行中的线程号。
- :当前线程正在执行中的 SQL 语句详情。
- :当前线程的响应时间,如果该数值变大,则代表当前线程可能由于某些原因卡住。
- :当前线程开启的时间戳。
- :当前线程的状态。
- 单击页面右侧的限流设置:限制每秒写入到目标数据源的速率。单位为行/秒。
- 单击页面右侧的日志:查看增量复制的执行日志。
- 单击页面右侧的:查看最新的信息。
6 修改对象 展示同步对象的修改记录。 - 单击页面右侧的修改同步对象,可对同步对象进行配置。
- 单击页面右侧的:查看最新的信息。
7 数据对比 展示源数据源和目标数据源之间数据对比的结果。如果您未开启数据对比,请单击页面中的开启数据对比。 - 单击页面右侧的重新对比:对当前源和目标两端数据重新发起对比。
- 单击页面右侧的日志:查看一致性对比的执行日志。
- 单击页面右侧的监控(仅数据对比显示):查看对比 RPS(每秒对比的记录数)的走势图。单击详情可以查看更早之前的记录。
- 在对比列表右侧操作列单击(不一致情况下显示):查看源端和目标端的对比详情。
- 在对比列表右侧操作列单击(不一致情况下显示):生成变更 SQL,您可以直接复制该 SQL 到目标数据源执行,修改不一致的内容。
8 展开 展示当前复制任务的详细信息,包括复制类型、复制对象、开始时间等。
附录 1:MySQL 和 Greenplum 数据类型的映射关系表
数据复制过程中,MySQL 的数据类型会被映射成对应的 Greenplum 数据类型。
类别 | MySQL 数据类型 | Greenplum 数据类型 |
---|---|---|
Numeric | TINYINT | SMALLINT |
TINYINT UNSIGNED | SMALLINT | |
SMALLINT | SMALLINT | |
SMALLINT UNSIGNED | INTEGER | |
MEDIUMINT | INTEGER | |
MEDIUMINT UNSIGNED | INTEGER | |
INT | INTEGER | |
INT UNSIGNED | BIGINT | |
BIGINT | BIGINT | |
BIGINT UNSIGNED | BIGINT | |
BIT(M) | BIT(N) | |
DECIMAL() | DECIMAL | |
NUMERIC | DECIMAL | |
FLOAT | FLOAT | |
DOUBLE | FLOAT8 | |
BOOL,BOOLEAN | SMALLINT | |
DATE AND TIME | DATE | DATE |
DATETIME[(fsp)] | TIMESTAMP[(p)] | |
TIMESTAMP[(fsp)] | TIMESTAMP[(p)] with time zone | |
TIME[(fsp)] | TEXT | |
YEAR[(4)] | INTEGER | |
STRING | CHAR | CHAR[(n)] |
VARCHAR | VARCHAR | |
BINARY/VARBINARY | BYTEA | |
TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT | TEXT | |
TINYBLOB/BLOB/MEDIUMBOLB/LONGBLOB | BYTEA | |
ENUM | VARCHAR | |
SET | VARCHAR | |
JSON | JSON | JSON |
附录 2:预检查项一览
检查项 | 检查项说明 | 未通过是否阻止任务继续 | 失败原因及修复策略 |
---|---|---|---|
源数据源连接测试 | 检测源数据源的连通性 | 是 |
|
目标数据源连接测试 | 检测目标数据源的连通性 | 是 |
|
源数据源权限检测 | 检测源数据源的账号权限 | 是 |
|
目标数据源权限检测 | 检测目标数据源的账号权限 | 是 |
|
源数据库 log_slave_updates 是否支持 | 检查源数据库是为备库的情况下,是否开启了 log_slave_updates | 是 |
|
源数据库是否开启 Binlog | 检查源数据库是否开启 Binlog | 是 |
|
源数据库 binlog format 是否支持 row 模式 | 检查源数据库的 binlog 格式是否为 row | 是 |
|
binlog_row_image 是否为 full | 检查源数据库的 binlog_row_image 是否为 full | 是 |
|
同名对象存在性检查 | 检查目标是否存在跟待复制对象同名的对象 |
|
|
数据存在性检查 | 检查目标数据源的复制对象是否已经存在数据 |
|
|