如何对MySQL数据库中的数据实时同步?

如何对MySQL数据库中的数据实时同步?,第1张

具体 *** 作:

1、在分析型数据库上创建目标表,数据更新类型为实时写入,字段名称和MySQL中的建议均相同;

2、在阿里云数据传输的控制台上创建数据订阅通道,并记录这个通道的ID;

3、 配置dts-ads-writer/app.conf文件,配置方式如下:所有配置均保存在app.conf中,运行前请保证配置正确;修改配置后,请重启writer,基本配置:

注意事项:

1、RDS for MySQL表和分析型数据库中表的主键定义必须完全一致;如果不一致会出现数据不一致问题。如果需要调整RDS/分析型数据库表的主键,建议先停止writer进程

2、一个插件进程中分析型数据库db只能是一个,由adsJdbcUrl指定;

3、一个插件进程只能对应一个数据订阅通道;如果更新通道中的订阅对象时,需要重启进程。

前提条件

您需要在您RDS for MySQL所在的云账号下开通阿里云数据传输服务。并 点击此处

下载dts-ads-writer插件到您的一台服务器上并解压(需要该服务器可以访问互联网,建议使用阿里云ECS以最大限度保障可用性)。服务器上需要有Java

6或以上的运行环境(JRE/JDK)。

*** 作步骤

1. 在分析型数据库上创建目标表,数据更新类型为实时写入,字段名称和MySQL中的建议均相同;

2. 在阿里云数据传输的控制台上创建数据订阅通道,并记录这个通道的ID;

(见: https://help.aliyun.com/document_detail/dts/Getting-Started/data-subscription.html),

3. 配置dts-ads-writer/app.conf文件,配置方式如下:

所有配置均保存在app.conf中,运行前请保证配置正确;修改配置后,请重启writer

基本配置:

{

"dtsAccessId": "", // 拥有数据订阅通道的云账号的accessId, 必须配置

"dtsAccessKey": "", // 拥有数据订阅通道的云账号的accessKey, 必须配置

"dtsTunnelId": "", // 数据订阅通道的id, 必须配置注意是id,不是通道名称

"adsUserName": "", // 访问您的分析型数据库的用户名(accessId), 必须配置

"adsPassword": "", // 访问您的分析型数据库的密码(accessKey), 必须配置

"adsJdbcUrl": "", // 访问分析型数据库的jdbc连接串, 必须配置(格式jdbc:mysql://ip:port/dbname)

"tables": [

{

"source": {

"primaryKeys": [""] // 主键定义, 必须配置注意RDS和分析型数据库中的主键定义必须一致

"db": "", // 源头RDS的db名称, 必须配置

"table": "",// 源头RDS的table名称, 必须配置

"skipColumns": ["col1"] // 可选,若在此配置了RDS表某列名,则该列不会同步

},

"target": {

"table": "" // 分析型数据库表的table名称, 必须配置

},

"columnMapping": {

"": "" // rds表和ads表的列对应关系:key为rds的列名, value为分析型数据库的列名,选填,不填则按照列名一一对应

}

}

]

}

tables节点的配置示例,

表示rds_db库下的rds_table表对应ads_table表,并且rds_table表的col1列对应ads_table表的col1_ads列,

rds_table表的col2列对应ads_table表的col2_ads列

"tables": [

{

"source": {

"primaryKeys": [

"col1",

"col2"

],

"db": "rds_db",

"table": "rds_table"

},

"target": {

"table": "ads_table"

},

"columnMapping": {

"col1": "col1_ads",

"col2": "col2_ads"

}

}

]

注意事项:

1)RDS for MySQL表和分析型数据库中表的主键定义必须完全一致;如果不一致会出现数据不一致问题。如果需要调整RDS/分析型数据库表的主键,建议先停止writer进程;

2)一个插件进程中分析型数据库db只能是一个,由adsJdbcUrl指定;

3)一个插件进程只能对应一个数据订阅通道;如果更新通道中的订阅对象时,需要重启进程

4)RDS for MySQL中DDL *** 作不做同步处理;

5)更新app.conf需要重启插件进程才能生效;

6)如果工具出现bug或某种其它原因需要重新同步历史数据,只能回溯最近24小时的数据(在阿里云数据传输的控制台中修改消费位点);

7)插件的最大同步性能与运行插件的服务器的互联网带宽和磁盘IOPS成正比。

4. 运行dts-ads-writer/bin/startup.sh(sh bin/startup.sh);

5. 配置监控程序监控进程存活和日志中的常见错误码。

logs目录下的日志中的异常信息均以ErrorCode=XXXX ErrorMessage=XXXX形式给出,可以进行监控

这种架构一般用在以下三类场景

1. 备份多台 Server 的数据到一台如果按照数据切分方向来讲,那就是垂直切分。比如图 2,业务 A、B、C、D 是之前拆分好的业务,现在需要把这些拆分好的业务汇总起来备份,那这种需求也很适用于多源复制架构。实现方法我大概描述下:业务 A、B、C、D 分别位于 4 台 Server,每台 Server 分别有一个数据库来隔离前端的业务数据,那这样,在从库就能把四台业务的数据全部汇总起来,而不需要做额外的 *** 作。那没有多源复制之前,要实现这类需求,只能在汇总机器上搭建多个 MySQL 实例,那这样势必会涉及到跨库关联的问题,不但性能急剧下降,管理多个实例也没有单台来的容易。

2. 用来聚合前端多个 Server 的分片数据。

同样,按照数据切分方向来讲,属于水平切分。比如图 3,按照年份拆分好的数据,要做一个汇总数据展现,那这种架构也非常合适。实现方法稍微复杂些:比如所有 Server 共享同一数据库和表,一般为了开发极端透明,前端配置有分库分表的中间件,比如爱可生的 DBLE。

3. 汇总并合并多个 Server 的数据

第三类和第一种场景类似。不一样的是不仅仅是数据需要汇总到目标端,还得合并这些数据,这就比第一种来的相对复杂些。比如图 4,那这样的需求,是不是也适合多源复制呢?答案是 YES。那具体怎么做呢?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10101038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存