下面是详细讲解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的步骤
-
下载Canal Server:从Canal的Github Releases中下载Canal Server对应版本。
-
修改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行中指定了需要监听的库和表,如果只想监听某个库或某个表,需要修改该行对应的正则表达式。
-
添加MySQL数据源:进入解压后的bin目录,启动Canal Server。
sh
$ bin/startup.sh -
监听binlog:连接上Canal Server后,在Canal Server的管理界面中,可以看到所有的MySQL数据库和表。若表的状态是RUNNING,则代表该表的binlog已经被成功监听。此时可以在Canal Server的数据目录
~/data
中查看监听到的binlog文件。
示例2:Maxwell监听MySQL binlog的步骤
-
下载Maxwell:从Maxwell的Github Releases中下载Maxwell对应版本。
-
修改Maxwell配置文件:修改Maxwell的配置文件
config.properties
。```ini
RabbitMQ、Kafka等中间件相关配置
kafka.bootstrap.servers: localhost:9092
kafka.topic: maxwellMySQL 数据库相关配置
用于连接和操作 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
``` -
监听binlog:启动Maxwell即可开始监听MySQL的binlog。可以设置日志输出类型,如Kafka等。
sh
bin/maxwell --config conf/config.properties | tee maxwell.log
监听成功后,binlog的相关操作就会被记录并保存下来。可以根据需要,封装自己的程序来处理这些binlog操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql数据库监听binlog的开启步骤 - Python技术站