详情页标题前

阿里云大数据开发治理平台 DataWorksMySQL数据源-云淘科技

详情页1

MySQL数据源为您提供读取和写入MySQL的双向通道,本文为您介绍DataWorks的MySQL数据同步的能力支持情况。

支持的MySQL版本

  • 离线读写:

    支持MySQL 5.5.x、MySQL 5.6.x、MySQL 5.7.x、MySQL 8.0.x,兼容Amazon RDS for MySQL。

    离线同步支持读取视图

  • 实时读取:

    数据集成实时读取MySQL数据是基于实时订阅MySQL实现的,当前仅支持实时同步MySQL 5.5.x、MySQL 5.6.x、MySQL 5.7.x、MySQL 8.0.x(非8.0新特性,比如 functional index,仅兼容原有功能)版本的MySQL数据,兼容Amazon RDS for MySQL。

    重要

    如果需要同步DRDS的MySQL,请不要将DRDS的MySQL配置为MySQL数据源,您可以参考配置DRDS数据源文档直接将其配置为DRDS数据源。

使用限制

实时读

  • 不支持同步MySQL只读库实例的数据。

  • 不支持同步含有Functional index的表。

  • 不支持XA ROLLBACK。

    针对已经XA PREPARE的事务数据,实时同步会将其同步到目标端,如果XA ROLLBACK,实时同步不会针对XA PREPARE的数据做回滚写入的操作。若要处理XA ROLLBACK场景,需要手动将XA ROLLBACK的表从实时同步任务中移除,再添加表后重新进行同步。

  • 仅支持同步MySQL服务器Binlog配置格式为ROW。

  • 实时同步不会同步被级联删除的关联表记录。

离线读

MySQL Reader插件在进行分库分表等多表同步时,若要对单表进行切分,则需要满足任务并发数大于表个数这一条件,否则切分的Task数目等于表的个数。

支持的字段类型

各版本MySQL的全量字段类型请参见MySQL官方文档。以下以MySQL 8.0.x为例,为您罗列当前主要字段的支持情况。

字段类型

离线读(MySQL Reader)

离线写(MySQL Writer)

实时读

实时写

TINYINT

支持

支持

支持

支持

SMALLINT

支持

支持

支持

支持

INTEGER

支持

支持

支持

支持

BIGINT

支持

支持

支持

支持

FLOAT

支持

支持

支持

支持

DOUBLE

支持

支持

支持

支持

DECIMAL/NUMBERIC

支持

支持

支持

支持

REAL

不支持

不支持

不支持

不支持

VARCHAR

支持

支持

支持

支持

JSON

支持

支持

支持

支持

TEXT

支持

支持

支持

支持

MEDIUMTEXT

支持

支持

支持

支持

LONGTEXT

支持

支持

支持

支持

VARBINARY

支持

支持

支持

支持

BINARY

支持

支持

支持

支持

TINYBLOB

支持

支持

支持

支持

MEDIUMBLOB

支持

支持

支持

支持

LONGBLOB

支持

支持

支持

支持

ENUM

支持

支持

支持

支持

SET

支持

支持

支持

支持

BOOLEAN

支持

支持

支持

支持

BIT

支持

支持

支持

支持

DATE

支持

支持

支持

支持

DATETIME

支持

支持

支持

支持

TIMESTAMP

支持

支持

支持

支持

TIME

支持

支持

支持

支持

YEAR

支持

支持

支持

支持

LINESTRING

不支持

不支持

不支持

不支持

POLYGON

不支持

不支持

不支持

不支持

MULTIPOINT

不支持

不支持

不支持

不支持

MULTILINESTRING

不支持

不支持

不支持

不支持

MULTIPOLYGON

不支持

不支持

不支持

不支持

GEOMETRYCOLLECTION

不支持

不支持

不支持

不支持

数据同步前准备:MySQL环境准备

在DataWorks上进行数据同步前,您需要参考本文提前在MySQL侧进行数据同步环境准备,以便在DataWorks上进行MySQL数据同步任务配置与执行时服务正常。以下为您介绍MySQL同步前的相关环境准备。

准备工作1:确认MySQL版本

数据集成对MySQL版本有要求,您可参考上文支持的MySQL版本章节,查看当前待同步的MySQL是否符合版本要求。您可以在MySQL数据库通过如下语句查看当前MySQL数据库版本。

