maxwell学习笔记
文章目录
Maxwell定义
Maxwell是由美国Zendesk开源,用Java编写的MySql实时抓取软件。实时抓取MySQL二进制日志Binlog,并生成JSON格式的消息,作为生产者发送给KKafka,Kinesis,RabbitMQ,Redis,Google Cloud Pub/Sub,文件或其他平台的应用程序。
官网地址:http://maxwells-daemon.io/
目前最新的是1.38.0版本(2022年10月6日)
但是1.29.2 是最后一个支持JDK8的版本,使用JDK8的小伙伴请加下这个版本。
Maxwell工作原理
MySQL主从复制
Master主库,发生改变时,写进二进制日志Binlog(binary log)
Slave从库,通过IO线程,将Binlog读取保存到Relaylog,然后在自己的仓库中执行Relaylog,实现数据同步。
Maxwell工作原理
Maxwell伪装成Slave从库,从Master主库中获取binlog,
MySQL的Binlog
Binlog记录所有的DDL和DML语句,不记录数据查询语句。
以事件形式记录,以及执行消耗事件,事务安全的。
1. DDL(data defination language)数据库定义语言
2. DML(data manipulation language)数据操作语言
3. DCL(data control language)数据库控制语言
4. DQL(data query language)数据查询语言
作用:
- master-slave数据同步
- 数据恢复
相关链接:
https://dev.mysql.com/doc/refman/5.7/en/binary-log.html
https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html
MySQL开启Binlog
linux系统配置文件默认位置:/etc/my.cnf
快速定位配置文件
# locate my.cnf
在[mysqld]区块中配置binlog配置
快速定位[mysqld]区块
root@/etc/mysql# grep -rn -F "[mysqld]"
mysql.conf.d/mysqld.cnf:27:[mysqld]
相关配置:
# binlog位置和名称
log_bin = /var/log/mysql/mysql-bin.log
# binlog日志文件大小
max_binlog_size = 100M
# binlog格式
# binlog_format = statement # 记录SQL语句(有可能数据不一致,比如语句中有当前时间) 数据量小,节省空间
binlog_format = row # 记录行级别的数据改变,数据量大,占用空间,能保证一致性。
binlog_format = mixed # 混合格式,不会导致不一致问题的,保存为SQL语句,会导致不一致性的,保存行数据,但是还有可能导致不一致性的可能。
Maxwell需要binlog_format配置成row格式
Maxwell使用
安装MySQL
sudo apt-get install mysql-server mysql-client
解注
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
加一行配置:
binlog_format = row
默认对所有数据库进行binlog日志
可以指定对特定数据库进行binlog
binlog-do-db = <数据库名称1>
binlog-do-db = <数据库名称2>
binlog-do-db = <数据库名称3>
systemctl restart mysql.service
安装JDK
# sudo apt-get install -y openjdk-8-jdk
...
# java -version
openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-8u342-b07-0ubuntu1~18.04-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)
安装Kafka
安装Maxwell
https://maxwells-daemon.io/changelog/
下载需要的版本
解压
root@/opt# tar -zxvf maxwell-1.29.2.tar.gz
初始化Maxwell
创建mysql账户与配置账户权限
# mysql -uroot -p
##### 创建数据库
mysql> CREATE DATABASE maxwell;
##### 密码强度修改可选
mysql> set global validata_password_length=4;
mysql> set global validata_password_policy=0;
##### 创建数据库账户
mysql> GRANT ALL on maxwell.* TO 'maxwell'@'%' IDENTIFIED BY 'maxwell';
##### 分配数据库权限
mysql> GRANT SELECT , REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO maxwell@'%' ;
##### 刷新权限
mysql> FLUSH PRIVILEGES;
##### 查看账户和权限配置
mysql> use mysql;
Database changed
mysql> select Host,User,Select_priv,Repl_slave_priv,Repl_client_priv from user where User like "maxwell";
+------+---------+-------------+-----------------+------------------+
| Host | User | Select_priv | Repl_slave_priv | Repl_client_priv |
+------+---------+-------------+-----------------+------------------+
| % | maxwell | Y | Y | Y |
+------+---------+-------------+-----------------+------------------+
1 row in set (0.00 sec
修改maxwell配置文件
安装目录中,拷贝配置文件config.properties.example,命名为config.properties
修改config.properties
用于测试,临时将,kafka修改为stdout
数据库用户配置为创建的用户
log_level=info
#producer=kafka
producer=stdout
kafka.bootstrap.servers=localhost:9092
# mysql login info
host=localhost
user=maxwell
password=maxwell
启动
./bin/maxwell --config ./config.properties
第一次启动会初始化数据
07:41:09,950 INFO SchemaStoreSchema - Creating maxwell database