iLogtail社区版使用入门 - 采集MySQL Binlog
简介: 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节点的交互协议,具体流程如下所示。
- iLogtail模拟MySQL Slave节点向MySQL master节点发送dump请求。
- MySQL master节点收到dump请求后,会将自身的Binlog实时发送给iLogtail。
- 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
前提条件
- 安装MySQL并且开启Binlog,Binlog为ROW模式;参考链接。
- 安装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
iLogtail社区版使用入门 - 采集MySQL Binlog的更多相关文章
- MySQL社区版升级到Percona Server
出于磁盘空间的考虑,在调研以后把磁盘空间紧张的库的引擎改为tokudb,(在改为tokudb引擎之前是innodb引擎,已经压缩过,但空间还是紧张)关于tokudb的优势各位自行查阅相关资料.要启用t ...
- MySql社区版和企业版的区别
1.社区版的免费,出问题MySql公司概不负责,是企业版的测试版,功能却没有企业版功能完善. 2.企业版的收费,并且价格不便宜,标准版2000美元,企业版5000美元,高级集群版10000美元(6万人 ...
- MySQL 社区版 安装小记
根据刘铁猛老师的教程,自己折腾一下 1. 安装包准备 在Windows10 64bit上安装,故需要准备vc++ 2013和2015的Redistributable的包,搜索即有,无需细说. 示例数据 ...
- yum install mysql-community-server yum方式安装mysql(社区版实操)
前言:rpm方式或者这种yum安装时比较简单的方式,但是不推荐,但是确实很着急的话,可以采用这种安装这种方式不利于后续对mysql的管理,如果是多实例或者是复杂的一些架构的话,还是推荐利用源码包编译方 ...
- MySQL 社区版
MySQL 社区版 MySQL 社区版是全球广受欢迎的开源数据库的免费下载版本.它遵循 GPL 许可协议,由庞大.活跃的开源开发人员社区提供支持. MySQL 社区版包括: 可插拔的存储引擎架构 多种 ...
- 实时采集MySQL数据之轻量工具Maxwell实操
@ 目录 概述 定义 原理 Binlog说明 Maxwell和Canal的区别 部署 安装 MySQL准备 初始化Maxwell元数据库 Maxwell进程启动 命令行参数 配置文件 实时监控Mysq ...
- IntelliJ IDEA(社区版)学习记录
一.下载 地址:官网下载地址 二.安装 运行安装程序,一路下一步.注意选择安装路径. 三.基本概念 project:相当于donet下的解决方案 module:相当于donet下的项目工程 四.IDE ...
- ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版
原文:ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio ...
- 搭建环境Visual Studio 2013 社区版
搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio Community 2013 开发环境. Visual St ...
- 腾讯工程师带你深入解析 MySQL binlog
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 本文由 腾讯云数据库内核团队 发布在云+社区 1.概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的red ...
随机推荐
- 基于python的每日固定时间执行实例解析
一 概念 datetime模块属性如下所示: 二 源码解析 该源码中,对时间库datetime应用十分到位,可以看作如下所示: import datetime import threading d ...
- Android 自定义View模板代码记录
原文地址:Android 自定义View模板代码记录 - Stars-One的杂货小窝 每次写自定义View,需要重写3个构造方法,如果使用Android Studio直接创建,会导致View代码过多 ...
- JSF之Action 与ActionListener的区别
事件 检验 参数 事件产生 页面跳转 Action 有 无参数,不传入当前控件,有返回值 当铵钮被单击时产生事件.提交表单 返回页面---根据配置文件跳转 ActionLis ...
- YCProgress自定义百分比进度条
目录介绍 1.本库优势亮点 2.使用介绍 2.1 圆环百分比进度条 2.2 直线百分比进度条 2.3 仿杀毒类型百分比进度条 3.注意要点 4.效果展示 5.其他介绍 1.本库优势亮点 圆环百分比进度 ...
- 「AntV」路网数据获取与L7可视化
1. 引言 L7 地理空间数据可视分析引擎是一种基于 WebGL 技术的地理空间数据可视化引擎,可以用于实现各种地理空间数据可视化应用.L7 引擎支持多种数据源和数据格式,包括 GeoJSON.CSV ...
- Scratch基础(一):安装和了解软件
Scratch基础(一):安装和了解软件 编写计算机程序代码的能力是当今社会读写能力的重要组成部分.当人们学习使用Scratch进行编码时,他们将学习解决问题,设计项目和交流思想的重要策略. 1.安装 ...
- 跳转到制定Sheet页及提交指定sheet页内容
一.跳转到指定Sheet的实现 话不多说,先上效果图 两个按钮的事件分别如下: _g().loadSheetByName("sheet1") # 跳转至sheet1按钮事件 _g( ...
- jenkens2权威指南
第1章 Jenkins简介 Jenkins 2是什么 JobConfigHistory:这个插件可以追溯XML配置的历史版本信息, 并且允许你查看每次变更的内容. JenkinsFile Jenkin ...
- #dp,排列#LOJ 2743「JOI Open 2016」摩天大楼
题目 将互不相同的 \(n\) 个数重排,使得相邻两数差的总和不超过 \(L\) 的有多少种方式. \(n\leq 100,L\leq 1000\) 分析 对于排列的问题,有一种很妙的方法就是从小到大 ...
- #Kruskal,可撤销并查集#CF891C Envy
题目 给出一个 \(n\) 个点 \(m\) 条边的无向图,每条边有边权,共 \(Q\) 次询问, 每次给出 \(k_i\) 条边,问这些边能否同时在一棵最小生成树上. 分析 考虑最小生成树选择的边权 ...
