简介: MySQL Binlog记录了MySQL的变更日志,业界也有一些方案来同步Binlog的数据,如Canal、MaxWell、DTS等。不同的工具可以实现不同的目标,iLogtail也提供了便捷的Binlog同步功能,iLogtail采集到Binlog后,可以将结果输出到各类flusher,本文以采集到Kafka为例进行介绍。

iLogtail是阿里云日志服务(SLS)团队自研的可观测数据采集Agent,拥有的轻量级、高性能、自动化配置等诸多生产级别特性,可以署于物理机、虚拟机、Kubernetes等多种环境中来采集遥测数据。iLogtail在阿里云上服务了数万家客户主机和容器的可观测性采集工作,在阿里巴巴集团的核心产品线,如淘宝、天猫、支付宝、菜鸟、高德地图等也是默认的日志、监控、Trace等多种可观测数据的采集工具。目前iLogtail已有千万级的安装量,每天采集数十PB的可观测数据,广泛应用于线上监控、问题分析/定位、运营分析、安全分析等多种场景,在实战中验证了其强大的性能和稳定性。

在当今云原生的时代,我们坚信开源才是iLogtail最优的发展策略,也是释放其最大价值的方法。因此,我们决定将iLogtail开源,期望同众多开发者一起将iLogtail打造成世界一流的可观测数据采集器。

MySQL Binlog背景

MySQL Binlog记录了MySQL的变更日志,包括DML、DDL等,其中DML不会记录SELECT、SHOW等,因为只读的SQL语句不会对数据库的状态产生影响。

Binlog对于MySQL的重要性不言而喻,在数据库崩溃的情况下可以借助Binlog进行恢复。因为Binlog记录了每个变更的内容,所以理论上可以将数据库的状态恢复到Binlog存在的任意时刻,常用数据库备份。

主从复制也是Binlog的一个重要使用场景,在读多写少的互联网应用中,数据库一主多从的部署架构可以给应用增加更多的响应能力,从库从主库同步数据往往也会借助Binlog。

数据库操作审计,由于Binlog记录了所有对数据库的更改操作,所以一些误操作或者危险操作也会记录其中,将Binlog记录下来,分析其中的操作行为,可以实现轻量级的数据库操作审计,追踪其中的误操作发生的时间或者识别危险SQL的发生。

Binlog如此重要,业界也有一些方案来同步Binlog的数据,如Canal、MaxWell、DTS等。不同的工具可以实现不同的目标,iLogtail也提供了便捷的Binlog同步功能,iLogtail采集到Binlog后,可以将结果输出到各类flusher,本文以采集到Kafka为例进行介绍。

理解iLogtail采集Binlog原理

iLogtail内部实现了MySQL Slave节点的交互协议,具体流程如下所示。

  1. iLogtail模拟MySQL Slave节点向MySQL master节点发送dump请求。
  2. MySQL master节点收到dump请求后,会将自身的Binlog实时发送给iLogtail。
  3. iLogtail对Binlog进行事件解析、过滤、数据解析等操作,并将解析好的数据上传到Flusher。

支持Binlog位点

通过指定Binlog的位置,支持从Binlog特定位点进行消费。

支持Checkpoint

在iLogtail重启或者机器意外重启的情况下,iLogtail会对当前消费的位点进行保存,并在下次重新启动时,从上次消费的位置进行消费。

支持多种数据库过滤

支持对数据库的表进行黑白名单配置。

支持全局事务ID(GTID)

支持MySQL数据库服务器的GTID功能,避免主从切换引起的数据丢失。

使用场景

本文介绍使用iLogtail对数据库的增删改的Binlog进行采集,并且将采集到的数据输出到Kafka。本文以MySQL的示例数据库employees为例进行采集。其中涉及的表为titles。内容如下

emp_no  title from_date to_date
10006 Senior Engineer 1990-08-05 9999-01-01

部署iLogtail采集MySQL Binlog

接下来介绍如果使用iLogtail采集MySQL的Binlog

