Maxwell 使用小记

一 Maxwell简介

Maxwell 能实时读取 Mysql 的二进制日志 binlog,并生成 JSon 格式消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台的应用程序。它的常见应用场景有ETL、维护缓存、收集表级别的dml指标、增量到搜索引擎、数据分区迁移、切库binlog回滚方案等。

链接Maxwell官网

链接 Github 地址

链接对 mysql binlog 的介绍

链接对mysql binlog的介绍1

链接扩展使用 Mysql+Maxwell+Kafka+ES+Kibana实现MySQL的日志分析

Maxwell主要提供了下列功能:

支持 SELECT * FROM table 的方式进行全量数据初始化
支持在主库发生failover后,自动恢复binlog位置(GTID)
可以对数据进行分区,解决数据倾斜问题,发送到kafka的数据支持database、table、column等级别的数据分区
工作方式是伪装为Slave,接收binlog events,然后根据schemas信息拼装,可以接受 ddl、xid、row 等各种event

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPVjdjkP-1579164365777)(./images/maxwell_1.png)]在这里插入图片描述

二 安装 Maxwell
1 MySQL 启用 binlog

mysql 卸载

#启动mysql 脚本启动
service mysqld start
/etc/inint.d/mysql start

#查询 MySQL 安装包
rpm -qa|grep -i mysql
#卸载 卸载报错添加 --nodeps 参数
rpm -e mysql-server-5.1.73-5.el6_6.x86_64  --nodeps
#查找 mysql目录 my.cnf的配置目录 /etc/my.cnf
find / -name mysql

链接mysql安装

启用 binlog

#是否启用 binlog 已启用的 value 值为 ON
show variables like 'log_bin';

show variables like '%log_bin%';
vim /etc/my.cnf
#修改文件
server-id=1 (标识,唯一)
log-bin=master (开启binlog)
binlog_format=row (binlog有三种格式:Statement、row、mixed。要解析成json格式选择row)

#重启mysql服务
service mysqld restart

在这里插入图片描述
50

2 安装 Maxwell
#解压
tar -zxvf maxwell.tar.gz -C /software/

使用maxwell需要指定一个用户

#查看用户权限
show grants for 'test3'@'%';
#该用户至少对一个 database 权限
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `tets_1`.* TO 'test3'@'%'
#该用户对其他database拥有 select 权限
GRANT SELECT ON `test_2`.* TO 'test3'@'%' 
#收回用户权限
revoke ALL PRIVILEGES ON test_1.* TO 'test2'@'%'

create databases test_1;
#测试Maxwell 将结果输出到命令行
./maxwell --user='test' --password='123456' --host='192.168.142.100' --schema_database=test_1 --producer=stdout

在这里插入图片描述
50

maxwell 对本 db 只能识别 create,insert 没有输出

Maxwell参数详细

Maxwell 配置参数

#启动kafka
bin/kafka-server-start.sh config/server.properties
#查看 kafka topic 
./kafka-topics.sh --zookeeper master:2181,node1:2181,node2:2181 --list
#创建 kafka topic . replication-factor:副本数 2,partitions 分区数
./kafka-topics.sh --create --topic test_maxwell --replication-factor 2 --partitions 3 --zookeeper master:2181,node1:2181,node2:2181
#启动 maxwell 默认kafka版本为 kafka_version=0.11.0.1
./maxwell --user='root' --password='root' --host='192.168.142.112' --producer=kafka --kafka.bootstrap.servers=master:9092,node1:9092,node2:9092 --kafka_topic=test_maxwell --kafka_version=0.8.2.2
#消费 kafka 数据 create 不会发送信息 maxwell,本db的信息
./kafka-console-consumer.sh --zookeeper master:2181,node1:2181,node2:2181 --topic test_maxwell --from-beginning

kafka consumer
在这里插入图片描述
50

maxwell 启动
在这里插入图片描述
50

mysql

50 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200116164744723.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNDk2NDYx,size_16,color_FFFFFF,t_70)
3 mysql 配置选项

Maxwell 根据用途将 MySQL 划分为3种角色:

  • host:主机,建maxwell库表,存储捕获到的schema等信息(不需要新建maxwell用户,满足权限即可)
    • ​ 有六张表,bootstrap用于数据初始化,schemas记录所有的binlog文件信息,databases记录了所有的数据库信息,tables记录了所有的表信息,columns记录了所有的字段信息,positions记录了读取binlog的位移信息,heartbeats记录了心跳信息
  • replication_host:复制主机,Event监听,读取该主机binlog
    • hostreplication_host分开,可以避免 replication_user 往生产库里写数据
  • schema_host:schema主机,捕获表结构schema的主机
    • binlog里面没有字段信息,所以maxwell需要从数据库查出schema,存起来
    • schema_host一般用不到,但在binlog-proxy场景下就很实用。比如要将已经离线的binlog通过maxwell生成json流,于是自建一个mysql server里面没有结构,只用于发送binlog,此时表机构就可以制动从 schema_host 获取

通常 三个主机都是同一个,schema_host 只在有 replication_host 的时候使用。

发布了8 篇原创文章 · 获赞 1 · 访问量 628
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览