官网地址:

https://maxwells-daemon.io/

下载地址(版本发行):

https://github.com/zendesk/maxwell/releases

参考教程自尚硅谷视频:

https://www.bilibili.com/video/BV1JQ4y1e7CN?spm_id_from=333.999.0.0

什么是Maxwell?

Zendesk 开源,用 Java 编写的 MySQL 实时抓取软件

功能:

实时监听MySQL的二进制日志文件binlog,生成JSON格式的消息
作为一个消息提供者发送给消息中间件,或者其他平台的应用程序

原理:

利用MySQL自身的主从配置特性,将自身伪装成从库对MySQL当成主库进行监听
记录主库的非查询操作

版本注意:

1、版本1.30开始全面放弃使用JDK8 改用JDK11版本
2、使用JDK8,最高版本 maxwell-1.29.2.tar.gz

一、安装Maxwell:

Linux平台 Java运行环境

1、解压maxwell-1.29.2.tar.gz

tar -zxvf maxwell-1.29.2.tar.gz

2、(可选)复制解压出来的目录到/usr/local/中

cp -r maxwell-1.29.2 /usr/local/

二、配置MySQL:

1、创建Maxwell库(库名自定义)

CREATE DATABASE `maxwell` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';

2、分配从库账号

CREATE USER 'maxwell'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'maxwell'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3、开启Binlog日志

[mysqld]
# 开启binlog日志
log-bin=mysql-bin # (可选)设置binlog日志的格式,推荐row
binlog_format= statement|mixed|row

三、启动Maxwell

1、方式一,直接参数式启动

# 切换到maxwell目录
cd /usr/local/maxwell-1.29.2 # 启动maxwell
./bin/maxwell \
--user='maxwell' \
--password='123456' \
--host='192.168.2.225' \
--port='3308' \
--producer='stdout' \
--jdbc_options='useSSL=false&serverTimezone=Asia/Shanghai'

参数说明:

# 主库分配的从库账号
--user='maxwell' \ # 主库分配的从库账号密码
--password='123456' \ # 主库地址
--host='192.168.2.225' \ # 主库端口
--port='3308' \ # 消息生产模式,stdout控制台输出,kafka
--producer='stdout' \ # jdbc的时区参数
--jdbc_options='useSSL=false&serverTimezone=Asia/Shanghai'

2、加载配置文件启动

进入maxwell目录:

cd /usr/local/maxwell-1.29.2

备份配置文件:

cp config.properties.example config.properties

编辑关键参数

vim config.properties

参数项:

# mysql login info (MySQL账号信息)
host=192.168.2.225
user=maxwell
password=123456
port=3308 # 订阅信息(生产者模式:即输出的目标 stdout控制台, kafka kafka集群)
producer=stdout

3、启动命令:

cd /usr/local/maxwell-1.29.2/
./bin/maxwell --config ./config.properties --jdbc_options='useSSL=false&serverTimezone=Asia/Shanghai'

四、监听效果:

检查Maxwell是否能够监听?

在被监听的主库中执行非查询SQL

1、插入日志

INSERT INTO `test-db`.`day_sale` (`ID`, `PRODUCT`, `CHANNEL`, `AMOUNT`, `SALE_DATE`) VALUES (NULL, '苹果', '淘宝', 2497.0000, NOW());

终端日志:

[root@localhost maxwell-1.29.2]# ./bin/maxwell --config ./config.properties --jdbc_options='useSSL=false&serverTimezone=Asia/Shanghai'
Using kafka version: 1.0.0
13:31:50,295 INFO Maxwell - Starting Maxwell. maxMemory: 247332864 bufferMemoryUsage: 0.25
13:31:50,534 INFO Maxwell - Maxwell v1.29.2 is booting (StdoutProducer), starting at Position[BinlogPosition[mysql-bin.000005:61414], lastHeartbeat=1642483666136]
13:31:50,757 INFO MysqlSavedSchema - Restoring schema id 1 (last modified at Position[BinlogPosition[mysql-bin.000005:16191], lastHeartbeat=0])
13:31:50,931 INFO BinlogConnectorReplicator - Setting initial binlog pos to: mysql-bin.000005:61414
13:31:50,963 INFO BinaryLogClient - Connected to 192.168.2.225:3308 at mysql-bin.000005/61414 (sid:6379, cid:173)
13:31:50,963 INFO BinlogConnectorReplicator - Binlog connected.
{"database":"test-db","table":"day_sale","type":"insert","ts":1642484382,"xid":65636,"commit":true,"data":{"ID":163,"PRODUCT":"苹果","CHANNEL":"淘宝","AMOUNT":2497.0000,"SALE_DATE":"2022-01-18 13:39:42"}}