select version();

准备工作2:配置账号权限

建议您提前规划并创建一个专用于DataWorks访问数据源的MySQL账号,操作如下。

  1. 可选:创建账号。

    操作详情请参见创建MySQL账号。

  2. 配置权限。

    • 离线

      在离线同步场景下:

      • 在离线读MySQL数据时,此账号需拥有同步表的读(SELECT)权限。

      • 在离线写MySQL数据时,此账号需拥有同步表的写(INSERTDELETEUPDATE)权限。

    • 实时

      在实时同步场景下,此账号需要拥有数据库的SELECTREPLICATION SLAVEREPLICATION CLIENT权限。

    您可以参考以下命令为账号添加权限,或直接给账号赋予SUPER权限。如下执行语句在实际使用时,请替换'同步账号'为上述创建的账号。

    -- CREATE USER '同步账号'@'%' IDENTIFIED BY '密码'; //创建同步账号并设置密码,使其可以通过任意主机登录数据库。%表示任意主机。
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '同步账号'@'%'; //授权同步账号数据库的 SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限。

    *.*表示授权同步账号对所有数据库的所有表拥有上述权限。您也可以指定授权同步账号对目标数据库的指定表拥有上述权限。例如,授权同步账号对test数据库的user表拥有上述权限,则可以使用GRANT SELECT, REPLICATION CLIENT ON test.user TO '同步账号'@'%';语句。

    说明

    REPLICATION SLAVE语句为全局权限,不能指定授权同步账号对目标数据库的指定表拥有相关权限。

准备工作3:(仅实时同步需要)开启MySQL Binlog

数据集成通过实时订阅MySQL Binlog实现增量数据实时同步,您需要在DataWorks配置同步前,先开启MySQL Binlog服务。操作如下。

重要

  • 如果Binlog在消费中,则无法被数据库删除。如果实时同步任务运行延迟将可能导致源端Binlog长时间被消费,请合理配置任务的延迟告警,并及时关注数据库的磁盘空间。

  • Binlog至少保留72小时以上,避免任务失败后因Binlog已经消失,再启动无法重置位点到故障发生前而导致的数据丢失(此时只能使用全量离线同步来补齐数据)。

  1. 检查Binlog是否开启。

    • 使用如下语句检查Binlog是否开启。

      show variables like "log_bin";

      返回结果为ON时,表明已开启Binlog。

    • 如果您使用备用库同步数据,则还可以通过如下语句检查Binlog是否开启。

      show variables like "log_slave_updates";

      返回结果为ON时,表明备用库已开启Binlog。

    如果返回的结果与上述结果不符:

    • 开源MySQL请参考MySQL官方文档开启Binlog。

    • 阿里云RDS MySQL请参考日志备份开启Binlog。

    • 阿里云PolarDB MySQL请参考开启Binlog开启Binlog。

  2. 查询Binlog的使用格式。

    使用如下语句查询Binlog的使用格式。

    show variables like "binlog_format";

    返回结果说明:

    • 返回ROW,表明开启的Binlog格式为ROW。

    • 返回STATEMENT,表明开启的Binlog格式为STATEMENT。

    • 返回MIXED,表明开启的Binlog格式为MIXED。

    重要

    DataWorks实时同步仅支持同步MySQL服务器Binlog配置格式为ROW。如果返回非ROW请修改Binlog Format。

数据同步任务开发:MySQL同步流程引导

MySQL数据同步任务的配置入口和通用配置流程指导可参见下文的配置指导,详细的配置参数解释可在配置界面查看对应参数的文案提示。

创建数据源

在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建与管理数据源。

单表离线同步任务配置指导

  • 操作流程请参见通过向导模式配置离线同步任务、通过脚本模式配置离线同步任务。

  • 脚本模式配置的全量参数和脚本Demo请参见下文的附录:MySQL脚本Demo与参数说明。

单表实时同步任务配置指导

操作流程请参见DataStudio侧实时同步任务配置。

整库离线、整库(实时)全增量、整库(实时)分库分表等整库级别同步配置指导

操作流程请参见数据集成侧同步任务配置。

