1.1 Maxwell 定义
Maxwell 是由美国 Zendesk 开源,用 Java 编写的 MySQL 实时抓取软件。 实时读取MySQL 二进制日志 Binlog,并生成 JSON 作为生产者发送格式消息 Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其他平台的应用程序。
官网地址:http://maxwells-daemon.io/
注意:如果你用JDK8,Maxwell需要用v1.30.0之前的版本(v1.29.2)
1.2 Maxwell 工作原理
1.2.1 MySQL 从复制过程开始
- Master 主库将更改记录并写入二进制日志(binary log)中
- Slave 从库向 mysql master 发送 dump 协议,将 master 主库的 binary log events 复制到它的中继日志(relay log);
- Slave 读取并重做中继日志中的事件,将改变的数据同步到自己的数据库。
1.2.2 Maxwell 的工作原理
Maxwell 工作原理很简单,就是,
1.2.3 MySQL 的 binlog
MySQL 的二进制日志可以说 MySQL 最重要的日志记录了所有的日志 DDL 和 DML(数据查询语句除外)语句以事件形式记录,还包括语句执行所消耗的时间,MySQL 二进制日志是的。
一般来说,打开二进制日志可能会 。二进制有两个最重要的使用场景:
- 其一:MySQL Replication 在 Master 端开启 binlog,Master 将其二进制日志传递给 slaves 来达到 的目的。
- 二是自然通过使用 mysqlbinlog 恢复数据的工具。
二进制日志包括两种文件:二进制日志索引文件(文件名后缀为.index)用于记录所有二进制文件和二进制日志文件(文件名后缀为.00000*)记录所有数据库 DDL 和 DML(数据查询语句除外)语句事件。
-
找到 MySQL 配置文件的位置
-
Linux:
/etc/my.cnf
如果/etc 没有目录,可以通过 locate my.cnf 查找位置
-
Windows:
\my.ini
-
在 mysql 在配置文件下,修改配置文件
在
[mysqld]
设置/添加块这个表示 binlog ,未来生成的日志文件是 mysql-bin.文件后面的数字按顺序生成,每次 mysql 重新启动或达到单个文件大小的阈值时,按顺序编号新文件。
mysql binlog 有三种格式,即 。
配置文件可以选择 binlog_format= statement|mixed|row
三种格式的区别:
-
语句级,binlog 每次执行写作操作都会记录语句。
相对 row 模式,但是,比如
update test set create_date=now();
如果用 binlog 由于执行时间不同,日志恢复可能产生的数据也不同。优点: 节省空间
缺点: 数据导致数据不一致。
-
行级, binlog 记录每次操作后每行记录的变化。
优点:保持数据的绝对一致性。因为无论如何 sql 他只记录执行后的效果,引用了什么函数。
缺点:占用大空间。
-
混合级别,,在一定程度上解决了 statement 由于某些情况,模模型数据不一致。
默认还是 statement,例如:
包含在函数中 UUID() 时; 包含 AUTO_INCREMENT 更新字段表; 执行 INSERT DELAYED 语句时; 用 UDF 时;
会按照 ROW 处理方法
优点:节省空间,兼顾一定的一致性。
缺点:还有一些,另外 statement 和 mixed 对于需要对binlog 监控不方便。
1.3 Maxwell 与 Canal 的对比
- Maxwell 没有canal 的 server client 只有一种模式server将数据发送到消息队列或redis。若需要多个例子,则通过指定不同的配置文件启动多个过程。
- Maxwell 有一个亮点功能,就是canal 只能抓取最新数据,不能处理现有的历史数据。Maxwell有一个 bootstrap 该功能可以直接为初始化引导完整的历史数据,非常有用。
- Maxwell 不能直接支持HA,但支持断点还原,即错误解决后重启,继续上次读取数据。
- Maxwell 只支持json格式,而Canal如果用Server client 对于模式,格式可以自定义。
- Maxwell 比 Canal更轻量级。