Maxwell学习笔记

1 概述

  • Maxwell 是由美国 Zendesk 开源,用 Java 编写的 MySQL 实时抓取软件。 实时读取MySQL 二进制日志 Binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台的应用程序。

    官网地址:http://maxwells-daemon.io/
    文档查看地址:http://maxwells-daemon.io/quickstart/

  • Maxwell的原理:了解Maxwell的原理,需要了解Mysql的主从复制过程。

    1. mysql的主从复制过程:Master 主库将改变记录,写到二进制日志(binary log)中,Slave 从库向 mysql master 发送 dump 协议,将 master 主库的 binary log events (binlog)拷贝到它的中继日志(relay log);Slave 从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库。

    2. MySQL 的二进制日志(binlog)可以说 MySQL 最重要的日志了,它记录了所有的 DDL 和 DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL 的二进制日志是事务安全型的。

      一般来说开启二进制日志大概会有 1%的性能损耗。二进制有两个最重要的使用场景: 其一:MySQL Replication 在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 来达到 master-slave 数据一致的目的。其二:自然就是数据恢复了,通过使用 mysqlbinlog 工具来使恢复数据。二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的 DDL 和 DML(除了数据查询语句)语句事件。

    3. mysql binlog 的格式有三种,分别是 statement,row,mixed。要使用maxwell做监控分析,使用row模式最合适,因为statement模式记录的是sql语句,可能导致数据的不一致;而mixed模式又记录sql语句又记录实际数据,在进行重播的时候需要进行判断,会导致性能下降。
      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

    4. maxwell的原理:把自己伪装成 MySQL 的一个 slave,然后以 slave的身份假装从 MySQL(master)复制数据。

  • maxwell的输出数据格式:其中xid是事务id,ts是时间戳。
    在这里插入图片描述

2 Maxwell使用

2.1 Maxwell安装

  1. 安装kafka、mysql

  2. 解压maxwell压缩包

  3. 修改 mysql 的配置文件,开启 MySQL Binlog 设置

    atguigu@hadoop102 software]$ sudo vim /etc/my.cnf
    
    1. 在[mysqld]模块下添加一下内容
    [mysqld]
    server_id=1
    log-bin=mysql-bin
    binlog_format=row
    #binlog-do-db=test_maxwell # 可以用于指定启用binlog的数据库
    
    2. 并重启 Mysql 服务
    [atguigu@hadoop102 software]$ sudo systemctl restart mysqld
    
    3. 登录 mysql 并查看是否修改完成
    [atguigu@hadoop102 ~]$ mysql -uroot -p123456
    mysql> show variables like '%binlog%';
    
    4. 查看下列属性
    binlog_format | ROW
    
    5. 进入/var/lib/mysql 目录,查看 MySQL 生成的 binlog 文件。注:MySQL 生成的 binlog 文件初始大小一定是 154 字节,然后前缀是 log-bin 参数配置的,后缀是默认从.000001,然后依次递增。除了 binlog 文件文件以外,MySQL 还会额外生产一个.index 索引文件用来记录当前使用的 binlog 文件。
    [atguigu@hadoop102 ~]$ cd /var/lib/mysql
    [atguigu@hadoop102 mysql]$ sudo ls -l
    总用量 188500
    -rw-r-----. 1 mysql mysql 154 1117 16:30 mysql-bin.000001
    -rw-r-----. 1 mysql mysql 19 1117 16:30 mysql-bin.index
    
  4. 在 MySQL 中建立一个 maxwell 库用于存储 Maxwell 的元数据

    # 创建数据库maxwell
    mysql> CREATE DATABASE maxwell;
    # 设置 mysql 用户密码安全级别,这一步可以省略,但是在设置账号密码的时候密码就不能太简单
    mysql> set global validate_password_length=4;
    mysql> set global validate_password_policy=0;
    # 分配一个账号maxwell可以操作该数据库,%表示maxwell用户可以在任何节点上访问maxwell数据库
    mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%' IDENTIFIED BY'123456';
    # 分配maxwell账号对所有数据库的数据表具有主从复制的权限
    mysql> GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell@'%';
    # 刷新 mysql 表权限
    mysql> flush privileges;
    
  5. 修改maxwell配置文件名称

    cp config.properties.example config.properties
    
  6. 修改maxwell配置文件中的配置(这里以配置数据发送到kafka为例)

    # 配置maxwell数据发送的目的地,可选的配置有stdout|file|kafka|kinesis|pubsub|sqs|rabbitmq|redis
    producer=kafka
    # 配置目标kafka集群地址
    kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092
    # 目标kafka topic,可静态配置,例如maxwell,也可以动态配置,例如%{database}_%{table},动态配置的话会为每一个数据库表创建一个kafka topic
    kafka_topic=maxwell
    
    # Mysql相关配置
    host=hadoop102
    user=maxwell
    password=maxwell
    jdbc_options=useSSL=false&serverTimezone=Asia/Shanghai
    

