MySQL分库分表实践

本文为您介绍如何通过DataWorks数据集成和Flink两种方式将MySQL分库分表的数据写入至Hologres同一个表中,通过本实践您可以根据业务场景选择合适的方式将MySQL分库分表数据写入Hologres。

背景信息

实际业务场景下数据同步通常不能通过一个或多个简单离线同步或者实时同步任务完成,而是由多个离线同步、实时同步和数据处理等任务组合完成,这就会导致数据同步场景下的配置复杂度非常高。尤其是在MySQL分库分表的场景下,上游的数据库和表非常多,都需要同时写入一张Hologres表,如果要同时配置多个任务则会导致配置非常复杂且运维困难。

针对以上痛点,阿里云DataWorks数据集成同步任务提供了面向业务场景的配置化方案,支持不同数据源的一键同步功能,方便业务简单快速的进行数据同步。同时阿里云Flink也提供了丰富强大的数据实时入仓入湖能力,支持将多种数据源方便快捷的写入至Hologres。

前提条件

说明

开通的云服务请确保在同一个地域内。

MySQL分库分表通过DataWorks同步至Hologres

Hologres与DataWorks深度集成,支持一键同步解决方案将多种数据源数据同步至Hologres中,将MySQL分库分表数据通过一键同步解决方案同步至Hologres步骤如下。

  1. 准备MySQL数据

    在同步之前需要准备好MySQL分库分表数据。本示例准备了两个库和三张表分别如下。

    数据库名称

    表名称

    hmtest1

    product_20220420

    hmtest1

    product_20220421

    hmtest2

    product_20220422

    表的DDL定义如下,三个表的Schema一致,但不同的表中会有部分数据重复。

    CREATE TABLE product_20220420 (
     value_id int8,
     attribute_id int8 not null,
     id_card int8,
     name text,
     potion text,
        ds text,
    PRIMARY KEY (`value_id`)
    );
  2. 配置一键实时同步至Hologres任务

    1. 创建一键实时同步任务

      1. 前往DataWorks数据集成左侧选择同步任务,创建同步任务。详情请参见选择同步解决方案。数据来源选择为MySQL,数据去向选择为Hologres

        image

      2. 单击新建同步任务

    2. 配置同步网络链接

      1. 配置新任务名称

      2. 同步类型选择整库实时

      3. 分别选择资源组,数据来源和数据去向的数据源名称后并单击测试所有连通性

        首次选择需要新建资源组和数据源。

        image

      4. 当数据来源和数据去向都为网络连通状态后,确定后单击下一步

        image

    3. 设置同步来源和规则

      1. 配置方案名称以及来源的基本信息,包括时区以及来源表。

        h3333

      2. 设置表名映射规则

        • 若您已在Hologres数据库创建映射表,请在需要同步的源表中所在目标表名列选择对应表名,目标Schema名列选择对应Schema。

          h444444

        • 若您还未在Hologres数据库中创建映射表。可通过目标表名映射自定义来定义新的映射表,系统将为您自动创建并完成映射。

          1. 单击目标表名映射自定义右边编辑

          2. 设计表名映射规则中单击新增

          3. 编辑规则中自定义规则名称,选择源端表名,单击操作,并在中填写源表名,目标中填写新建表名。

            h666666

          4. 单击确认应用后,在对应源表行,选择所定义的规则,并刷新映射。在目标Schema名列选择对应Schema。

            h55555

    4. 设置目标表

      1. 单击刷新源表和Hologres表映射

        说明

        映射关系里会展示每一个上游表与目标表的关系,只要目标表为同一个表即表示都映射至同一个目标表。

      2. 添加附加字段

        为了更好的区分上游表的来源,需要为目标表添加附加字段。

        1. 勾选所有的任务,并单击批量修改,选择目标表结构-批量修改和新增字段

        2. 目标表结构-批量修改和新增字段弹窗,单击添加字段,分别新增db_nametable_name两个字段。

        3. 新增字段后单击应用并刷新映射

          或6666666

          本示例选择DB_NAME_SRC表示来源数据库名称;TABLE_NAME_SRC表示来源数据表名称。

        4. (可选)将附加字段设置为主键(PK)

          若是上游数据量比较大,且表比较多,建议将附加字段设置成PK,与源表主键做联合主键,防止多源表主键数据互相冲突,同时将附加字段设置为Distribution Key,能保证将相同的数据写入至同一个Shard,实现更好的性能。

          1. 单击目标表名右边image,再进入SQL建表语句预览弹窗。

            H99999

          2. 修改建表语句,附加列table_name添加为PK和Distribution Key。

            说明
            • 建议添加源表表名tablename为联合主键,可根据业务场景适当添加。

            • 也可以根据业务需求为表设置更多的索引,以实现更好的性能,详情请参见CREATE TABLE

            trfsdfag

            BEGIN;
            CREATE TABLE IF NOT EXISTS hologres1.product1 (
               value_id     BIGINT NOT NULL,
               attribute_id BIGINT NOT NULL,
               id_card      BIGINT,
               "name"       TEXT,
               potion       TEXT,
               ds           TEXT,
               table_name   TEXT NOT NULL,
               db_name      TEXT,
               PRIMARY KEY(value_id,table_name)
            );
            CALL SET_TABLE_PROPERTY('hologres1.product1', 'distribution_key', '"table_name","value_id"');
            CALL SET_TABLE_PROPERTY('hologres1.product1', 'time_to_live_in_seconds', '3153600000');
            CALL SET_TABLE_PROPERTY('hologres1.product1', 'orientation', 'column');
            CALL SET_TABLE_PROPERTY('hologres1.product1', 'binlog.level', 'none');
            CALL SET_TABLE_PROPERTY('hologres1.product1', 'bitmap_columns', '"name","potion","ds"');
            CALL SET_TABLE_PROPERTY('hologres1.product1', 'dictionary_encoding_columns', '"name":auto,"potion":auto,"ds":auto,"table_name":auto,"db_name":auto');
            COMMIT;                                                         
        5. 单击应用并刷新映射,如图所示。

          h343434343

    5. 设置DML策略

      目标表设置完成之后,为任务配置DML策略。根据业务情况进行单表设置或者批量设置。

      1. 勾选所有的任务,并单击批量修改,选择DML规则配置

      2. DML规则配置弹窗,选择处理策略为正常处理

        h12121212122

      3. 单击确定完成DML规格配置。

    6. DDL能力配置

      1. 根据业务情况为任务进行DDL能力配置。本示例DDL消息处理策略设置如下所示。ddl消息处理策略

      2. 单击确定

    7. 高级参数配置

      1. 根据业务情况进行高级参数配置,包括读端配置写端配置运行时配置

        h232323232

      2. 单击确定

    8. 完成后,单击完成配置

  3. 运行任务

    配置完成之后,在对应任务中操作列单击启动,在更多-查看可以查看任务运行详情。

    后656565656

  4. 查询数据

    一键解决方案会先运行全量数据,再运行实时同步数据。当全量离线任务运行完成后,可以前往Hologres中查询数据。

    ty56

    如上示例可以看到附加列有对应的数据表示数据的来源库和表名,说明上游分库分表已经写入至Hologres的同一个表中。

业务上游有实时数据也会启动实时任务,如上游增加数据下游将会自动触发实时任务写入至Hologres中。本示例仅展示如何通过一键同步解决方案实现MySQL分库分表写入至Hologres一张表中,实现更多功能请根据业务逻辑自行配置任务。

MySQL分库分表通过Flink同步至Hologres

通过Flink将MySQL分库分表的数据同步至Hologres的具体操作请参见数据库实时入仓快速入门