• maxwell学习笔记


    maxwell学习笔记

    Maxwell定义

    Maxwell是由美国Zendesk开源,用Java编写的MySql实时抓取软件。实时抓取MySQL二进制日志Binlog,并生成JSON格式的消息,作为生产者发送给KKafka,Kinesis,RabbitMQ,Redis,Google Cloud Pub/Sub,文件或其他平台的应用程序。
    官网地址:http://maxwells-daemon.io/
    目前最新的是1.38.0版本(2022年10月6日)
    但是1.29.2 是最后一个支持JDK8的版本,使用JDK8的小伙伴请加下这个版本。

    Maxwell工作原理

    MySQL主从复制

    Master主库,发生改变时,写进二进制日志Binlog(binary log)
    Slave从库,通过IO线程,将Binlog读取保存到Relaylog,然后在自己的仓库中执行Relaylog,实现数据同步。

    Maxwell工作原理

    Maxwell伪装成Slave从库,从Master主库中获取binlog,

    MySQL的Binlog

    Binlog记录所有的DDL和DML语句,不记录数据查询语句。
    以事件形式记录,以及执行消耗事件,事务安全的。

    1. DDL(data defination language)数据库定义语言
    2. DML(data manipulation language)数据操作语言
    3. DCL(data control language)数据库控制语言
    4. DQL(data query language)数据查询语言
    
    • 1
    • 2
    • 3
    • 4

    作用:

    • master-slave数据同步
    • 数据恢复

    相关链接:
    https://dev.mysql.com/doc/refman/5.7/en/binary-log.html
    https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html

    MySQL开启Binlog

    linux系统配置文件默认位置:/etc/my.cnf

    快速定位配置文件
    # locate my.cnf 
    
    • 1
    • 2

    在[mysqld]区块中配置binlog配置

    快速定位[mysqld]区块
    root@/etc/mysql# grep -rn -F "[mysqld]"
    mysql.conf.d/mysqld.cnf:27:[mysqld]
    
    • 1
    • 2
    • 3

    相关配置:

    # binlog位置和名称
    log_bin                        = /var/log/mysql/mysql-bin.log
    # binlog日志文件大小
    max_binlog_size   = 100M
    # binlog格式
    # binlog_format = statement # 记录SQL语句(有可能数据不一致,比如语句中有当前时间) 数据量小,节省空间
    binlog_format = row # 记录行级别的数据改变,数据量大,占用空间,能保证一致性。
    binlog_format = mixed # 混合格式,不会导致不一致问题的,保存为SQL语句,会导致不一致性的,保存行数据,但是还有可能导致不一致性的可能。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Maxwell需要binlog_format配置成row格式

    Maxwell使用

    安装MySQL

    sudo apt-get install mysql-server mysql-client

    解注

    server-id               = 1
    log_bin                 = /var/log/mysql/mysql-bin.log
    
    • 1
    • 2

    加一行配置:

    binlog_format           = row
    
    • 1

    默认对所有数据库进行binlog日志
    可以指定对特定数据库进行binlog

    binlog-do-db            = <数据库名称1>
    binlog-do-db            = <数据库名称2>
    binlog-do-db            = <数据库名称3>
    
    • 1
    • 2
    • 3

    systemctl restart mysql.service

    安装JDK

    # sudo apt-get install -y openjdk-8-jdk
    ...
    # java -version
    openjdk version "1.8.0_342"
    OpenJDK Runtime Environment (build 1.8.0_342-8u342-b07-0ubuntu1~18.04-b07)
    OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    安装Kafka

    安装Maxwell

    https://maxwells-daemon.io/changelog/
    下载需要的版本

    解压
    root@/opt# tar -zxvf maxwell-1.29.2.tar.gz

    初始化Maxwell

    创建mysql账户与配置账户权限
    # mysql -uroot -p
    ##### 创建数据库
    mysql> CREATE DATABASE maxwell;
    ##### 密码强度修改可选
    mysql> set global validata_password_length=4;
    mysql> set global validata_password_policy=0;
    ##### 创建数据库账户
    mysql> GRANT ALL on maxwell.* TO 'maxwell'@'%'  IDENTIFIED BY 'maxwell';
    ##### 分配数据库权限
    mysql> GRANT SELECT , REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO maxwell@'%' ;
    ##### 刷新权限
    mysql> FLUSH PRIVILEGES;
    ##### 查看账户和权限配置
    mysql> use mysql;
    Database changed
    mysql> select Host,User,Select_priv,Repl_slave_priv,Repl_client_priv from user where User like "maxwell";
    +------+---------+-------------+-----------------+------------------+
    | Host | User    | Select_priv | Repl_slave_priv | Repl_client_priv |
    +------+---------+-------------+-----------------+------------------+
    | %    | maxwell | Y           | Y               | Y                |
    +------+---------+-------------+-----------------+------------------+
    1 row in set (0.00 sec
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    修改maxwell配置文件

    安装目录中,拷贝配置文件config.properties.example,命名为config.properties
    修改config.properties
    用于测试,临时将,kafka修改为stdout
    数据库用户配置为创建的用户

    log_level=info
    
    #producer=kafka
    producer=stdout
    kafka.bootstrap.servers=localhost:9092
    
    # mysql login info
    host=localhost
    user=maxwell
    password=maxwell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    启动

    ./bin/maxwell --config ./config.properties
    
    • 1

    第一次启动会初始化数据

    07:41:09,950 INFO  SchemaStoreSchema - Creating maxwell database
    
    • 1
  • 相关阅读:
    STM32中断和外部中断
    Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)
    java课程设计:基于SSM实现个人健康管理系统
    Docker挂载目录
    工业4G路由器的户外组网与无人值守场景应用
    Linux的shell编程易错点解析(for循环和ls命令)
    金仓数据库KingbaseES数据库开发指南(3. 面向应用程序的SQL开发)
    JAVA环境下使用DATAX(不使用python调用:也是个人记录一下)
    洗地机哪款最好用?口碑最好的家用洗地机推荐
    你真的了解以用户为中心的理念吗?
  • 原文地址:https://blog.csdn.net/yjkhtddx/article/details/127180447