前提条件

  1. 安装MySQL并且开启Binlog,Binlog为ROW模式;参考链接
  2. 安装kafka
# 下载、解压
$ wget https://dlcdn.apache.org/kafka/3.2.0/kafka_2.13-3.2.0.tgz
$ tar -xzf kafka_2.13-3.2.0.tgz
$ cd kafka_2.13-3.2.0
# 启动
# Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
$ nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
# Start the Kafka broker service
$ nohup bin/kafka-server-start.sh config/server.properties &
  • 创建topic,设置为binlog。
bin/kafka-topics.sh --create --topic binlog --bootstrap-server localhost:9092

更多部署说明,详见链接

安装iLogtail

  • 下载iLogtail
$ wget https://ilogtail-community-edition.oss-cn-shanghai.aliyuncs.com/1.1.0/ilogtail-1.1.0.linux-amd64.tar.gz
$ tar -xzvf ilogtail-1.1.0.linux-amd64.tar.gz
$ cd ilogtail-1.1.0
$ ll
drwxrwxr-x 5 505 505 4096 7月 10 18:00 example_config
-rwxr-xr-x 1 505 505 84242040 7月 11 00:00 ilogtail
-rwxr-xr-x 1 505 505 16400 7月 11 00:00 libPluginAdapter.so
-rw-r--r-- 1 505 505 115963144 7月 11 00:00 libPluginBase.so
-rw-rw-r-- 1 505 505 11356 7月 11 00:00 LICENSE
-rw-rw-r-- 1 505 505 5810 7月 11 00:00 README-cn.md
-rw-rw-r-- 1 505 505 4834 7月 11 00:00 README.md
-rw-rw-r-- 1 505 505 118 7月 14 11:22 ilogtail_config.json
drwxr-xr-x 2 root root 4096 7月 12 09:55 user_yaml_config.d
  • 采集配置

user_yaml_config.d目录下创建binlog.yaml

enable: true
inputs:
- Type: service_canal
Host: 127.0.0.1
Port: 3306
ServerID: 123456
Password: xxxxx
EnableDDL: true
TextToString: true
flushers:
- Type: flusher_kafka
Brokers:
- localhost:9092
Topic: access-log
$ tree user_yaml_config.d/
user_yaml_config.d/
└── binlog.yaml

启动

$ nohup ./ilogtail > stdout.log 2> stderr.log &

验证

# 终端1: 启动kafka-console-consumer,消费binlog

$ bin/kafka-console-consumer.sh --topic binlog --from-beginning --bootstrap-server localhost:9092

终端2:分别执行三条语句更新数据库

# 分别执行三条sql语句

update titles set title = 'test-update' where emp_no = 10006
delete from titles where emp_no = 10006
INSERT INTO `titles` (`emp_no`, `title`, `from_date`, `to_date`)
VALUES
(10006, 'Senior Engineer', '1990-08-05', '9999-01-01');

终端1:查看结果

# 终端1: 消费到写入的访问日志,说明流程正常。