常见问题

  • 实时同步MySQL数据源的数据时,一开始读到数据,一段时间后无法读到数据,怎么处理?

  • 实时同步MySQL数据报错

  • 实时同步MySQL数据源时速度为什么会变慢?

  • MySQL分库分表如何将分表同步到一张MaxCompute中

  • 目的端MySQL表字符集为utf8mb4时,同步到MySQL中的中文字符出现乱码时,如何处理?

  • 如何处理编码格式设置/乱码问题导致的脏数据报错?

  • 如何排查离线同步任务运行时间长的问题?

  • 写入/读取MySQL报错:Application was streaming results when the connection failed. Consider raising value of ‘net_write_timeout/net_read_timeout、’ on the server.

更多其他数据集成常见问题请参见数据集成常见问题。

附录:MySQL脚本Demo与参数说明

附录:离线任务脚本配置方式

如果您配置离线任务时使用脚本模式的方式进行配置,您需要在任务脚本中按照脚本的统一格式要求编写脚本中的reader参数和writer参数,脚本模式的统一要求请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下的数据源的Reader参数和Writer参数的指导详情。

MySQL Reader脚本Demo

本文为您提供单库单表和分库分表的配置示例:

  • 配置单库单表

    querySql{
        "type":"job",
        "version":"2.0",//版本号。
        "steps":[
            {
                "stepType":"mysql",//插件名。
                "parameter":{
                    "column":[//列名。
                        "id"
                    ],
                    "connection":[
                        {   "querySql":"select a,b from join1 c join join2 d on c.id = d.id;", //使用字符串的形式,将querySql写在connection中。
                            "datasource":"",//数据源。
                            "table":[//表名,即使只有一张表,也必须以[]的数组形式书写。
                                "xxx"
                            ]
                        }
                    ],
                    "where":"",//过滤条件。
                    "splitPk":"",//切分键。
                    "encoding":"UTF-8"//编码格式。
                },
                "name":"Reader",
                "category":"reader"
            },
            {
                "stepType":"stream",
                "parameter":{},
                "name":"Writer",
                "category":"writer"
            }
        ],
        "setting":{
            "errorLimit":{
                "record":"0"//错误记录数。
            },
            "speed":{
                "throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
                "concurrent":1,//作业并发数。
                "mbps":"12"//限流,此处1mbps = 1MB/s。
            }
        },
        "order":{
            "hops":[
                {
                    "from":"Reader",
                    "to":"Writer"
                }
            ]
        }
    }
  • 配置分库分表

    说明

    分库分表是指在MySQL Reader端可以选择多个MySQL数据表,且表结构保持一致。此处的‘分库分表’是指多个MySQL写入同一个目标表,如想要支持整库级别配置分库分表,还请在数据集成站点建立任务并选择整库分库分表能力

    {
        "type": "job",
        "version": "2.0",
        "steps": [
            {
                "stepType": "mysql",
                "parameter": {
                    "indexes": [
                        {
                            "type": "unique",
                            "column": [
                                "id"
                            ]
                        }
                    ],
                    "envType": 0,
                    "useSpecialSecret": false,
                    "column": [
                        "id",
                        "buyer_name",
                        "seller_name",
                        "item_id",
                        "city",
                        "zone"
                    ],
                    "tableComment": "测试订单表",
                    "connection": [
                        {
                            "datasource": "rds_dataservice",
                            "table": [
                                "rds_table"
                            ]
                        },
                        {
                            "datasource": "rds_workshop_log",
                            "table": [
                                "rds_table"
                            ]
                        }
                    ],
                    "where": "",
                    "splitPk": "id",
                    "encoding": "UTF-8"
                },
                "name": "Reader",
                "category": "reader"
            },
            {
                "stepType": "odps",
                "parameter": {
                               },
                "name": "Writer",
                "category": "writer"
            },
            {
                "name": "Processor",
                "stepType": null,
                "category": "processor",
                "copies": 1,
                "parameter": {
                    "nodes": [],
                    "edges": [],
                    "groups": [],
                    "version": "2.0"
                }
            }
        ],
        "setting": {
            "executeMode": null,
            "errorLimit": {
                "record": ""
            },
            "speed": {
                "concurrent": 2,
                "throttle": false
            }
        },
        "order": {
            "hops": [
                {
                    "from": "Reader",
                    "to": "Writer"
                }
            ]
        }
    }

MySQL Reader脚本参数

脚本参数名

描述

是否必选

