Maxwell 是一个能实时读取 MySQL 二进制日志文件binlog,并生成 Json格式的消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、
Google Cloud Pub/Sub、文件或其它平台的应用程序。它的常见应用场景有ETL、维护缓存、收集表级别的dml指标、增量到搜索引擎、数据分区迁移、
切库binlog回滚方案等。
Maxwell主要提供了下列功能
MySQL中一般有以下几种日志
日志类型 | 写入日志的信息 |
---|---|
错误日志 | 记录在启动,运行或停止mysqld时遇到的问题 |
通用查询日志 | 记录建立的客户端连接和执行的语句 |
二进制日志 binlog | 记录更改数据的语句 |
中继日志 | 从服务器 复制 主服务器接收的数据更改 |
慢查询日志 | 记录所有执行时间超过 long_query_time 秒的所有查询或不使用索引的查询 |
DDL日志(元数据日志) | 元数据操作由DDL语句执行 |
在默认情况下,系统仅仅打开错误日志,关闭了其他所有日志,以达到尽可能减少IO损耗提高系统性能的目的,但是在一般稍微重要一点的实际应用场景中,都至少需要打开二进制日志,因为这是MySQL很多存储引擎进行增量备份的基础,也是MySQL实现复制的基本条件
接下来主要介绍二进制日志 binlog。
DDL
和 DML
语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。Binlog日志的两个最重要的使用场景
记录在二进制日志中的事件的格式取决于二进制记录格式。支持三种格式类型:
Statement
Row
Mixed
mysql 数据实时同步可以通过解析mysql的 binlog 的方式来实现,解析binlog可以有多种方式,可以通过canal,或者maxwell等各种方式实现。以下是各种抽取方式的对比介绍。
其中canal
由 Java开发,分为服务端和客户端,拥有众多的衍生应用,性能稳定,功能强大;canal 需要自己编写客户端来消费canal解析到的数据。
Maxwell相对于canal的优势是使用简单,Maxwell比Canal更加轻量级,它直接将数据变更输出为json字符串,不需要再编写客户端。对于缺乏基础建设,短时间内需要快速迭代的项目和公司比较合适。
另外Maxwell
有一个亮点功能,就是Canal只能抓取最新数据,对已存在的历史数据没有办法处理。而Maxwell有一个bootstrap
功能,可以直接引导出完整的历史数据用于初始化,非常好用。
1、服务器当中安装mysql(省略)
2、添加mysql普通用户maxwell
为mysql添加一个普通用户maxwell,因为maxwell这个软件默认用户使用的是maxwell这个用户。
进入mysql客户端,然后执行以下命令,进行授权
mysql -uroot -p123456
执行sql语句
--校验级别最低,只校验密码长度 mysql> set global validate_password_policy=LOW; mysql> set global validate_password_length=6; --创建maxwell库(启动时候会自动创建,不需手动创建)和用户 mysql> CREATE USER 'maxwell'@'%' IDENTIFIED BY '123456'; mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%'; mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to 'maxwell'@'%'; --刷新权限 mysql> flush privileges;
3、修改配置文件 /etc/my.cnf
执行命令 sudo vim /etc/my.cnf, 添加或修改以下三行配置
#binlog日志名称前缀 log-bin= /var/lib/mysql/mysql-bin #binlog日志格式 binlog-format=ROW #唯一标识,这个值的区间是:1到(2^32)-1 server_id=1
4、重启mysql服务
执行如下命令
sudo service mysqld restart
5、验证binlog是否配置成功
进入mysql客户端,并执行以下命令进行验证
mysql -uroot -p123456 mysql> show variables like '%log_bin%';
6、查看binlog日志文件生成
进入 /var/lib/mysql
目录,查看binlog日志文件.