可以看到Maxwell将会返回一条信息,将其格式化处理:

{
"database": "test-db", -- 库名
"table": "day_sale", -- 表名
"type": "insert", -- 执行类型:插入
"ts": 1642484382, -- 操作时间
"xid": 65636, -- 操作ID?
"commit": true, -- 提交状态
"data": { -- 数据信息: {字段: 值}
"ID": 163,
"PRODUCT": "苹果",
"CHANNEL": "淘宝",
"AMOUNT": 2497,
"SALE_DATE": "2022-01-18 13:39:42"
}
}

如果是多个数据,maxwell还是根据记录一条条打印 (说明maxwell以一条记录为标准单位进行输出)

{"database":"test-db","table":"day_sale","type":"insert","ts":1642484928,"xid":67070,"xoffset":0,"data":{"ID":164,"PRODUCT":"产品A","CHANNEL":"拼多多","AMOUNT":2497.0000,"SALE_DATE":"2022-01-18 13:48:48"}}
{"database":"test-db","table":"day_sale","type":"insert","ts":1642484928,"xid":67070,"xoffset":1,"data":{"ID":165,"PRODUCT":"产品B","CHANNEL":"京东","AMOUNT":2497.0000,"SALE_DATE":"2022-01-18 13:48:48"}}
{"database":"test-db","table":"day_sale","type":"insert","ts":1642484928,"xid":67070,"commit":true,"data":{"ID":166,"PRODUCT":"产品C","CHANNEL":"淘宝","AMOUNT":2497.0000,"SALE_DATE":"2022-01-18 13:48:48"}}

2、修改记录:

UPDATE `test-db`.`day_sale` SET `CHANNEL` = '拼多多2' WHERE `ID` = 164

格式化信息:

{
"database": "test-db",
"table": "day_sale",
"type": "update", -- 操作类型:修改
"ts": 1642485002,
"xid": 67425,
"commit": true,
"data": {
"ID": 164,
"PRODUCT": "产品A",
"CHANNEL": "拼多多2",
"AMOUNT": 2497,
"SALE_DATE": "2022-01-18 13:48:48"
},
"old": { -- maxwell会存储原纪录变更的信息
"CHANNEL": "拼多多"
}
}

3、删除记录

DELETE FROM `test-db`.`day_sale` WHERE `ID` = 165

格式化信息:

{
"database": "test-db",
"table": "day_sale",
"type": "delete", -- 操作类型,删除
"ts": 1642485422,
"xid": 68499,
"commit": true,
"data": { -- maxwell 无论新增,删除,修改,都会对数据进行完整保留
"ID": 165,
"PRODUCT": "产品B",
"CHANNEL": "京东",
"AMOUNT": 2497,
"SALE_DATE": "2022-01-18 13:48:48"
}
}

上述的操作,是终端阻塞的,要保持后台执行maxwell 就需要将消息输出到其他中间件中去,如kafka

# 订阅信息(生产者模式:即输出的目标 stdout控制台, kafka kafka集群)
producer=kafka