默认值

datasource

数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须与添加的数据源名称保持一致。

table

选取的需要同步的表名称,一个数据集成任务只能同步数据到一张目标表。

table用于配置范围的高级用法示例如下:

  • 您可以通过配置区间读取分库分表,例如'table_[0-99]'表示读取'table_0''table_1''table_2'直到'table_99'

  • 如果您的表数字后缀的长度一致,例如'table_000''table_001''table_002'直到'table_999',您可以配置为'"table": ["table_00[0-9]", "table_0[10-99]", "table_[100-999]"]'

说明

任务会读取匹配到的所有表,具体读取这些表中column配置项指定的列。如果表不存在,或者读取的列不存在,会导致任务失败。

column

所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息 。默认使用所有列配置,例如[ * ]。

  • 支持列裁剪:列可以挑选部分列进行导出。

  • 支持列换序:列可以不按照表schema信息顺序进行导出。

  • 支持常量配置:您需要按照MySQL SQL语法格式,例如["id","table","1","'mingya.wmy'","'null'","to_char(a+1)","2.3","true"]

    • id为普通列名。

    • table为包含保留字的列名。

    • 1为整型数字常量。

    • ‘mingya.wmy’为字符串常量(注意需要加上一对单引号)。

    • 关于null:

      • " "表示空。

      • null表示null。

      • 'null'表示null这个字符串。

    • to_char(a+1)为计算字符串长度函数。

    • 2.3为浮点数。

    • true为布尔值。

  • column必须显示指定同步的列集合,不允许为空。

splitPk

MySQL Reader进行数据抽取时,如果指定splitPk,表示您希望使用splitPk代表的字段进行数据分片,数据同步因此会启动并发任务进行数据同步,提高数据同步的效能。

  • 推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。

  • 目前splitPk仅支持整型数据切分,不支持字符串、浮点和日期等其他类型 。如果您指定其他非支持类型,忽略splitPk功能,使用单通道进行同步。

  • 如果不填写splitPk,包括不提供splitPk或者splitPk值为空,数据同步视作使用单通道同步该表数据 。

where

筛选条件,在实际业务场景中,往往会选择当天的数据进行同步,将where条件指定为gmt_create>$bizdate

  • where条件可以有效地进行业务增量同步。如果不填写where语句,包括不提供where的key或value,数据同步均视作同步全量数据。

  • 不可以将where条件指定为limit 10,这不符合MySQL SQL WHERE子句约束。

querySql(高级模式,向导模式不支持此参数的配置)

在部分业务场景中,where配置项不足以描述所筛选的条件,您可以通过该配置型来自定义筛选SQL。配置该项后,数据同步系统会忽略tables、columns和splitPk配置项,直接使用该项配置的内容对数据进行筛选。例如,需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id。当您配置querySql时,MySQL Reader直接忽略table、column、where和splitPk条件的配置,querySql优先级大于table、column、where和splitPk选项。datasource通过它解析出用户名和密码等信息。

说明

querySql需要区分大小写,例如,写为querysql会不生效。

useSpecialSecret

多来源数据源时,是否使用各自数据源的密码。取值包括:

  • true

  • false

如果您配置了多个来源数据源,且各个数据源使用的用户名密码不一致,您可以设置使用各自数据源的密码,即此参数设置为true

false

MySQL writer脚本Demo