2.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 -9
    
  • maxwell启停脚本

    #!/bin/bash
    
    MAXWELL_HOME=/opt/module/maxwell
    
    status_maxwell(){
    	result=`ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l`
    }
    
    start_maxwell(){
    	status_maxwell
    	if [[ $? -lt 1]]; then
    		echo "启动Maxwell"
    		$MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --daemon
    	else
    		echo "Maxwell正在运行"
    	fi
    }
    
    stop_maxwell(){
    	status_maxwell
    	if [[ $? -gt 0 ]]; then
    		echo "停上Maxwell"
    		ps -ef | grep maxwell | grep -v grep maxwell | awk '{print $2}' | xargs kill -9
    	else
    		echo "Maxwell未在运行"
    	fi
    }
    
    case $1 in
    	start )
    		start_maxwell
    	;;
    	stop )
    		stop_maxwell
    	;;
    	restart )	
    		stop_maxwell
    		start_maxwell
    	;;
    esac
    
  • maxwell的数据全量同步操作:可以把指定数据库的指定数据表的数据全部取出并输出到指定位置,注意输出的首条数据和最后一条数据是空数据,仅作为开始和结束的标志;每条数据的时间戳是启动maxwell-bootstrap的时间。

    bin/maxwell-bootstrap --database gmall --table user_info config.properties
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/219831.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多线程--11--ConcurrentHashMap

ConcurrentHashMap与HashMap等的区别 HashMap线程不安全 我们知道HashMap是线程不安全的,在多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 ConcurrentHashMap 主…

UVM实现component之间transaction级别的通信

my_model是从i_agt中得到my_transaction,并把 my_transaction传递给my_scoreboard。在UVM中,通常使用TLM(Transaction Level Modeling)实现component之间transaction级别 的通信。 在UVM的transaction级别的通信 中,数…

【已验证】SqlBulkCopy 执行批量插入的时候报超时问题-解决办法

