MySQL Binlog导入日志服务最佳实践

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 本文为您介绍使用SLS导入MySQL Binlog的使用场景和最佳实践。

日志服务SLS是云原生观测和分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务,同时提供一站式数据采集、加工、查询与分析、可视化、告警、消费与投递等功能。本文将会重点介绍如何通过SLS主动接入将MySQL BInlog中的数据导入到SLS。

目标读者

数字化系统开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。

应用场景

适用于数据量较大且性能要求较高的数据同步场景。

  • 增量订阅数据库改动进行实时查询与分析。
  • 数据库操作审计。
  • 使用日志服务对数据库更新信息进行自定义查询分析、可视化、对接下游流计算、导入MaxCompute离线计算、导入OSS长期存储等操作。

方案架构

方案架构图

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

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

方案优势

使用SLS导入Binlog数据,具备如下优势:

  • 低成本,免机器成本和运维成本,直接托管到SLS。
  • 支持通过Checkpoint机制同步保存状态。
  • 支持海量数据写入,性能优越。
  • 支持Binlog数据导入过程中的在线DDL变更。
  • 提供Binlog原始顺序的全局自增ID,供消费端保序使用。

方案实施

前提条件

  • MySQL 必须开启Binlog,且Binlog必须为row模式
  • 需保证配置的用户具有需要采集的数据库读权限以及MySQL REPLICATION权限,示例如下(本示例中创建了一个账号sls_binlog,密码为sls_binlog,授予sls_binlog账号对于所有表的SELECT权限和REPLICATION权限,最后FLUSH PRIVILEGES立即生效):
CREATE USER sls_binlog IDENTIFIED BY'sls_binlog';GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON*.* TO 'sls_binlog'@'%';-- GRANT ALL PRIVILEGES ON *.* TO 'sls_binlog'@'%' ;FLUSH PRIVILEGES;
  • 如果是RDS或ECS自建MySQL需要在安全组中添加白名单。请根据数据导入任务所在Project的地域和数据库所在的网络环境,添加对应的IP地址白名单。IP地址列表请参见IP地址白名单
  • 已创建Project和Logstore。具体操作,请参见创建Project创建Logstore

配置参数说明

下表列出了Binlog导入涉及到的参数:

  • 如果是专有网络下ECS上自建的MySQL数据库,需选中使用VPC地址,ECS自建数据库,并设置如下参数。

参数

说明

VPC实例ID

ECS实例所属VPC的ID。

ECS实例IP

ECS实例的私网IP地址。

  • 如果是公网环境下的RDS MySQL数据库或其他场景下自建的MySQL数据库,取消选中使用VPC地址,并设置如下参数。

参数

说明

数据库公网IP或者域名

MySQL数据库的公网IP地址或者域名。

公共配置

参数

说明

配置名称

设置配置的名称

MySQL端口

数据库端口

用户名

需保证配置的用户具有数据库读权限以及MySQL REPLICATION权限

密码

数据库密码

高级配置

数据库表白名单

包含的表名称(包括db,例如test_db.test_table

),为正则表达式,若某表不符合IncludeTables任一条件则该表不会被采集,默认采集表.*\\..*

数据库表黑名单

忽略的表名称(包括db,例如test_db.test_table

),为正则表达式,若某表符合ExcludeTables任一条件则该表不会被采集,默认排除表"mysql\\..*"

开始的binlog文件名

首次采集的Binlog文件名。不设置时,默认从当前时间点开始采集。
如果想从指定位置开始采集,可以查看当前的Binlog文件以及文件大小偏移量,并将StartBinName、StartBinlogPos设置成对应的值,示例如下。
mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |     37196 | No        |
+---------------+-----------+-----------+
1 row in set (0.00 sec)

当指定StartBinName时,第一次采集会产生较大流量。

开始的binlog位置

首次采集的Binlog文件的偏移量,不设置时,默认为0。

开始的GTID

不设置时,默认从最新位置开始监听。

采集DDL

是否采集DDL(data definition language)事件数据。不设置时, 默认为false,表示不收集DDL事件数据。

该选项不支持IncludeTables和ExcludeTables过滤。

采集Insert

是否采集insert事件的数据。不设置时,默认为true。设置为false时,表示将不采集insert事件数据。

采集Update

是否采集update事件的数据。不设置时,默认为true。设置为false时,表示不采集update事件数据。

采集Delete

是否采集delete事件的数据。不设置时,默认为true。设置为false时,表示不采集delete事件数据。

采集Event元数据

是否采集Event元数据,默认为false,不采集。包含字段event_size、event_server_id。

使用event_time作为日志时间

默认false,使用系统时间。为true时,使用binlog日志上的even_time作为日志时间

控制台配置流程

以下是主要的配置步骤:

  1. 登录SLS控制台,在Project列表页面,选择已有的Project或者创建新的Project
  2. 日志库标签页,选择已有时序库或者单击+图标创建新的时序库
  3. 在日志库的数据接入 > 数据导入,单击+图标,然后选择MySQL Binlog-数据导入

  1. 在数据源配置页面,配置相关信息 (参考配置参数说明)

  1. 点击预览按钮,确保配置符合预期。如果配置有问题,则预览操作会返回具体的错误信息。预览时,如果Binlog没有实时更新,会出现预览超时。
  2. 点击下一步按钮,完成Binlog导入配置。
  3. 到对应的日志库数据是否正确接入(大约需要等待1分钟左右,数据会写入到日志库中)。

