跳到主要内容

MySQL 迁移同步到 Elasticsearch

NineData 数据复制支持将 MySQL 中的数据复制到 Elasticsearch,通过 Elasticsearch 对 MySQL 的数据进行搜索和分析。

背景信息

Elasticsearch 是一个流行的分布式搜索和分析引擎,用于处理海量数据并提供实时搜索和分析能力,包括全文搜索、自动完成、聚合、地理空间搜索和机器学习等。通过将 MySQL 中的数据复制到 Elasticsearch 中,您可以获得更好的搜索性能、强大的分析和聚合能力,帮助您更深入地挖掘您的数据价值。

功能介绍

NineData 数据复制支持数据源之间的结构、全量数据、增量数据的高性能复制,对于 MySQL 数据源之间的复制,还提供双向复制功能,实现快捷构建异地多活业务架构。

  • 结构:支持同构及异构数据源之间的对象结构复制,很大程度上降低了两个数据源之间的数据复制门槛。
  • 全量数据:通过智能数据分片实现行级并发批量复制能力,有效保障复制性能。自主研发的新型断点续传技术,保证无主键表的数据准确性。
  • 增量数据:支持全对象类型的 DML|DDL 增量数据复制,结合事务级并发、热点合并等技术,在保障事务一致性的基础上,提供强劲复制性能。
  • 双向数据实时复制(仅 MySQL 之间):直接多个节点之间的数据双向复制,保证所有节点的数据均保持最新状态。

通过以上功能,可以轻松高效地实现全量|增量数据复制全量|增量数据迁移全量|增量数据同步数据集成不停机无缝迁移等场景,为企业提供灵活和可靠的数据复制解决方案。

前提条件

  • 已将源和目标数据源添加至 NineData。如何添加,请参见创建数据源

  • 源的数据库类型为 MySQL 或类 MySQL 数据库,例如 MySQL、MariaDB、PolarDB MySQL、TDSQL-C、GaussDB MySQL 等。

  • 目标的数据库类型为 Elasticsearch 的 8.77.06.05.0 版本。

  • 源数据源必须开启 Binlog,并且 Binlog 相关参数设置如下:

    • binlog_format=ROW
    • binlog_row_image=FULL
    提示

    如果源数据源为备库,为保证获取完整的 Binlog 日志,还需要开启 log_slave_updates 参数。

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击 >

  3. 页面,单击右上角的

  4. 页签,按照下表进行配置,并单击

    参数
    说明
    输入数据同步任务的名称,为了方便后续查找和管理,请尽量使用有意义的名称。最多支持 64 个字符。
    同步对象所在的数据源,此处选择需复制数据所在的 MySQL 数据源。
    接收同步对象的数据源,此处选择目标 Elasticsearch 数据源。
    数据从 MySQL 迁移到 Elasticsearch 以后,为使数据的管理和查询更加方便,Elasticsearch 会为这些数据添加索引。此处可以选择这些索引的命名方式。
    • (默认):直接使用原 MySQL 表的表名。例如,如果创建了一个名为 users 的索引,则可以理解为该索引中存储的文档具有类似于 users 表的结构。
    • :使用<原库名>_<原表名>的形式命名。例如,如果创建了一个名为 mydb_users 的索引,则可以理解为该索引中存储的文档属于 mydb 数据库中的 users 表。
    • :同步源数据源的库表结构。
    • :同步源数据源的所有对象和数据,即全量数据复制。
    • :在全量同步完成后,基于源数据源的日志进行增量同步。单击setting图标,可以根据需求取消勾选某一些操作类型,取消勾选后,这些操作会在增量同步中被忽略。
    说明:您还可以单击展开,选择存在同名表或相同数据时的处理策略。
    • (选中时需要选择)
      • :预检查阶段检测到同名表时,停止任务。
      • :预检查阶段检测到同名表时,发送提示并继续任务。 结构复制时,忽略该同名表。如果您同时进行了数据复制,则数据会在同名表中追加,而不会覆盖原有数据。
      • :预检查阶段检测到同名表时,发送提示并继续任务。结构复制时,删除目标库同名表,并基于源库重新复制表结构。如果您同时进行了数据复制,则数据会在表结构复制完成后写入。
      • (同时进行结构和数据复制时可选):预检查阶段检测到同名表时,发送提示并继续任务。结构复制时在目标库保留该表结构,并在数据复制开始时清空同名表中的数据,然后重新从原表中复制。
    • (未选中时需要选择)
      • :预检查阶段检测到目标表中存在数据时,停止任务。
      • :预检查阶段检测到目标表中存在数据时,忽略该部分数据,追加写入其他数据。
      • :预检查阶段检测到目标表中存在数据时,删除该部分数据,重新写入。
    • (当前仅支持 MySQL 到 MySQL):开启后,源数据源中已配置了敏感列的数据会以脱敏后的形式复制到目标数据源,以保障敏感数据的安全。
  5. 页签,配置下列参数,然后单击

    参数
    说明
    选择需要复制的内容,您可以选择复制源库所有内容,也可以选择,在列表中选中需要复制的内容,单击>添加到右侧列表。
  6. 页签,可以单独配置需要复制到 Elasticsearch 的每个表,以及表中的每个字段,默认情况下将复制所选库的全部表和字段。同时,您也可以在本页签中为每个索引自定义配置 DOC IDDOC ID 是 Elasticsearch 中每个文档的唯一标识符,用于检索、更新或删除该文档。您可自行指定或让 Elasticsearch 自动生成,该 ID 在同一索引中唯一。,或留空让 Elasticsearch 自动生成。

    提示

    您可以单击页面右侧的,自定义字段同步到 Elasticsearch 之后的名称。除此之外,您还可以设置,仅符合过滤条件的数据会同步到 Elasticsearch。

  7. 页签,等待系统完成预检查,预检查通过后,单击

    提示
    • 如果预检查未通过,需要单击目标检查项右侧列的,排查失败的原因,手动修复后单击重新执行预检查,直到通过。

    • 的检查项,可视具体情况修复或忽略。
  8. 页面,提示,同步任务开始运行。此时您可以进行如下操作:

    • 单击可以查看同步任务各个阶段的执行情况。
    • 单击可以返回任务列表页面。

