简介: 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...
本文为阿里云原创内容,未经容许不得转载。