【Maxwell】01 安装及入门的更多相关文章

  1. Tensoflw.js - 01 - 安装与入门(中文注释)

    Tensoflw.js - 01 - 安装与入门(中文注释) 参考 W3Cschool 文档:https://www.w3cschool.cn/tensorflowjs/ 本文主要翻译一些英文注释,添 ...

  2. Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)

    TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...

  3. Apache Hadoop2.x 边安装边入门

    完整PDF版本:<Apache Hadoop2.x边安装边入门> 目录 第一部分:Linux环境安装 第一步.配置Vmware NAT网络 一. Vmware网络模式介绍 二. NAT模式 ...

  4. bower安装使用入门详情

    bower安装使用入门详情   bower自定义安装:安装bower需要先安装node,npm,git全局安装bower,命令:npm install -g bower进入项目目录下,新建文件1.tx ...

  5. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  6. 跟我一起Django - 01 安装和初始化

    跟我一起Django - 01 安装和初始化 python环境 C:\Python27\Lib\site-packages>python --versionPython 2.7.5 安装setu ...

  7. 虚拟光驱 DAEMON Tools Lite ——安装与入门

    DAEMON Tools Lite 是什么?它不仅仅是虚拟光驱.是的,你可以使用它制作.加载光盘映像,但是 DAEMON Tools 产品那么多,Lite版与其他版本究竟有什么不同呢?或者说,是什么让 ...

  8. Python 3.6.3 官网 下载 安装 测试 入门教程 (windows)

    1. 官网下载 Python 3.6.3 访问 Python 官网 https://www.python.org/ 点击 Downloads => Python 3.6.3 下载 Python ...

  9. 八:Lombok 安装、入门 - 消除冗长的 java 代码

    Lombok 安装.入门 - 消除冗长的 java 代码 前言:    逛开源社区的时候无意发现的,用了一段时间,觉得还可以,特此推荐一下.    lombok 提供了简单的注解的形式来帮助我们简化消 ...

  10. robotframework安装及入门指南

    将很久之前自己在本地记录的一些笔记发表到随笔来,希望能够帮到一些童鞋~ robotframework安装及入门指南 本文主要介绍robotframework在windows环境的安装过程! 安装步骤 ...

随机推荐

  1. 小米 红米 Redmi MIUI 5G开关

    小米 红米 Redmi MIUI 5G开关 1.打开手机拨号界面输入 *#*#54638#*#* 之后拨号界面底部会显示display 5G network menu (显示5G网络菜单) 注意:先是 ...

  2. mongodb基于角色的访问控制

    https://www.mongodb.com/docs/v4.4/tutorial/enable-authentication/ https://www.mongodb.com/docs/manua ...

  3. Nuxt.js 深入浅出:目录结构与文件组织详解

    title: Nuxt.js 深入浅出:目录结构与文件组织详解 date: 2024/6/18 updated: 2024/6/18 author: cmdragon excerpt: 摘要:本文详述 ...

  4. apache开源 国内镜像地址

    https://mirrors.tuna.tsinghua.edu.cn/apache/kylin/apache-kylin-3.1.1/

  5. Maven配置阿里云镜像和本地仓库路径

    配置阿里云镜像仓库 在settings > mirrors标签下添加以下内容 <!-- Aliyun Mirror --> <mirror> <id>alim ...

  6. .NET 高效灵活的API速率限制解决方案

    前言 FireflySoft.RateLimit是基于.NET Core和.NET Standard构建,支持多种速率限制算法和策略,包括固定窗口.滑动窗口.漏桶.令牌桶等.通过简单的配置和集成,开发 ...

  7. 【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(2)

    1.问题描述: 应用内支付IAP Kit和Payment Kit的区别以及适用场景? 解决方案: IAP Kit是四方支付,仅支持在线虚拟商品,如会员,游戏钻石等,双框架支持全球,目前单框架暂时只支持 ...

  8. P7687 题解

    考场上数组开大了直接 MLE 了,气. 考虑把 A,B 两种服务分开算,一个边双连通分量内的点如过有一个有服务,那么整个联通分量就都有服务. 然后按边双联通分量缩点后原图变成树,一条边是关键路线当且仅 ...

  9. aach64架构 ubuntu20 桌面版 编译安装ffmpeg难点总结

    [编译安装x264] 这一步基本上没有难点 git clone https://gitee.com/mirrors/x264.git ./configure --enable-shared --ena ...

  10. mybatis-plus的insert方法出现-id' doesn't have a default value问题

    出现这个问题,只需把对应的字段注解设置为,例如: @TableId(value = "id",type = IdType.INPUT) private String id; 即可解 ...