查看同步结果

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击 >

  3. 页面单击目标同步任务的 ID,打开页面,页面说明如下。

    es_result

    序号
    功能
    说明
    1同步延迟源数据源和目标数据源之间的数据同步延迟,0 秒表示两端之间没有延迟,即 Kafka 端的数据目前已追平 MySQL 端。
    2配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。更多信息,请参见运维监控简介
    3更多
    • :暂停任务,仅状态为的任务可选。
    • :结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。
    • :删除任务,任务删除后无法恢复,请谨慎操作。
    4结构复制(包含结构复制的场景下显示)展示结构复制的进度和详细信息。
    • 单击页面右侧的:查看结构复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    5全量复制(包含全量复制的场景下显示)展示全量复制的进度和详细信息。
    • 单击页面右侧的:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的,限制每秒写入到目标数据源的速率。单位为 MB/S。
    • 单击页面右侧的:查看全量复制的执行日志。
    • 单击页面右侧的refresh图标:查看最新的信息。
    6增量复制(包含增量复制的场景下显示)展示增量复制的各项监控指标。
    • 单击页面右侧的:查看当前复制任务正在执行中的操作,包含:
      • :复制任务分多个线程执行复制操作,展示当前进行中的线程号。
      • :当前线程正在执行中的 SQL 语句详情。
      • :当前线程的响应时间,如果该数值变大,则代表当前线程可能由于某些原因卡住。
      • :当前线程开启的时间戳。
      • :当前线程的状态。
    • 单击页面右侧的:限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的:查看增量复制的执行日志。
    • 单击页面右侧的refresh图标:查看最新的信息。
    7修改对象展示同步对象的修改记录。
    • 单击页面右侧的,可对同步对象进行配置
    • 单击页面右侧的refresh图标:查看最新的信息。
    8展开展示当前复制任务的详细信息,包括等。

附录 1:MySQL 和 Elasticsearch 数据类型的映射关系表

数据复制过程中,MySQL 的数据类型会被映射成对应的 Elasticsearch 数据类型。

类别MySQL 数据类型ElasticSearch 数据类型
NumericTINYINTShort
TINYINT UNSIGNED
SMALLINTInteger
SMALLINT UNSIGNED
MEDIUMINT
MEDIUMINT UNSIGNED
INT
INT UNSIGNED
BIGINTLong
BIGINT UNSIGNED
BIT(M)Uint64
DecimalDecimal(10, 0)
Numeric
Decimal(P, S)Decimal(P, S)
FloatFloat32
DoubleFloat64
BOOL,BOOLEAN21.12 版本之后:Boolean
21.12 版本之前:Int8
DATE AND TIMEDATEDate
DATETIME[(fsp)]
Timestamp[(fsp)]
Time[(fsp)]
YEAR[(4)]
STRINGCHAR/VARCHARText
TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT
BINARY/VARBINARYBinary
TINYBLOB/BLOB/MEDIUMBOLB/LONGBLOB
ENUMKeyword
SET
JSONJSONObject
SPATIALPOINTGeo_point
LINESTRINGGeo_shape
POLYGON
MULTIPOINT
MULTILINESTRING
MULTIPOLYGON
GEOMETRYCOLLECTION
GEOMCOLLECTION
GEOMETRY
### 附录 2:预检查项一览表
检查项检查内容
源数据源连接检查检查源数据源网关状态、实例是否可达、用户名及密码准确性
目标数据源连接检查检查目标数据源网关状态、实例是否可达、用户名及密码准确性
目标库权限检查检查目标数据库的账号权限是否满足要求
源库权限检查检查源数据库的账号权限是否满足要求
源数据库 log_slave_updates 是否支持当源数据库为从库时,检查 log_slave_updates 是否为 ON
源数据源和目标数据源版本检查检测源数据库与目标数据库的版本是否兼容
源数据库是否开启 Binlog检查源数据库是否开启 Binlog
源数据库 Binlog Format 是否支持检查源数据库的 binlog 格式是否为 'ROW'
源数据库 binlog_row_image 是否支持检查源数据库的 binlog_row_image 是否为 'FULL'
目标库数据存在性检查检查待复制对象在目标数据库中是否已存在数据