做网站需要提供的资料,网页模板免费下载,中铁三局招聘要求,盘多多搜索引擎入口1 概述 Maxwell 是由美国 Zendesk 开源#xff0c;用 Java 编写的 MySQL 实时抓取软件。 实时读取MySQL 二进制日志 Binlog#xff0c;并生成 JSON 格式的消息#xff0c;作为生产者发送给 Kafka#xff0c;Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台…1 概述 Maxwell 是由美国 Zendesk 开源用 Java 编写的 MySQL 实时抓取软件。 实时读取MySQL 二进制日志 Binlog并生成 JSON 格式的消息作为生产者发送给 KafkaKinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台的应用程序。 官网地址http://maxwells-daemon.io/ 文档查看地址http://maxwells-daemon.io/quickstart/ Maxwell的原理了解Maxwell的原理需要了解Mysql的主从复制过程。 mysql的主从复制过程Master 主库将改变记录写到二进制日志(binary log)中Slave 从库向 mysql master 发送 dump 协议将 master 主库的 binary log events binlog拷贝到它的中继日志(relay log)Slave 从库读取并重做中继日志中的事件将改变的数据同步到自己的数据库。 MySQL 的二进制日志binlog可以说 MySQL 最重要的日志了它记录了所有的 DDL 和 DML(除了数据查询语句)语句以事件形式记录还包含语句所执行的消耗的时间MySQL 的二进制日志是事务安全型的。 一般来说开启二进制日志大概会有 1%的性能损耗。二进制有两个最重要的使用场景: 其一MySQL Replication 在 Master 端开启 binlogMaster 把它的二进制日志传递给 slaves 来达到 master-slave 数据一致的目的。其二自然就是数据恢复了通过使用 mysqlbinlog 工具来使恢复数据。二进制日志包括两类文件二进制日志索引文件文件名后缀为.index用于记录所有的二进制文件二进制日志文件文件名后缀为.00000*记录数据库所有的 DDL 和 DML(除了数据查询语句)语句事件。 mysql binlog 的格式有三种分别是 statementrowmixed。要使用maxwell做监控分析使用row模式最合适因为statement模式记录的是sql语句可能导致数据的不一致而mixed模式又记录sql语句又记录实际数据在进行重播的时候需要进行判断会导致性能下降。 maxwell的原理把自己伪装成 MySQL 的一个 slave然后以 slave的身份假装从 MySQL(master)复制数据。 maxwell的输出数据格式其中xid是事务idts是时间戳。
2 Maxwell使用
2.1 Maxwell安装 安装kafka、mysql 解压maxwell压缩包 修改 mysql 的配置文件开启 MySQL Binlog 设置 atguiguhadoop102 software]$ sudo vim /etc/my.cnf1. 在[mysqld]模块下添加一下内容
[mysqld]
server_id1
log-binmysql-bin
binlog_formatrow
#binlog-do-dbtest_maxwell # 可以用于指定启用binlog的数据库2. 并重启 Mysql 服务
[atguiguhadoop102 software]$ sudo systemctl restart mysqld3. 登录 mysql 并查看是否修改完成
[atguiguhadoop102 ~]$ mysql -uroot -p123456
mysql show variables like %binlog%;4. 查看下列属性
binlog_format | ROW5. 进入/var/lib/mysql 目录查看 MySQL 生成的 binlog 文件。注MySQL 生成的 binlog 文件初始大小一定是 154 字节然后前缀是 log-bin 参数配置的后缀是默认从.000001然后依次递增。除了 binlog 文件文件以外MySQL 还会额外生产一个.index 索引文件用来记录当前使用的 binlog 文件。
[atguiguhadoop102 ~]$ cd /var/lib/mysql
[atguiguhadoop102 mysql]$ sudo ls -l
总用量 188500
-rw-r-----. 1 mysql mysql 154 11 月 17 16:30 mysql-bin.000001
-rw-r-----. 1 mysql mysql 19 11 月 17 16:30 mysql-bin.index在 MySQL 中建立一个 maxwell 库用于存储 Maxwell 的元数据 # 创建数据库maxwell
mysql CREATE DATABASE maxwell;
# 设置 mysql 用户密码安全级别这一步可以省略但是在设置账号密码的时候密码就不能太简单
mysql set global validate_password_length4;
mysql set global validate_password_policy0;
# 分配一个账号maxwell可以操作该数据库,%表示maxwell用户可以在任何节点上访问maxwell数据库
mysql GRANT ALL ON maxwell.* TO maxwell% IDENTIFIED BY123456;
# 分配maxwell账号对所有数据库的数据表具有主从复制的权限
mysql GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell%;
# 刷新 mysql 表权限
mysql flush privileges;修改maxwell配置文件名称 cp config.properties.example config.properties修改maxwell配置文件中的配置这里以配置数据发送到kafka为例 # 配置maxwell数据发送的目的地可选的配置有stdout|file|kafka|kinesis|pubsub|sqs|rabbitmq|redis
producerkafka
# 配置目标kafka集群地址
kafka.bootstrap.servershadoop102:9092,hadoop103:9092
# 目标kafka topic可静态配置例如maxwell也可以动态配置例如%{database}_%{table},动态配置的话会为每一个数据库表创建一个kafka topic
kafka_topicmaxwell# Mysql相关配置
hosthadoop102
usermaxwell
passwordmaxwell
jdbc_optionsuseSSLfalseserverTimezoneAsia/Shanghai2.2 Maxwell使用 由于前面配置maxwell的数据发送到kafka因此要先确保kafka集群为启动状态 启动maxwell的命令当mysql数据发生变化之后kafka中就会有相应的数据 bin/maxwell --config config.properties --daemon停止maxwell的命令 ps -ef | grep maxwell | grep -v grep maxwell | awk {print $2} | xargs kill -9maxwell启停脚本 #!/bin/bashMAXWELL_HOME/opt/module/maxwellstatus_maxwell(){resultps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l
}start_maxwell(){status_maxwellif [[ $? -lt 1]]; thenecho 启动Maxwell$MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --daemonelseecho Maxwell正在运行fi
}stop_maxwell(){status_maxwellif [[ $? -gt 0 ]]; thenecho 停上Maxwellps -ef | grep maxwell | grep -v grep maxwell | awk {print $2} | xargs kill -9elseecho Maxwell未在运行fi
}case $1 instart )start_maxwell;;stop )stop_maxwell;;restart ) stop_maxwellstart_maxwell;;
esacmaxwell的数据全量同步操作可以把指定数据库的指定数据表的数据全部取出并输出到指定位置注意输出的首条数据和最后一条数据是空数据仅作为开始和结束的标志每条数据的时间戳是启动maxwell-bootstrap的时间。 bin/maxwell-bootstrap --database gmall --table user_info config.properties