数据字段

DML数据字段

需要说明的是,将Binlog数据导入到SLS的过程中,后台服务会自动添加5个相关的元数据字段,它们分别是_db_、_event_、_event_time_、_host_、_sid_以及_table_,具体含义如下表所示:

元数据字段名称

具体含义

_db_

数据库名

_event_

数据操作名,包括row_update、row_insert、row_delete和ddl

_event_time_

数据操作时间

_host_

数据源地址

_sid_

全局自增ID,在导入开始执行后,从1开始自增

_table_

数据库表名

DDL数据字段

DDL的元数据字段相比DDL字段缺少了_table_字段

查看任务状态

在完成配置后,可以在对应日志库的数据接入>数据导入下,看找到对应的任务配置名称,点击该配置后,可以看到对应配置的概览信息以及可以进行的相关操作(支持修改、停止以及删除),如下图所示。其中,配置概览中,包含了基础信息以及统计报表两个部分。

基础信息

基础信息部分相对简单,主要包含了任务的配置内容以及当前任务的状态。配置内容无需具体介绍,这里详细说明下任务的状态及其对应的操作。

任务的状态可以是运行中、已停止、成功以及失败,其中成功和失败状态是任务的终态(对于Binlog导入而言,这两个状态不应该发生)。当任务处于运行中时,可以选择停止任务;而当任务已停止时,则可以选择启动任务,此时从之前中断的位置继续读取BInlog数据。

统计报表

统计报表部分,展示了任务运行过程中的核心指标数据,用户可以清楚地看到云监控数据导入的细节,比如数据读取速率、是否出现非预期的错误、数据延迟等。分为以下几类:

1.读写总量

2.处理速率

3.运行异常

任务运行过程中,出现的异常都会记录在运行异常报表中,结合告警(用户可以按需自定义告警),用户可以实时地了解任务异常的发生并及时进行处理。比如,下图中展示的异常来自用户配置了错误的启动位置,导致BInlog读取异常,默认从最新位置开始读取。

4.运行状态

典型场景

黑白名单过滤

数据库表黑白名单采用正则化的方式进行过滤,多个table采用;分开。默认情况下,Binlog的导入会过滤掉mysql库中的所有消息(RDS的ha_health心跳包会影响数据采集)。

自定义起始位置

默认情况下,Binlog的数据导入会从当前Binlog的最新位置开始采集。创建任务时,我们也允许用户使用自定义的起始采集位置。需要注意的是,如果新建任务时自定义的起始位置无法被找到或者位置错误,会从最新位置开始采集。如果在修改配置时自定义起始位置无法被找到或者位置错误,会清空checkpoint并从最新位置开始采集。

固定类型数据采集

默认情况下,在导入Binlog数据时采集所有的DML和DDL消息。在创建导入任务或者更新已有任务时,我们也允许用户通过高级配置自定义需要采集的消息类型,如下图所示。

自定义时间戳

默认情况下,在导入Binlog数据时会使用消费端接受到消息的时间。在创建导入任务或者更新已有任务时,我们也允许用户通过使用event_time作为日志时间配置Binlog时间戳(即元数据中的even_time字段)作为SLS消息的时间戳,如下图所示。

参考

  • SLS(日志服务)云原生观测分析平台:https://www.aliyun.com/product/sls
  • 欢迎扫群加入阿里云-日志服务(SLS)技术交流或关注公众号, 获得第一手资料与支持:

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
21天前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
117 4
|
30天前
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
124 2
|
25天前
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
|
21天前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
56 0
|
21天前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
45 0
|
28天前
|
存储 关系型数据库 MySQL
深入MySQL:事务日志redo log详解与实践
【8月更文挑战第24天】在MySQL的InnoDB存储引擎中,为确保事务的持久性和数据一致性,采用了redo log(重做日志)机制。redo log记录了所有数据修改,在系统崩溃后可通过它恢复未完成的事务。它由内存中的redo log buffer和磁盘上的redo log file组成。事务修改先写入buffer,再异步刷新至磁盘,最后提交事务。若系统崩溃,InnoDB通过redo log重放已提交事务并利用undo log回滚未提交事务,确保数据完整。理解redo log工作流程有助于优化数据库性能和确保数据安全。
113 0
|
28天前
|
存储 SQL 关系型数据库
MySQL事务日志奥秘:undo log大揭秘,一文让你彻底解锁!
【8月更文挑战第24天】本文深入探讨了MySQL中undo log的关键作用及其在确保事务原子性和一致性方面的机制。MySQL通过记录事务前的数据状态,在需要时能回滚至初始状态。主要介绍InnoDB存储引擎下的undo log实现,包括undo segment和record的结构,而MyISAM则采用redo log保障持久性而非一致性。通过一个简单的SQL回滚示例,展示了undo log如何在实际操作中发挥作用,帮助读者更好地理解并运用MySQL事务管理功能。
104 0
|
29天前
|
SQL 存储 关系型数据库
MySQL日志,你知多少?
MySQL日志,你知多少?
41 0
|
29天前
|
关系型数据库 MySQL 数据库连接
绝对干货!从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
绝对干货!从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
35 0
|
27天前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)