MySQL 到 MySQL 实时数据同步实操分享
MySQL 至MySQL的实时数据同步,是数据库管理中的一个重要环节,无论是为了实现数据的高可用性、灾备需求,还是进行数据分析和处理,实时同步都扮演着至关重要的角色,下面将详细介绍几种常用的MySQL到MySQL实时数据同步工具及其具体操作步骤:
使用 Tapdata Cloud 进行 MySQL 到 MySQL 的实时数据同步
配置 MySQL 连接
1、创建连接:在 Tapdata Cloud 的操作后台左侧菜单栏点击【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,选择 MySQL。
2、输入配置信息:在打开的连接信息配置页面依次输入以下配置信息:
连接名称:设置连接的名称,多个连接的名称不能重复。
数据库地址:数据库 IP / Host。
端口:数据库端口。
数据库名称:tapdata 数据库连接是以一个 db 为一个数据源,这里的 db 是指一个数据库实例中的 database,而不是一个 mysql 实例。
账号:可以访问数据库的账号。
密码:数据库账号对应的密码。
时间时区:默认使用该数据库的时区;若指定时区,则使用指定后的时区设置。
3、测试连接并保存:完成上述配置后,测试连接,提示测试通过后保存连接即可。
选择同步模式
1、进入任务管理页面:进入 Tapdata Cloud 操作后台任务管理页面,点击添加任务按钮进入任务设置流程。
2、选定源端与目标端:根据刚才建好的连接,选定源端与目标端。
3、选择需要同步的库、表:如果对表名有修改需要,可以通过页面中的表名批量修改功能对目标端的表名进行批量设置。
4、选择同步类型:平台提供全量同步、增量同步、全量+增量同步,设定写入模式和读取数量,如果选择的是全量+增量同步,在全量任务执行完毕后,Tapdata Agent 会自动进入增量同步状态,在该状态中,Tapdata Agent 会持续监听源端的数据变化(包括:写入、更新、删除),并实时地将这些数据变化写入目标端。
5、监控任务:点击任务名称可以打开任务详情页面,查看任务详细信息,点击任务监控可以打开任务执行详情页面,查看任务进度/里程碑等的具体信息。
进行数据校验
1、数据校验:一般同步完成后,都会进行一下数据校验,防止踩坑,Tapdata Cloud 有三种校验模式,常用最快的快速count校验,只需要选择要校验的表,不用设置其他复杂的参数和条件,简单方便。
使用 Canal 实现 MySQL 到 MySQL 的全量、增量同步
简要说明
Canal的使用需要一个服务端deployer和客户端adapter,服务端来监听源数据库的binlog变化并解析为sql等待客户端消费;客户端连接服务端来进行sql消费。
配置实现
1、开启 binlog:在 MySQL 配置文件中开启 binlog。
```ini
[mysqld]
logbin=mysqlbin # 开启 binlog
binlogformat=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
```
2、授权:授权 canal 连接 MySQL 的账号具有作为 MySQL slave 的权限(SELECT, REPLICATION SLAVE, REPLICATION CLIENT)。
3、配置服务端:下载服务端包canal.deployer1.1.5.tar.gz,进入文件 conf/example/instance.properties,如下修改,其他保持默认即可。
```ini
# position info 这里设置源数据库地址(可选增量信息)
canal.instance.master.address=localhost:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=
# ...# username/password 这里设置源数据库用户名、密码、编码格式
canal.instance.dbUsername=root
canal.instance.dbPassword=root
canal.instance.connectionCharset = UTF8
```
4、启动服务端:执行命令 sh bin/startup.sh 启动服务端。
5、配置客户端:下载安装包canal.adapter1.1.5.tar.gz,这里客户端启动后会提供REST接口,以供查看监控客户端运行状态,总配置文件 conf/application.yml,根据需要配置(这里以MySQL 到 MySQL同步为例),其他保持默认即可。
```yaml
mode: tcp #tcp kafka rocketMQ rabbitMQ
flatMessage: true
syncBatchSize: 1000
retries: 0
timeout:
#...# dataSource配置
srcDataSources:
defaultDS:
url: jdbc:mysql://localhost:3306/test?useUnicode=true
username: root
password: root
canalAdapters:
instance: example # canal instance Name or mq topic name这里设置实例名称
groups:
groupId: g1 # 实例中分组名称
# 目标库(消费端)配置
outerAdapters:
name: logger # name 可多个消费端配置
name: rdb
key: mysql1 # 实例中的 key
properties:
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://localhost:3306/test2?useUnicode=true
jdbc.username: root
jdbc.password: root
```
使用 DataX 实现 MySQL 到 MySQL 的全量同步和批量更新
准备数据库
1、创建表:分别在源数据库和目标数据库中创建用于同步的表,源数据库中的表名为 datax_src,目标数据库中的表名为 datax_target。
```sql
CREATE TABLEdatax_src
(
id
bigint NOT NULL,
src_name
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mbc4_0900_ai_ci;
CREATE TABLEdatax_target
(
id
bigint NOT NULL,
target_name
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
```
2、插入数据:创建一个函数,向 datax_src 插入5000条数据。
```sql
CREATE DEFINER=root
@%
FUNCTIONAUTO_INSERT
() RETURNS int
BEGIN
DECLARE index_num int DEFAULT 0;
WHILE index_num < 5000 DO
SET index_num = index_num + 1;
INSERT INTO datax_src VALUES (index_num,CONCAT('name',index_num));
END WHILE;
RETURN 0;
END;
```
3、修改mysqlreader的示例:从 datax_src 同步抽取数据到本地。
```json
{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "1131310577",
"column": [
"id",
"src_name"
],
"splitPk": "id",
"connection": [
{
"table": [
"datax_src"
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3307/datax"
]
}
]
},
},
"writer": {
"name": "streamwriter",
"parameter": {
"print":true
}
}
}
]
}
}
```
FAQs
问题1:为什么选择使用 Tapdata Cloud 进行 MySQL 到 MySQL 的实时数据同步?
答:选择使用 Tapdata Cloud 进行 MySQL 到 MySQL 的实时数据同步主要有以下几个原因:Tapdata Cloud 提供了永久免费的版本,适合预算有限的用户和企业,它支持多种同步模式,包括全量同步、增量同步以及全量+增量同步,可以根据不同的业务需求选择合适的同步方式,Tapdata Cloud 还具备实时数据校验功能,确保数据同步的准确性和完整性,它的操作界面简洁直观,即使是初学者也能快速上手,大大降低了学习和使用成本。
问题2:在使用 Canal 进行 MySQL 到 MySQL 的全量、增量同步时,需要注意哪些事项?
答:在使用 Canal 进行 MySQL 到 MySQL 的全量、增量同步时,需要注意以下几点:必须确保源数据库已开启 binlog,binlog_format 设置为 ROW 模式,以便 Canal 能够正确解析 binlog,需要为 Canal 配置专用的数据库账号,并赋予其 REPLICATION CLIENT、REPLICATION SLAVE 等必要的权限,在配置服务端和客户端时,应仔细核对各项参数设置,确保服务端能够正确监听源数据库的 binlog 变化,并将解析后的 SQL 语句传递给客户端,由于 Canal 依赖于数据库的 binlog,因此在使用过程中应避免频繁重启数据库或进行大范围的数据变更操作,以免影响同步效果。