{
    "type":"job",
    "version":"2.0",//版本号。
    "steps":[ 
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"mysql",//插件名。
            "parameter":{
                "postSql":[],//导入后的准备语句。
                "datasource":"",//数据源。
                "column":[//列名。
                    "id",
                    "value"
                ],
                "writeMode":"insert",//写入模式,您可以设置为insert、replace或update。
                "batchSize":1024,//一次性批量提交的记录数大小。
                "table":"",//表名。
                "preSql":[ 
                     "delete from XXX;" //导入前的准备语句。
                   ]
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{//错误记录数。
            "record":"0"
        },
        "speed":{
            "throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
            "concurrent":1, //作业并发数。
            "mbps":"12"//限流,控制同步的最高速率,防止对上游/下游数据库读取/写入压力过大,此处1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

MySQL Writer脚本参数

脚本参数名

描述

是否必选

默认值

datasource

数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须与添加的数据源名称保持一致。

table

选取的需要同步的表名称。

writeMode

选择导入模式,可以支持insert into、on duplicate key update和replace into三种方式:

  • insert into:当主键/唯一性索引冲突时会写不进去冲突的行,以脏数据的形式体现。

    如果您通过脚本模式配置任务,请设置writeMode为insert。

  • on duplicate key update:没有遇到主键/唯一性索引冲突时,与insert into行为一致。冲突时会用新行替换已经指定的字段的语句,写入数据至MySQL。

    如果您通过脚本模式配置任务,请设置writeMode为update。

  • replace into:没有遇到主键/唯一性索引冲突时,与insert into行为一致。冲突时会先删除原有行,再插入新行。即新行会替换原有行的所有字段。

    如果您通过脚本模式配置任务,请设置writeMode为replace。

insert into

column

目标表需要写入数据的字段,字段之间用英文所逗号分隔,例如"column": ["id", "name", "age"]。如果要依次写入全部列,使用星号(*)表示, 例如"column": ["*"]

preSql

执行数据同步任务之前率先执行的SQL语句。目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,执行前清空表中的旧数据(truncate table tablename)。

说明

当有多条SQL语句时,不支持事务。

postSql

执行数据同步任务之后执行的SQL语句,目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,加上某一个时间戳alter table tablename add colname timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

说明

当有多条SQL语句时,不支持事务。

batchSize

一次性批量提交的记录数大小,该值可以极大减少数据同步系统与MySQL的网络交互次数,并提升整体吞吐量。如果该值设置过大,会导致数据同步运行进程OOM异常。

256

updateColumn

当writeMode配置成update时,发生遇到主键/唯一性索引冲突时所更新的字段。字段之间用英文逗号所分隔,例如 "updateColumn":["name", "age"]

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/168960.html

(0)
上一篇 2023年12月10日 上午11:32
下一篇 2023年12月10日 上午11:33
详情页2

相关推荐

  • 腾讯云轻量应用服务器地域与网络连通性云小二

    地域 简介腾讯云数据中心分布在全球多个位置,由不同的地域(Region)构成。每个地域都包含独立的物理数据中心,为了降低访问时延、提高下载速度,建议您选择最靠近您客户的地域。相关特性每个地域可包含多个可用区。不同地域的轻量应用服务器间默认内网不互通。说明如何选择地域?在新建轻量应用服务器实例时,您可结合以下因素选择所处的地域,注意实例创建成功后不支持更换地域…

    腾讯云 2023年12月9日
  • 腾讯云轻量应用服务器关于孟买地域实例套餐增加购买时长优惠折扣公告云小二

    说明:本次孟买地域优惠折扣活动已经于2022年9月28日失效。腾讯云轻量应用服务器于2022年3月24日起,在孟买地域下,使用Linux 及 Windows 低配实例套餐(2核2GB)新购或续费实例,包年包月任意购买时长均可享受5折优惠。 调整详情 购买时长折扣 购买时长1个月及以上均可享受5折优惠。 相关实例套餐 使用以下套餐新购或续费实例时,可享受任意购…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云对象存储图片审核

    简介 内容审核功能是由 数据万象(Cloud Infinite,CI)提供的,数据万象将处理能力与 COS SDK 完全结合,您可以直接按照本篇文档指引进行使用。说明使用内容审核服务需拥有数据万象使用权限:主账号请 单击此处 进行角色授权。子账号请参见 授权子账号接入数据万象服务 文档。本文档提供关于图片审核接口的 API 概览以及 SDK 示例代码。 AP…

    腾讯云 2023年12月9日
  • 阿里云大数据开发治理平台 DataWorksGetMetaColumnLineage-云淘科技

    调用GetMetaColumnLineage获取字段的血缘关系。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 请求参数 名称 类型 是否必选 示例值 描述 Action String 是 GetMetaColumnLineage 要执行的操作。…

  • 腾讯云容器服务tke-monitor-agent 说明同尘科技

    组件介绍 为了提升容器服务基础监控及告警服务的稳定性,腾讯云升级了基础监控服务架构。新版基础监控会在用户集群的 kube-system 命名空间下部署一个 DaemonSet,名称为 tke-monitor-agent,并创建对应的认证授权 K8s 资源对象 ClusterRole、ServiceAccount、ClusterRoleBinding,名称均为…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。