日志服务SLS是云原生观测和分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务,同时提供一站式数据采集、加工、查询与分析、可视化、告警、消费与投递等功能。本文将会重点介绍如何通过SLS主动接入将MySQL BInlog中的数据导入到SLS。
目标读者
数字化系统开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。
应用场景
适用于数据量较大且性能要求较高的数据同步场景。
- 增量订阅数据库改动进行实时查询与分析。
- 数据库操作审计。
- 使用日志服务对数据库更新信息进行自定义查询分析、可视化、对接下游流计算、导入MaxCompute离线计算、导入OSS长期存储等操作。
方案架构
方案架构图
SLS主动接入内部实现了MySQL Slave节点的交互协议,具体流程如下所示。
- SLS将自己模拟为MySQL Slave节点向MySQL master节点发送dump请求。
- MySQL master节点收到dump请求后,会将自身的Binlog实时发送给SLS。
- 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,例如 ),为正则表达式,若某表不符合IncludeTables任一条件则该表不会被采集,默认采集表.*\\..* |
数据库表黑名单 |
忽略的表名称(包括db,例如 ),为正则表达式,若某表符合ExcludeTables任一条件则该表不会被采集,默认排除表"mysql\\..*" |
开始的binlog文件名 |
首次采集的Binlog文件名。不设置时,默认从当前时间点开始采集。 |
开始的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作为日志时间 |
控制台配置流程
以下是主要的配置步骤:
- 登录SLS控制台,在Project列表页面,选择已有的Project或者创建新的Project
- 在日志库标签页,选择已有时序库或者单击+图标创建新的时序库
- 在日志库的数据接入 > 数据导入,单击+图标,然后选择MySQL Binlog-数据导入
- 在数据源配置页面,配置相关信息 (参考配置参数说明)
- 点击预览按钮,确保配置符合预期。如果配置有问题,则预览操作会返回具体的错误信息。预览时,如果Binlog没有实时更新,会出现预览超时。
- 点击下一步按钮,完成Binlog导入配置。
- 到对应的日志库数据是否正确接入(大约需要等待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)技术交流或关注公众号, 获得第一手资料与支持: