Mysql数据库监听binlog的开启步骤

yizhihongxing

下面是详细讲解Mysql数据库监听binlog的开启步骤的完整攻略。

什么是binlog

先来了解一下binlog。MySQL 的二进制日志,即 binlog。它记录了所有更新或修改了数据库数据的操作,包括数据库的更改语句,如 INSERT、UPDATE 和 DELETE 等,以及关闭或重启服务器时的操作等。

为什么要监听binlog

在一些情况下,我们需要监听MySQL的binlog,比如:

  • 追踪或复制更改已经作用到MySQL数据库上的操作;
  • 根据特定规则过滤binlog中的所有操作,示例:数据同步,数据备份等;
  • 对binlog中的指令进行解析,以便后续序列化或处理正确的触发事件;
  • 对binlog中的数据进行分析,保存到外部系统,进行进一步的加工和分析。

开启binlog

要监听binlog,需要先开启binlog。在MySQL中,开启binlog需要在my.cnf文件中配置:

[mysqld]
log-bin=mysql-bin
binlog_format=ROW
  • log-bin=mysql-bin:表示开启日志文件,并指定文件的前缀是mysql-bin;
  • binlog_format=ROW:表示日志记录的格式为row的格式。

除了在my.cnf文件中配置,也可以直接在MySQL客户端中执行以下命令:

mysql> SET GLOBAL log_bin = ON;
mysql> SET GLOBAL binlog_format = 'ROW';

执行完以上命令后,MySQL会自动将binlog日志文件保存在数据目录下的mysql-bin目录中。

监听binlog

要监听MySQL的binlog,需要使用第三方工具。常用的有如下几种:

  • Canal:阿里云开源的MySQL数据库增量订阅&消费组件,基于binlog技术订阅&消费MySQL日志,实现MySQL到目标库的增量数据复制和增量数据订阅&消费。Canal提供了简单易用的API,并且对MySQL版本的兼容性较好。
  • Maxwell:Zillow开源的MySQL增量订阅工具,支持JSON和Avro两种格式输出,可以使用Kafka、Redis等中间件传递数据,SQL解析使用不同的parser扩展,如 Maxwell SQL Parser(支持MySQL 5.5到5.7)、OpenParser(需要MySQL 8.0+)和CustomParser(用户自定义)。
  • MySQL binlog解析器:基于Python和Java的开源解析器,可以解析MySQL的binlog,并将其转化成对应的语句。但是需要用户自己编写hook,实现相关功能。

下面以Canal为例,详细介绍监听binlog的步骤。

示例1:Canal监听MySQL binlog的步骤

  1. 下载Canal Server:从Canal的Github Releases中下载Canal Server对应版本。

  2. 修改Canal配置文件:进入Canal Server解压后的conf目录,复制一份example文件夹,改名为your-instance,并修改该文件夹下的instance.properties文件。根据实际情况修改相关配置。

    ```ini

    =============================================

    mysql主库的地址,可以和从库一样,如果不一样,需要在下面的slaveAddress中指定

    canal.instance.master.address=127.0.0.1:3306

    如果从库和主库的账号密码不一样,需要在此处指定

    canal.instance.dbUsername=root
    canal.instance.dbPassword=root

    需要监听的库名,可以有多个,使用逗号分隔

    canal.instance.filter.regex=...

    需要监听的MySQL数据的表名,可以有多个,使用逗号分隔

    canal.instance.filter.black.regex=test..*

    =============================================

    canal客户端连接的zk地址

    canal.zookeeper.hosts=127.0.0.1:2181

    canal客户端何时释放连接

    canal.zookeeper.session.timeout=6000
    canal.zookeeper.connection.timeout=6000
    canal.zookeeper.retry.retryInterval=3000
    canal.zookeeper.retry.count=-1
    ```

    注意:在第3、4行中指定了需要监听的库和表,如果只想监听某个库或某个表,需要修改该行对应的正则表达式。

  3. 添加MySQL数据源:进入解压后的bin目录,启动Canal Server。

    sh
    $ bin/startup.sh

  4. 监听binlog:连接上Canal Server后,在Canal Server的管理界面中,可以看到所有的MySQL数据库和表。若表的状态是RUNNING,则代表该表的binlog已经被成功监听。此时可以在Canal Server的数据目录~/data中查看监听到的binlog文件。