{"Time":1657890330,"Contents":[{"Key":"_table_","Value":"titles"},{"Key":"_offset_","Value":"4308"},{"Key":"_old_emp_no","Value":"10006"},{"Key":"from_date","Value":"1990-08-05"},{"Key":"_host_","Value":"127.0.0.1"},{"Key":"_event_","Value":"row_update"},{"Key":"_id_","Value":"12"},{"Key":"_old_from_date","Value":"1990-08-05"},{"Key":"_gtid_","Value":"00000000-0000-0000-0000-000000000000:0"},{"Key":"_db_","Value":"employees"},{"Key":"_filename_","Value":"mysql-bin.000001"},{"Key":"_old_title","Value":"Senior Engineer"},{"Key":"_old_to_date","Value":"9999-01-01"},{"Key":"emp_no","Value":"10006"},{"Key":"title","Value":"test-update"},{"Key":"to_date","Value":"9999-01-01"}]}
{"Time":1657890333,"Contents":[{"Key":"_id_","Value":"13"},{"Key":"_filename_","Value":"mysql-bin.000001"},{"Key":"emp_no","Value":"10006"},{"Key":"title","Value":"test-update"},{"Key":"_db_","Value":"employees"},{"Key":"_table_","Value":"titles"},{"Key":"_event_","Value":"row_delete"},{"Key":"from_date","Value":"1990-08-05"},{"Key":"to_date","Value":"9999-01-01"},{"Key":"_host_","Value":"127.0.0.1"},{"Key":"_gtid_","Value":"00000000-0000-0000-0000-000000000000:0"},{"Key":"_offset_","Value":"4660"}]}
{"Time":1657890335,"Contents":[{"Key":"_offset_","Value":"4975"},{"Key":"emp_no","Value":"10006"},{"Key":"title","Value":"Senior Engineer"},{"Key":"from_date","Value":"1990-08-05"},{"Key":"_gtid_","Value":"00000000-0000-0000-0000-000000000000:0"},{"Key":"_filename_","Value":"mysql-bin.000001"},{"Key":"_table_","Value":"titles"},{"Key":"_event_","Value":"row_insert"},{"Key":"_id_","Value":"14"},{"Key":"to_date","Value":"9999-01-01"},{"Key":"_host_","Value":"127.0.0.1"},{"Key":"_db_","Value":"employees"}]}

总结

通过以上的示例,演示了如何使用iLogtail采集MySQL的Binlog日志。借助iLogtail进行简单的配置,即可完成对Binlog的采集,同时iLogtail也支持更多的灵活的配置,对采集的格式进行配置,iLogtail基于Canal的方案来对数据库进行采集。

通过采集Binlog可以在SLS对数据库的增量改动进行查询、分析、可视化;也可以借助SLS的告警功能对于危险SQL进行监控告警配置,在SLS可以进行低成本长期存储,高性能查询来实现审计的需求。

关于iLogtail

iLogtail作为阿里云SLS提供的可观测数据采集器,可以运行在服务器、容器、K8s、嵌入式等多种环境,支持采集数百种可观测数据(日志、监控、Trace、事件等),已经有千万级的安装量。目前,iLogtail已正式开源,欢迎使用及参与共建。

GitHub: https://github.com/alibaba/ilogtail

社区版文档:https://ilogtail.gitbook.io/ilogtail-docs/about/readme

企业版官网:https://help.aliyun.com/document_detail/65018.html

本文为阿里云原创内容,未经允许不得转载。
 

