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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 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)技术交流或关注公众号, 获得第一手资料与支持:

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
323 1
日志收集和Spring 微服务监控的最佳实践
|
3月前
|
负载均衡 监控 安全
5 个 IIS 日志记录最佳实践
IIS日志记录是监控Web服务器性能与安全的关键。本文介绍启用日志、应用池配置、负载均衡、敏感数据防护、日志集中管理及保留策略等五大最佳实践,助力高效分析与合规审计。
240 1
|
3月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
126 6
|
3月前
|
SQL 关系型数据库 MySQL
如何将Excel表的数据导入RDS MySQL数据库?
本文介绍如何通过数据管理服务DMS将Excel文件(转为CSV格式)导入RDS MySQL数据库,涵盖建表、编码设置、导入模式选择及审批执行流程,并提供操作示例与注意事项。
|
4月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
225 9
|
5月前
|
关系型数据库 MySQL Java
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
|
5月前
|
存储 SQL 关系型数据库
MySQL的Redo Log与Binlog机制对照分析
通过合理的配置和细致的管理,这两种日志机制相互配合,能够有效地提升MySQL数据库的可靠性和稳定性。
181 10
|
7月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
802 54
|
7月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
291 23
|
8月前
|
监控 安全 BI
优化 Apache 日志记录的 5 个最佳实践
Apache 日志记录对于维护系统运行状况和网络安全至关重要,其核心包括访问日志与错误日志的管理。通过制定合理的日志策略,如选择合适的日志格式、利用条件日志减少冗余、优化日志级别、使用取证模块提升安全性及实施日志轮换,可有效提高日志可用性并降低系统负担。此外,借助 Eventlog Analyzer 等专业工具,能够实现日志的高效收集、可视化分析与威胁检测,从而精准定位安全隐患、评估服务器性能,并满足合规需求,为强化网络安全提供有力支持。
202 0
优化 Apache 日志记录的 5 个最佳实践

热门文章

最新文章

推荐镜像

更多