您可以将自建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。
导入数据
- 登录日志服务控制台。
- 在Project列表区域,单击目标Project。
- 在>,然后将鼠标悬浮在 上,单击+。 页签中,单击目标Logstore左侧的
- 在快速数据接入对话框,单击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,导致重复采集。