iLogtail社区版使用入门 - 采集MySQL Binlog的更多相关文章

  1. MySQL社区版升级到Percona Server

    出于磁盘空间的考虑,在调研以后把磁盘空间紧张的库的引擎改为tokudb,(在改为tokudb引擎之前是innodb引擎,已经压缩过,但空间还是紧张)关于tokudb的优势各位自行查阅相关资料.要启用t ...

  2. MySql社区版和企业版的区别

    1.社区版的免费,出问题MySql公司概不负责,是企业版的测试版,功能却没有企业版功能完善. 2.企业版的收费,并且价格不便宜,标准版2000美元,企业版5000美元,高级集群版10000美元(6万人 ...

  3. MySQL 社区版 安装小记

    根据刘铁猛老师的教程,自己折腾一下 1. 安装包准备 在Windows10 64bit上安装,故需要准备vc++ 2013和2015的Redistributable的包,搜索即有,无需细说. 示例数据 ...

  4. yum install mysql-community-server yum方式安装mysql(社区版实操)

    前言:rpm方式或者这种yum安装时比较简单的方式,但是不推荐,但是确实很着急的话,可以采用这种安装这种方式不利于后续对mysql的管理,如果是多实例或者是复杂的一些架构的话,还是推荐利用源码包编译方 ...

  5. MySQL 社区版

    MySQL 社区版 MySQL 社区版是全球广受欢迎的开源数据库的免费下载版本.它遵循 GPL 许可协议,由庞大.活跃的开源开发人员社区提供支持. MySQL 社区版包括: 可插拔的存储引擎架构 多种 ...

  6. 实时采集MySQL数据之轻量工具Maxwell实操

    @ 目录 概述 定义 原理 Binlog说明 Maxwell和Canal的区别 部署 安装 MySQL准备 初始化Maxwell元数据库 Maxwell进程启动 命令行参数 配置文件 实时监控Mysq ...

  7. IntelliJ IDEA(社区版)学习记录

    一.下载 地址:官网下载地址 二.安装 运行安装程序,一路下一步.注意选择安装路径. 三.基本概念 project:相当于donet下的解决方案 module:相当于donet下的项目工程 四.IDE ...

  8. ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版

    原文:ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio ...

  9. 搭建环境Visual Studio 2013 社区版

    搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio Community 2013 开发环境. Visual St ...

  10. 腾讯工程师带你深入解析 MySQL binlog

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 本文由 腾讯云数据库内核团队 发布在云+社区 1.概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的red ...

随机推荐

  1. Docker部署nginx配置SSL多目录

    对自己第一次搭建nginx做个简要的笔记 第一步:创建宿主机挂载点目录 mkdir -p /home/nginx/{conf,conf.d,html,log,ssl} 第二步:安装简易版nginx,复 ...

  2. Mysql中数据类型括号中的数字代表的含义

    相信大家不管是看别人的代码,还是自己的代码总会在定义表的数据类型时,会需要在数据类型后面加一个括号,里面写一个参数,例如int(3),smallint(5),char(5)等,但是括号里面的数字到底是 ...

  3. 【2311. 小于等于 K 的最长二进制子序列】贪心

    class Solution { public static void main(String[] args) { Solution solution = new Solution(); System ...

  4. 3DCAT为华东师大设计学院打造元宇宙数字虚拟学院

    6月11日,华东师范大学设计学院在chi K11美术馆举办了一场别开生面的 2023 年本科毕业设计暨项目实践教学现场演示展.其中,元宇宙数字虚拟学院(一期)的现场发布会引起了现场震撼,吸引了众多观众 ...

  5. 3D渲染速度慢,花重金买显卡还是用云渲染更划算

    3D渲染对建筑师和设计师来说并不陌生,3D渲染的过程中出现渲染卡顿.特殊材质难以渲染,或者本地配置不足.本地渲染资源不够时,常常会影响工作效率.本文比较了3D渲染时,为提高工作效率,买显卡还是用云渲染 ...

  6. Locust 断言的实现?

    一.检查点的方式有哪些: 主要是python 内置的assert 断言(自动断言)还有locust 中的catch_response 断言(手动断言):那么这两者之间有什么区别呢? 其实主要区别在与生 ...

  7. 04.Android之动画问题

    目录介绍 4.0.0.1 Android中有哪几种类型的动画,属性动画和补间动画有何区别?补间动画和属性动画常用的有哪些? 4.0.0.2 View动画为何不能真正改变View的位置?而属性动画为何可 ...

  8. ArcMap的mxd文件没有数据、显示感叹号怎么办?

      本文介绍在ArcMap软件中,导入.mxd地图文档文件后图层出现感叹号.地图显示空白等情况的解决办法.   在ArcMap软件使用过程中,我们经常会需要将包含有多个图层的.mxd地图文档文件导入软 ...

  9. Atcoder DP contest 题解

    动态规划(Atcoder DP 26题) on Atcoder on Luogu 本文同步发表于知乎专栏. Frog 1 $N$ 个石头,编号为 $1,2,...,N$.对于每个 $i(1 \leq ...

  10. 给你的wordpress添加文章内图片鼠标点击放大浏览的功能吧~

    注:笔者已启用WP Githuber MD插件使用Markdown语法进行文章编辑,启用的主题为generatepress. 1.进入你的宝塔面板首页 点击文件选项: 2.分别找到以下几个文件进行修改 ...