示例2:Maxwell监听MySQL binlog的步骤

  1. 下载Maxwell:从Maxwell的Github Releases中下载Maxwell对应版本。

  2. 修改Maxwell配置文件:修改Maxwell的配置文件config.properties

    ```ini

    RabbitMQ、Kafka等中间件相关配置

    kafka.bootstrap.servers: localhost:9092
    kafka.topic: maxwell

    MySQL 数据库相关配置

    用于连接和操作 MySQL 的用户名与密码。

    user: root
    password:

    被监控的MySql 数据库地址。

    host: 127.0.0.1

    被监控的 MySQL 数据库端口。

    port: 3306

    需要监听的MySQL数据的表名,可以有多个,使用逗号分隔

    includeDatabase:
    -

    输出物系列

    output: kafka
    maxwell.schema.parallelism: 5
    maxwell.producer.retries: 3
    maxwell.producer.batchSize: 100
    ```

  3. 监听binlog:启动Maxwell即可开始监听MySQL的binlog。可以设置日志输出类型,如Kafka等。

    sh
    bin/maxwell --config conf/config.properties | tee maxwell.log

监听成功后,binlog的相关操作就会被记录并保存下来。可以根据需要,封装自己的程序来处理这些binlog操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql数据库监听binlog的开启步骤 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MySQL实现统计过去12个月每个月的数据信息

    MySQL实现统计过去12个月每个月的数据信息,可以通过以下步骤实现: 步骤一:创建数据表 首先,我们需要在MySQL数据库中创建用于存储数据的数据表。数据表需要包含两个列:一个是日期列,一个是数据列。代码如下: CREATE TABLE data ( date DATE, value INT ); 步骤二:插入数据 随后,我们需要向数据表中插入一些测试数据…

    database 2023年5月22日
    00
  • 永中文档在线转换预览基于nginx配置部署方案

    下面是“永中文档在线转换预览基于nginx配置部署方案”的完整攻略: 一、前置条件 安装并启动Nginx服务器。 在服务器上安装永中文档在线转换预览服务。 在服务器上配置好文档转换所需的文件转换工具(如LibreOffice或OpenOffice)。 二、配置Nginx 在Nginx的配置文件中,添加以下配置: location /convertdoc/ {…

    database 2023年5月22日
    00
  • cpanm安装及Perl模块安装教程

    cpanm安装及Perl模块安装教程 CPAN(Comprehensive Perl Archive Network)是Perl语言的包管理器。它可管理Perl的扩展包(module),从而使Perl扩展包的安装、更新、卸载更加容易和自动化。 cpanm是CPAN库的一个命令行工具,是Perl脚本的一种包管理方式。cpanm可以更方便地安装和升级CPAN库中…

    database 2023年5月22日
    00
  • 如何使用Python查询某个列中的最大值?

    以下是如何使用Python查询某个列中的最大值的完整使用攻略。 步骤1:导入模块 在Python中,我们需要导入相应的模块来连接数据库和执行查询操作。以下是导入mysql-connector-python模块的基本语法: import mysql.connector 以下是导入psycopg2模块的基本语法: import psycopg2 步骤2:连接数据…

    python 2023年5月12日
    00
  • 基于mysql体系结构的深入解析

    基于MySQL体系结构的深入解析攻略 MySQL是目前应用最为广泛的关系型数据库管理系统之一,它具有成熟的体系结构和稳定的性能,被广泛应用于Web应用程序的数据存储和管理。本文将介绍MySQL体系结构的相关知识,并提供两条示例以帮助读者更好地理解。 MySQL体系结构的基本组成 MySQL体系结构分为三个主要组成部分:客户端、服务器和存储引擎。 客户端:负责…

    database 2023年5月19日
    00
  • linux下mysql自动备份数据库与自动删除临时文件

    下面是针对Linux下MySQL自动备份数据库和自动删除临时文件的完整攻略。 自动备份MySQL数据库 步骤1. 创建备份目录 首先,我们需要创建一个用于存储MySQL备份文件的目录。可以在Linux系统中使用以下命令来创建: sudo mkdir /home/backup/mysql 步骤2. 安装并配置自动备份脚本 为了自动备份MySQL数据库,我们需要…

    database 2023年5月22日
    00
  • MySQL decimal unsigned更新负数转化为0

    当MySQL decimal unsigned类型字段执行UPDATE操作时,如果UPDATE语句中的字段值为负数,会被强制转化为0。这是因为decimal unsigned类型规定了该类型的取值范围为正数。如果UPDATE语句赋值为负数,则会被截断为0。 以下是两条示例说明: 创建一个decimal unsigned类型字段的表 CREATE TABLE …

    database 2023年5月21日
    00
  • 适合新手的mysql日期类型转换实例教程

    适合新手的MySQL日期类型转换实例教程 什么是日期类型转换? 在进行MySQL中日期相关数据操作时,有时会遇到需要将日期与时间以不同的格式呈现的情况。MySQL提供了一系列日期类型转换函数,用于完成从一个日期/时间类型到另一个日期/时间类型的转换。常见的类型转换函数有:DATE_FORMAT(), STR_TO_DATE(), UNIX_TIMESTAMP…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部