共计 5651 个字符,预计需要花费 15 分钟才能阅读完成。
简介: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/kafk…
$ 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-ed…
$ 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.yamlenable: 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 能够进行低成本长期存储,高性能查问来实现审计的需要。对于 iLogtailiLogtail 作为阿里云 SLS 提供的可观测数据采集器,能够运行在服务器、容器、K8s、嵌入式等多种环境,反对采集数百种可观测数据(日志、监控、Trace、事件等),曾经有千万级的装置量。目前,iLogtail 已正式开源,欢送应用及参加共建。GitHub: https://github.com/alibaba/il… 社区版文档:https://ilogtail.gitbook.io/i… 企业版官网:https://help.aliyun.com/docum…
原文链接:https://click.aliyun.com/m/10… 本文为阿里云原创内容,未经容许不得转载。