采集MySQL查询结果

采集MySQL查询结果

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何通过日志服务控制台创建 Logtail 采集配置来采集 MySQL 查询结果。

前提条件

  • 已在服务器上安装 Linux Logtail 0.16.0 及以上版本或 Windows Logtail 1.0.0.8 及以上版本。具体操作,请参见 安装 Logtail(Linux 系统) 安装 Logtail(Windows 系统)

    重要

    请确保用于安装 Logtail 的服务器可连接目标 MySQL 数据库。

  • MySQL 数据库中,设置白名单为 Logtail 所在服务器的 IP 地址。

    例如 RDS MySQL 数据库的白名单设置,请参见 设置 IP 白名单

原理

Logtail 根据 Logtail 采集配置定期执行指定的 SELECT 语句,将查询结果作为数据上传到日志服务。

Logtail 获取到查询结果时,会将结果中的 CheckPoint 字段保存到本地。当下次执行 SELECT 语句时,会将上一次保存的 CheckPoint 带入到 SELECT 语句中,以此实现增量数据采集。

重要

开启 CheckPoint 时,需要在 SELECT 语句中对 CheckPoint 字段进行排序,否则会造成数据重复或其他问题。

image

功能

  • 支持 MySQL 数据库的查询结果。

  • 支持分页设置。

  • 支持时区设置。

  • 支持超时设置。

  • 支持保存 CheckPoint 状态。

  • 支持 SSL。

  • 支持限制每次最大采集数量。

应用场景

  • 根据数据中的自增 ID 或时间等标识采集增量数据。

  • 根据筛选条件自定义同步。

操作步骤

  1. 登录 日志服务控制台

  2. 接入数据 区域,选择 MySQL 查询结果-插件

  3. 选择目标 Project Logstore,单击 下一步

  4. 机器组配置 页面,配置机器组。

    1. 根据实际需求,选择使用场景和安装环境。

      重要

      无论是否已有机器组,都必须根据实际需求正确选择使用场景和安装环境,这将影响后续的页面配置。

    2. 确认目标机器组已在 应用机器组 区域,单击 下一步

      已有机器组

      源机器组 列表选择目标机器组。

      image

      没有可用机器组

      单击 创建机器组 ,在 创建机器组 面板设置相关参数。机器组标识分为 IP 地址 用户自定义标识 ,更多信息请参见 创建用户自定义标识机器组(推荐) 创建 IP 地址机器组

      重要

      创建机器组后立刻应用,可能因为连接未生效,导致心跳为 FAIL ,您可单击 重试 。如果还未解决,请参见 Logtail 机器组无心跳 进行排查。

  5. 数据源设置 页签中,设置 配置名称 插件配置 ,然后单击 下一步

    您可以通过表单配置方式或 JSON 配置方式完成数据源设置。更多信息,请参见 Logtail 配置详情

  6. 创建索引 预览数据 ,然后单击 下一步 。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击 自动生成索引 ,日志服务将自动生成字段索引。更多信息,请参见 创建索引

    重要

    如果需要查询日志中的所有字段,建议使用全文索引。如果只需查询部分字段、建议使用字段索引,减少索引流量。如果需要对字段进行分析(SELECT 语句),必须创建字段索引。

  7. 单击 查询日志 ,系统将跳转至 Logstore 查询分析页面。
    您需要等待 1 分钟左右,待索引生效后,才能在 原始日志 页签中,查看已采集到的日志。更多信息,请参见 查询和分析日志

Logtail 配置详情

您可以通过表单配置方式或 JSON 配置方式完成数据源设置。

表单配置方式

数据源设置 步骤中,完成如下配置。

参数

说明

配置名称

Logtail 配置名称。

MySQL 地址

MySQL 数据库地址。例如 rm-****.mysql.rds.aliyuncs.com

数据库用户名

登录 MySQL 数据库的用户名称。

数据库密码

登录 MySQL 数据库的用户密码。

如果安全需求较高,建议将用户名称和密码配置为 xxx ,待采集配置同步至本地机器后,在本地文件 /usr/local/ilogtail/user_log_config.json 中找到对应配置进行修改。具体操作,请参见 修改本地配置

重要

如果您在控制台上修改了此参数,同步至本地后会覆盖本地的配置。

