本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
您可以将自建MySQL数据库或RDS MySQL数据库中的Binlog导入到日志服务,实现数据的查询分析、加工等操作。本文介绍导入MySQL Binlog的操作步骤。
前提条件
已创建MySQL数据库且开启ROW模式的Binlog功能。
RDS MySQL数据库默认开启Binlog功能。
已创建具备目标数据库读权限及MySQL REPLICATION权限的账号。
例如数据库账号为sls_binlog,密码为sls_binlog。您需执行如下命令授予sls_binlog用户对目标数据库下的所有表有SELECT权限以及MySQL REPLICATION权限。
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;
在MySQL数据库中添加白名单。
请根据数据导入任务所在Project的地域和数据库所在的网络环境,添加对应的IP地址白名单。IP地址列表请参见IP地址白名单。
已创建Project和Logstore。具体操作,请参见创建Project和创建Logstore。
导入数据
目前,仅支持华南2(河源)地域。
登录日志服务控制台。
在Project列表区域,单击目标Project。
在
页签中,单击目标Logstore左侧的>,然后将鼠标悬浮在 上,单击+。在快速数据接入对话框,单击MySQL BinLog-数据导入。
设置导入配置。
在数据源设置中,配置如下参数。
如果是专有网络下的RDS MySQL数据库,需选中使用VPC地址、RDS实例,并设置如下参数。
参数
说明
VPC实例ID
RDS MySQL数据库所属VPC的ID。
RDS实例ID
需配置为RDS实例的VpcCloudInstanceId。您可以通过调用DescribeDBInstanceAttribute接口获取VpcCloudInstanceId。具体操作,请参见获取RDS实例的VpcCloudInstanceId。
如果是专有网络下ECS上自建的MySQL数据库,需选中使用VPC地址,ECS自建数据库,并设置如下参数。
参数
说明
VPC实例ID
ECS实例所属VPC的ID。
ECS实例IP
ECS实例的私网IP地址。
如果是公网环境下的RDS MySQL数据库或其他场景下自建的MySQL数据库,取消选中使用VPC地址,并设置如下参数。
参数
说明
数据库公网IP或者域名
MySQL数据库的公网IP地址或者域名。
公共参数说明如下表所示。
参数
说明
配置名称
设置导入配置的名称。
MySQL端口
MySQL数据库的服务端口,默认为3306。
用户名
用于登录MySQL数据库的账号名称。
建议只授予该账号读取MySQL数据的权限。
密码
账号密码。
数据库
MySQL数据库名称。
高级配置
数据库表白名单
用于指定待采集的数据库表。正则表达式形式,格式为
数据库名.表名
,多个表之间使用半角分号(;)分隔。默认值为
.*\..*
,表示匹配所有数据库下的表。数据库表黑名单
用于排除不需要采集的数据库表。正则表达式形式,格式为
数据库名.表名
,多个表之间使用半角分号(;)分隔。默认值为
mysql\..*
,表示排除名为mysql数据库下的所有表。binlog起始位置
指定从哪个位置开始采集Binlog。
最新位置:从最新位置开始采集Binlog。
指定binlog位置:从指定的位置开始采集Binlog。
您可以执行
show binary logs;
语句,查看Binlog文件名以及文件大小偏移量。如果不设置开始的binlog文件名和开始的binlog位置,则从最新位置开始采集Binlog。
说明如果只指定开始的binlog文件名,则第一次采集会产生较大流量。
指定GTID:从指定的GTID位置,开始采集。
如果不设置开始的GTID,则从最新位置开始采集Binlog。
采集DDL
打开采集DDL开关后,日志服务将采集DDL(data definition language)事件数据。
重要该选项不受数据库表黑白名单限制。
采集Insert
打开采集Insert开关后,日志服务将采集Insert事件数据。
采集Update
打开采集Update开关后,日志服务将采集Update事件数据。
采集Delete
打开采集Delete开关后,日志服务将采集Delete事件数据。
采集Event元数据
打开采集Event元数据开关后,日志服务将采集Event元数据,包含_event_size_和_event_server_id_字段。
使用event_time作为日志时间
是否使用event_time字段的值作为日志时间。
打开使用event_time作为日志时间开关,则使用event_time字段的值作为日志时间。
关闭使用event_time作为日志时间开关,则使用系统时间作为日志时间。
单击预览,预览导入结果。
说明如果RDS MySQL数据库未实时产生Binlog数据,系统将提示超时。
确认无误后,单击下一步。
- 预览数据及创建索引,然后单击下一步。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引。重要 如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。
单击查询日志,进入查询和分析页面,确认是否成功导入MySQL Binlog。
等待1分钟左右,如果有目标MySQL Binlog导入,则说明导入成功。
查看导入配置和统计报表
创建导入配置成功后,您可以在控制台中查看已创建的导入配置及生成的统计报表。
单击目标Project。
选择目标日志库下的
,单击目标导入配置。在导入配置概览页面,查看导入配置的基本信息和统计报表。
相关操作
在导入配置概览页面,您还可以进行如下操作。
修改配置
单击修改配置,修改导入配置的相关配置,具体配置说明请参见导入数据。
删除配置
单击删除配置,删除该导入配置。
警告删除后不可恢复,请谨慎操作。
常见问题
为什么会出现Binlog同步失效?
主要原因如下:
重启MySQL服务器或者清空Binlog导致Binlog位置丢失,需要重启导入任务获取Binlog的最新位置。
MySQL服务器主备切换导致Binlog不同步。例如最新的Binlog位置从(binlog.1005, 4)切换到(binlog.105, 4),丢失位置,需要重启导入任务获取Binlog的最新位置。
为什么会出现unknown字段?
主要原因如下:
数据库账号没有数据库表的SELECT权限,导致表的元信息丢失。
网络延迟很高,导致日志服务与MySQL服务器第一次连接时延迟很高,可能会出现表元信息丢失的情况。
RDS MySQL数据库表中没有建立主键。
如何避免数据被重复采集?
建议您启用MySQL服务器的全局事务ID(GTID)功能,避免因主备切换造成的数据重复采集。
在MySQL主备同步的设置下,MySQL master节点会将产生的Binlog同步给MySQL slave节点,MySQL slave节点收到后存储到本地的Binlog文件中。当MySQL master节点和slave节点之间的Binlog序号不同步时,发生了主备切换事件,以Binlog文件名和文件大小偏移量作为checkpoint的机制将导致数据重复采集。
例如有一段数据在MySQL master节点上位于(binlog.100, 4)到(binlog.105, 4)之间,而在MySQL slave节点上位于(binlog.1000, 4)到(binlog.1005, 4)之间,并且Logtail已经从MySQL master节点获取了这部分数据,将本地checkpoint更新到了(binlog.105, 4)。如果此时发生了主备切换,Logtail将会继续使用本地checkpoint(binlog.105, 4)去向新的MySQL master节点采集binlog。但是因为新的MySQL master上的(binlog.1000, 4)到(binlog.1005, 4)这部分数据的序号都大于Logtail所请求的序号,MySQL master将它们返回给Logtail,导致重复采集。