如何使用Maxwell进行全量表或增量表的数据同步

1.Maxwell概述:

Maxwell是使用Java编写(可以使用jps查看进程)的MySQL变更数据抓取软件。他会实时监控Mysql数据库的数据变更操作(包括insert、update、delete),并将变更数据以JSON的格式发送给Kafka、Kinesi等流数据处理平台。

Maxwell输出数据格式

操作 SQL语句 数据格式
插入 insert into gmall.student values(1, 'zhangsan'); ```json
{
“database”: “gmall”,
“table”: “student”,
“type”: “insert”,
“ts”: 1634004537,
“xid”: 1530907,
“commit”: true,
“data”: {
“id”: 1,
“name”: “zhangsan”
}
}
```
更新 update gmall.student set name = 'lisi' where id=1; ```json
{
“database”: “gmall”,
“table”: “student”,
“type”: “update”,
“ts”: 1634004657,
“xid”: 1531916,
“commit”: true,
“data”: {
“id”: 1,
“name”: “lisi”
},
“old”: {
“name”: “zhangsan”
}
}
```
删除 delete from gmall.student where id=1; ```json
{
“database”: “gmall”,
“table”: “student”,
“type”: “delete”,
“ts”: 1634004751,
“xid”: 1532725,
“commit”: true,
“data”: {
“id”: 1,
“name”: “lisi”
}
}
```

字段说明:

  1. database:变更数据所属的数据库
  2. commit:事务提交标志,可用于重新组装事务。
  3. xid:事务ID,用于标识事务。
  4. ts:变更数据的时间戳。
  5. type:变更数据的类型,包括insert、update、delete。
  6. data:变更数据,包括新增或修改的数据。
  7. old:变更前的数据,仅在update操作时存在。

2.Maxwell的实现原理

Maxwell的实现原理很简单,就是将自己伪装成Slave,并遵循Mysql主从复制的协议,从master中同步数据。
Mysql主从复制工作原理
① Master主库接收到数据变更请求,完成数据变更,并将其写到二级制日志(binary log)中。
② Slave从库向Mysql master发送dump协议,将Master主库的binary log events拷贝到从库的中继日志(relay log)中。
③ Slave从库读取并回放中继日志中的事件,将更新的数据同步到自己的数据库中。

3.Maxwell部署

1.配置MySQL

1.1

配置MySQL启动MySQL Binlog(修改MySQL的配置文件/etc/my.cnf重启Mysql服务后才生效)

2.1

Mysql Binlog模式介绍
① Statement-based: 基于语句,Binlog会记录所有写操作的SQL语句,包括:insert、update、delete等。
优点:节省空间;
缺点:有可能造成数据不一致,如:insert语句中包含now()函数。
② Row-based: 基于行,Binlog会记录每次写操作的被操作行记录的变化。
优点:保持数据的绝对一致性
缺点:占用较大空间
③ mixed: 混合模式,默认是Statement-based,如果SQL语句可能导致数据不一致,就自动切换到Row-based
Maxwell要求Binlog采用Row-based模式

2.创建Maxwell所需数据库和用户

3.配置Maxwell

3.1

修改Maxwell的配置文件config.properties,主要是配置数据发送的目的地。(若Maxwell发送数据的目的地是kafka集群,需要首先将kafka集群启动。)

4.启动Maxwell

Maxwell的启动命令:

1
bin/maxwell --config config.properties --daemon

Maxwell关闭命令:

1
ps -ef | grep maxwell | grep -v grep | grep maxwell | awk '{print $2}' | xargs kill -9

Maxwell全量数据同步流程命令

1
bin/maxwell-bootstrap --database edu --table user_info --config config.properties