数据库名称

MySQL 数据库名称。

连接数据库时间

连接 MySQL 数据库的超时时间,单位:ms。

查询超时时间

读取 MySQL 查询结果的超时时间,单位:ms。

SELECT 语句

SELECT 语句。

选中 是否使用 CheckPoint 时, SELECT 语句 中的 where 条件中必须包含 CheckPoint 列( CheckPoint 列名称 中设置的值)。支持使用半角问号(?)表示替换符,与 CheckPoint 列配合使用。

重要

例如设置 CheckPoint 列名称 id ,设置 CheckPoint 列的初始值 0,设置 SELECT 语句 SELECT * FROM xxx WHERE ID > ? 。则每次采集后,系统会保存最后一条数据的 ID 作为 Checkpoint,下次采集时查询语句中的半角问号(?)将被替换为该 Checkpoint 对应的 ID。

是否使用 limit 分页

选中该选项后,将使用 Limit 分页。

建议使用 Limit 进行分页。选中 是否使用 limit 分页 后,进行 SQL 查询时,系统将自动在 SELECT 语句中追加 LIMIT 语句。

分页大小

分页大小。

选中 是否使用 limit 分页 后,需要配置。

同步最大记录数

每次同步最大记录数。默认值为 0 ,表示无限制。

是否使用 CheckPoint

选中该选项后,将使用 CheckPoint。CheckPoint 可作为下次采集数据的起点,实现数据增量采集。

CheckPoint 列名称

CheckPoint 列名称。

选中 是否使用 CheckPoint 后,需要配置。

警告

该列的值必须递增,否则可能会出现数据漏采集问题(每次查询结果中的最大值将作为下次查询的输入)。

CheckPoint 列的数据类型

CheckPoint 列的数据类型,支持 int time。int 类型的内部存储为 int64,time 类型支持 MySQL date、datetime、time 类型。

选中 是否使用 CheckPoint 后,需要配置。

CheckPoint 列的初始值

CheckPoint 列的初始值。

选中 是否使用 CheckPoint 后,需要配置。

每次分页时是否保存一次

选中该选项,则每次分页时保存一次 CheckPoint。否则,每次同步完成后保存一次 CheckPoint。

同步时间

同步间隔,单位:ms。

JSON 配置方式

插件配置 中填写您的 Logtail 配置信息,示例如下所示。

  • inputs 为数据源配置,必选项。

    重要

    一个 inputs 中只允许配置一个类型的数据源。

  • processors 为处理配置,用于解析数据。可选项,您可以配置一种或多种处理方式。

    如果当前的 inputs 配置无法满足日志解析需求,您可以在 插件配置 中添加 processors 配置,即添加 Logtail 插件处理数据。例如提取字段、提取日志时间、脱敏数据、过滤日志等。更多信息,请参见 使用 Logtail 插件处理数据