把datatable里面的数据插入到数据库,但是数据量大的情况下批量插入会提示超时,所以把datatable的数据分批写入数据库的 using (SqlConnection connection new SqlConnection(ConnectionString)){connection.Open();int pageSize 100000;//SqlBulkCopy大…

Linux各目录结构说明

文章目录 目录说明源码放哪里?拓展:Linux里面安装软件是装在home目录还是opt目录还是/usr/local好? bin boot dev etc home lib lib64 lostfound media mnt opt proc root run sbin srv sys tmp usr var 目录说明 bin 存放二进制可执行文件&…

C语言每日一题(46)整数转罗马数字

力扣网12 整数转罗马数字 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D …

手机如何设置防骚扰电话?

很多人都曾接到过烦人的推销电话,这些电话不仅让人感到烦恼,而且有时候还会接二连三地打来,让人不胜其烦。我们的手机号码似乎已经被泄露,很难避免这些骚扰。 有时,我们因无法忍受骚扰电话而选择立即将其拉黑&#xff…

ROW_NUMBER()函数——(分组后取每组最新的两条数据)

ROW_NUMBER() 功能:简单的说row_number()从1开始,为每一条分组记录返回一个数字。 用法一: ROW_NUMBER() OVER (ORDER BY col DESC) 说明:先把col列降序,再为降序后的每条col记录返回一个序号 用法二&#xf…

Linux系统---图书管理中的同步问题

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、问题描述 (1)图书馆阅览室最多能够容纳N(N5)名学生,若有更多学生想…

玩转大数据7:数据湖与数据仓库的比较与选择

1. 引言 在当今数字化的世界中,数据被视为一种宝贵的资源,而数据湖和数据仓库则是两种重要的数据处理工具。本文将详细介绍这两种工具的概念、作用以及它们之间的区别和联系。 1.1. 数据湖的概念和作用 数据湖是一个集中式存储和处理大量数据的平台&a…

【FreeRTOS】消息队列——简介、常用API函数、注意事项、项目实现

在嵌入式系统开发中,任务间的通信是非常常见的需求。FreeRTOS提供了多种任务间通信的机制,其中之一就是消息队列。消息队列是一种非常灵活和高效的方式,用于在不同的任务之间传递数据。通过消息队列,任务可以异步地发送和接收消息…

优化您的Mac体验——System Dashboard Pro for Mac(系统仪表板)

作为Mac用户,我们都希望能够拥有一个高效、流畅的电脑体验。然而,在长时间使用后,我们的Mac可能会变得越来越慢,导致我们的工作效率下降。这时候,System Dashboard Pro for Mac(系统仪表板)就可以派上用场了。它是一款…

vivado时序方法检查2

TIMING-4 &#xff1a; 时钟树上的基准时钟重新定义无效 时钟树上的时钟重新定义无效。基准时钟 <clock_name> 是在时钟 <clock_name> 下游定义的 &#xff0c; 并覆盖其插入延迟和/ 或波形定义。 描述 基准时钟必须在时钟树的源时钟上定义。例如 &#xff0…

mongdb配置ssl

mongodb5.0.9 centos7.6 x86 1、正常启动mongod -f mongodb.conf 【前言】 ssl配置流程步骤&#xff0c;按照以下顺序处理即可。 1.生成证书&#xff0c;根证书&#xff0c;服务端证书&#xff0c;客户端证书 2.配置服务端ssl配置&#xff0c;测试she…

Arrays类 - Java

Arrays类 Arrays类1、常用方法案例 Arrays类 1、常用方法 Arrays 里面包含了一系列静态方法&#xff0c;用于管理或操作数组(比如排序和搜索)。 toString 返回数组的字符串形式 Arrays.toString(arr)【案例1】 sort 排序(自然排序和定制排序) Integer arr[]{1, -1, 7, 0, 8…

云服务器部署过程(从零开始)

首先介绍如何在 Linux 上复制粘贴 CtrlInsert&#xff0c;或者CtrlshiftC复制文本&#xff0c;使用ShiftInsert或CtrlshiftV 在终端中粘贴文本。 搭建java部署环境 要搭建java部署环境&#xff0c;那么首先就需要在Linux上安装jdk&#xff0c;MySQL等必需工具&#xff0c;接…

01_阿里云_Xshell连接服务器

PC使用Xshell连接阿里云服务器 问题引出 之前使用Xshell连接阿里云服务器连接的好好的&#xff0c;今天准备上去服务器学习Linux发现连不上了&#xff0c;后来发现是防火墙的问题&#xff0c;还有阿里云的安全组也需要设置 解决方案 方法一&#xff1a;&#xff08;简单粗暴…

CGAL的周期三角剖分(相关信息较少)

CGAL的周期二维三角剖分类旨在表示二维平面上的一组点的三角剖分。该三角剖分形成其计算空间的分区。它是一个单纯复体&#xff0c;即它包含任何k-单纯形的所有关联j-单纯形&#xff08;j<k&#xff09;&#xff0c;并且两个k-单纯形要么不重叠&#xff0c;要么共享一个公共…

博客访问量到达2万了!

博客访问量到达2万了&#xff01;这也发生的太快了吧&#xff0c;前两天才1万7千访问量&#xff0c;用了平台送的1500的流量券&#xff0c;粉丝从1个&#xff08;N年前的&#xff09;&#xff0c;蹭蹭的往上涨&#xff0c;这也太“假”了吧。关键我也是个菜鸟自学者&#xff0c…

杂散表的阅读

杂散表得阅读 —— 以Marki公司得手册为例 混频杂散&#xff08;Mixing Spurs&#xff09;是指信号经过混频器时&#xff0c;不仅会与本振混频&#xff0c;还会与本振的高次谐波混频&#xff08;对于第二章说的方波本振&#xff0c;信号只与本振的奇次谐波混频因为方波只含有奇…

写论文焦虑?No,免费AI写作大师来帮你

先来看1分钟的视频&#xff0c;对于要写论文的你来说&#xff0c;绝对有所值&#xff01; 还在为写论文焦虑&#xff1f;免费AI写作大师来帮你三步搞定 第一步&#xff1a;输入关键信息 第二步&#xff1a;生成大纲 稍等片刻后&#xff0c;专业大纲生成&#xff08;由于举例&am…