官网地址:

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. Java中GUI

    目录 1.Java GUI 概述 2.容器 2.1 窗口 2.2 弹窗和对话框 对话框 自定义弹窗 2.3 面板 普通面板 滚动面板 分隔面板 选项卡面板 3.布局 3.1.流式布局 3.2.网格布局 ...

  2. python中使用time.pref_counter()精确计时

    time.pref_counter()返回一个CPU级别的精确时间值,以秒为单位. 它通常用于测量某段程序的运行时间,因此取两次调用pref_counter()的差值才有意义. import time ...

  3. react 数组列表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 程序员面试金典-面试题 16.25. LRU缓存

    题目: 设计和构建一个"最近最少使用"缓存,该缓存会删除最近最少使用的项目.缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量.当缓存被填满时,它应该 ...

  5. 夜莺项目发布 v6.5.0 版本,暗黑菜单来了

    大家好,夜莺项目发布 v6.5.0 版本,启用新 logo,菜单支持换肤,支持了暗黑版本的菜单,下一步会支持全站暗黑主题,敬请期待,下面是新 logo. 暗黑菜单 页面右上角点击用户名,在下拉框里会有 ...

  6. [TinyRenderer] Chapter1 p3 Line

    (注:本小节不是对划线算法事无巨细的证明,如果你需要更加系统的学习,请跳转至文末的参考部分) 如果你是一名曾经学习过图形学基础的学生,那么你一定对画线算法稔熟于心,中点划线算法,Bresenham算法 ...

  7. golang如何使用指针灵活操作内存?unsafe包原理解析

    Hi 你好,我是k哥.一个大厂工作6年,还在继续搬砖的后端程序员. 我们都知道,C/C++提供了强大的万能指针void*,任何类型的指针都可以和万能指针相互转换.并且指针还可以进行加减等算数操作.那么 ...

  8. 在高通Fastmmi模式中增强交互方式

    在高通Fastmmi模式中增强交互方式 背景 由于之前工厂抱怨 FCT模式不好用. 之前的FCT测试是这样子的:PCBA上夹具,连接USB. 同时,使用上位机程序(ATE)发送指令,人工判断结果以后, ...

  9. Freertos学习:00-介绍

    --- title: rtos-freertos-000-介绍 EntryName: rtos-freertos-00-about date: 2020-06-09 23:21:44 categori ...

  10. wireshark常用过滤指令

    前言 wireshark是一款高效且免费的网络封包分析软件,现就自己使用过的过滤表达式进行记录,随时更新. 正文 与.或.非指令 与:and && 示例:tcp and ip.src ...