{
  "inputs": [
      "type": "service_mysql",
      "detail": {
        "Address": "************.mysql.rds.aliyuncs.com",
        "User": "****",
        "Password": "*******",
        "DataBase": "****",
        "Limit": true,
        "PageSize": 100,
        "StateMent": "select * from db.VersionOs where time > ?",
        "CheckPoint": true,
        "CheckPointColumn": "time",
        "CheckPointStart": "2018-01-01 00:00:00",
        "CheckPointSavePerPage": true,
        "CheckPointColumnType": "time",
        "IntervalMs": 60000
}

参数

类型

是否必选

说明

type

string

数据源类型,固定为 service_mysql

Address

string

MySQL 地址。例如 rm-****.mysql.rds.aliyuncs.com

默认值为 127.0.0.1:3306

User

string

用于登录 MySQL 数据库的用户名称。默认值为 root

Password

string

用于登录 MySQL 数据库的用户密码。默认值为空。

如果安全需求较高,建议将用户名称和密码配置为 xxx ,待采集配置同步至本地机器后,在本地文件 /usr/local/ilogtail/user_log_config.json 中找到对应配置进行修改。具体操作,请参见 修改本地配置

重要

如果您在控制台上修改了此参数,同步至本地后会覆盖本地的配置。

DataBase

string

MySQL 数据库名称。

DialTimeOutMs

int

连接 MySQL 数据库超时时间,默认值为 5000,单位:ms。

ReadTimeOutMs

int

读取 MySQL 查询结果的超时时间,默认值为 5000,单位:ms。

StateMent

string

SELECT 语句。

设置 CheckPoint true 时, Statement SELECT 语句的 where 条件中必须包含 CheckPoint 列( CheckPointColumn )。支持使用半角问号(?)表示替换符,与 CheckPoint 列配合使用。

例如设置 CheckPointColumn id ,设置 CheckPointStart 0 ,设置 StateMent SELECT * from ... where id > ? 。则每次采集后,系统会保存最后一条数据的 ID 作为 Checkpoint,下次采集时查询语句中的半角问号(?)将被替换为该 Checkpoint 对应的 ID。

Limit

boolean

是否使用 Limit 分页。

  • true :使用。

  • false (默认值):不使用。

建议使用 Limit 进行分页。设置 Limit true 后,进行 SQL 查询时,系统将自动在 SELECT 语句中追加 LIMIT 语句。

PageSize

int

分页大小, Limit true 时必须配置。

MaxSyncSize

int

每次同步最大记录数。默认值为 0 ,表示无限制。

CheckPoint

boolean

是否使用 CheckPoint。

  • true :使用。

  • false (默认值):不使用。

CheckPoint 可作为下次采集数据的起点,实现数据增量采集。

CheckPointColumn

string

CheckPoint 列名称。

设置 CheckPoint true 时,需要配置。

警告

该列的值必须递增,否则可能会出现数据漏采集问题(每次查询结果中的最大值将作为下次查询的输入)。

CheckPointColumnType

string

CheckPoint 列的数据类型,支持 int time。int 类型的内部存储为 int64,time 类型支持 MySQL date、datetime、time 类型。

设置 CheckPoint true 时,需要配置。

CheckPointStart

string

CheckPoint 列的初始值。

设置 CheckPoint true 时,需要配置。

CheckPointSavePerPage

boolean

是否每次分页时保存一次 CheckPoint。

  • true (默认值):每次分页时保存一次 CheckPoint。

  • false :每次同步完成后保存一次 CheckPoint。

IntervalMs

int

同步间隔,默认值为 60000,单位:ms。

修改本地配置

如果您没有在 插件配置 中输入真实的 Address、User、Password 等信息,可以在采集配置下发到本地后进行手动修改。

Linux 系统

  1. 登录 Logtail 所在服务器。

  2. 打开 /usr/local/ilogtail/user_log_config.json 文件,找到 service_mysql 关键字,修改 Address User Password 等字段。

  3. 执行以下命令重启 Logtail。

    sudo /etc/init.d/ilogtaild stop; sudo /etc/init.d/ilogtaild start

Windows 系统

  1. 登录 Logtail 所在服务器。

  2. 打开 C:\Program Files\Alibaba\Logtail\user_log_config.json 文件,找到 service_mysql 关键字,修改 Address User Password 等字段。

    Windows 64 位操作系统和 Windows 32 位操作系统文件位置不同,具体请参见 文件路径

  3. 执行以下命令重启 Logtail。

    1. 选择 开始 > 控制面板 > 管理工具 > 服务

    2. 服务 对话框中,选择对应的服务。

      • 如果是 0.x.x.x 版本,选择 LogtailWorker 服务。

      • 如果是 1.0.0.0 及以上版本,选择 LogtailDaemon 服务。

    3. 右键选择对应的操作,包括 启动 停止 重新启动

问题排查

使用 Logtail 采集日志后,如果预览页面或查询页面无数据,您可以参见 Logtail 采集日志失败的排查思路 进行排查。

数据库表和日志样例

数据库表样例和 Logtail 采集到的日志样例如下所示。

  • 数据库表样例

    CREATE TABLE `VersionOs` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
      `time` datetime NOT NULL,
      `version` varchar(10) NOT NULL DEFAULT '',
      `os` varchar(10) NOT NULL,
      `count` int(11) unsigned NOT NULL,
      PRIMARY KEY (`id`),
      KEY `timeindex` (`time`)
    )
  • 日志样例

    "count":  "4"  
    "id:  "721097"  
    "os:  "Windows"  
    "time:  "2022-08-25 13:00:00"  
    "version":  "1.3.0"