官网地址:

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. lazyload图片懒加载

    安装 npm i -S vue-lazyload 在src/main.js文件中添加如下内容 import VueLazyload from 'vue-lazyload' Vue.use(VueLaz ...

  2. HP惠普战66电源黄灯闪烁无法充电

    HP惠普战66电源黄灯闪烁无法充电 TYPE-C PD 无法充电. 解决办法:关机状态下,拔除外部设备,长按电源键30秒以释放主板静电,再插电源线可以开机.

  3. CentOS 7- 配置阿里镜像源

    1.备份CentOS 7系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo命令: mv /etc/yum.repos.d/CentOS-Base.repo /e ...

  4. 项目管理--PMBOK 读书笔记(5)【项目范围管理】

      知识点: 1.范围管理计划与需求管理计划:       需求大于范围 2.项目管理的成果线: 3.收集需求的跟踪:       需求跟踪矩阵(RTM):溯源.商业价值.监控过程输出 4.项目范围说 ...

  5. iOS登陆界面切换到注册界面并返回的UI设计(简易向)

    功能实现 从登陆界面进入注册界面 从注册界面返回登陆界面 功能实现思路 在网上搜了搜发现各位大神用的是navigation,但个人感觉没(zhen)大(ting)必(bu)要(dong).所以在这里提 ...

  6. ansible(1)---师傅领进门

    背景 在企业里,运维需要配合开发进行产品上架,说白了就是把写好的代码上服务器.那么,就会出现这样的问题:需要运维人员配置好系统,配置好环境,配置好网络,配置好程序,配置好所有所有的依赖环境.     ...

  7. C# Linq.FirstOrDefault、Linq.Where、Linq.AsParallel、List.Exists、List.Find、Dictionar.TryGetValue、HashSet.Contains 性能的比较

    今天我们来比较一下集合检索方法性能更优问题,测试代码 public class Entity { public int Id { get; set; } public int No { get; se ...

  8. java 编程思想--个人总结

    从应用开始思考----思考解题思路--将思路分解成一步一步的步骤-----根据每一步的步骤思考如何用代码实现-- -- 不要心急,可以一块一块来完成-- 最后再思考如何用代码实现每两块之间的连接--- ...

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

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

  10. The Beauty of Physics

    绪言/1 学物理的人用不着对物理方程的意义操心,只要关心物理方程的美就够了. --狄拉克 此曲只应天上有--开普勒的和谐宇宙/11 天体的运动只不过是某种永恒的复调音乐而已,要用才智而不是耳朵来倾听. ...