目录
Maxwell简介
Maxwell 是由美国 Zendesk 开源,用 Java 编写的 MySQL 实时抓取软件。 实时读取 MySQL 二进制日志 Binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台的应用程序。
Maxwell工作原理
Maxwell把自己伪装成slave,假装从master复制数据
Mysql Master主库将改变记录写到二进制日志中,Mysqk Slave从库向Mysql Master发送dump协议,将master主库的binary log envents拷贝到它的中继日志(relay log),Slave从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库
二进制Binlog
MySQL的二进制日志可以说MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
一般来说开启二进制日志大概会有 1%的性能损耗。二进制有两个最重要的使用场景:
其一:MySQL Replication 在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 来达到 master-slave 数据一致的目的。
其二:自然就是数据恢复了,通过使用 mysqlbinlog 工具来使恢复数据。
二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的 DDL 和 DML(除了数据查询语句)语句事件。
找到Mysql配置文件位置
# 如果/etc 目录下没有,可以通过 locate my.cnf 查找位置
Linunx: /etc/my.cnf
window: \my.ini
在mysql的配置文件下,修改配置。这个表示 binlog 日志的前缀是 mysql-bin,以后生成的日志文件就是 mysql-bin.123456 的文件后面的数字按顺序生成,每次 mysql 重启或者到达单个文件大小的阈值时,新生一个文件,按顺序编号。
在[mysqld] 区块,设置/添加 log-bin=mysql-bin
mysql binlog 的格式有三种,分别是STATEMENT,MIXED,ROW,在配置文件中可以选择配置binlog_format= statement|mixed|row
- statement:语句级,binlog会记录每次一执行写操作的语句,相对row模式节省空间,但是可能产生不一致性。优点节省空间,缺点造成数据不一致
- row:行级,会记录每次操作后每行记录的变化。优点保持数据的绝对一致性,因为不管sql是什么,引用了什么函数,只记录执行后的效果。缺点占用空间
- mixed:statement的升级版,一定程度上解决了因为一些情况而造成的statement模式不一致的问题
初始化Maxwell
CREATE DATABASE maxwell;
set global validate_password_length=4;
set global validate_password_policy=0;
grant all on maxwell.* to 'maxwell'@'%' IDENTIFIED BY 'maxwell';
GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell@'%';
使用Maxwell监控抓取MySQL数据
producer=kafka
kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
#需要添加
kafka_topic=ods_base_db_m
# mysql login info
host=hadoop102
user=maxwell
password=maxwell
#需要添加 初始化会用
client_id=maxwell_1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-26L2aVGr-1641285255336)(…/AppData/Roaming/Typora/typora-user-images/image-20220104162259747.png)]
/opt/module/maxwell-1.25.0/bin/maxwell --config /opt/module/maxwell-1.25.0/config.properties >/dev/null 2>&1 &
bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic ods_base_db_m