为Prometheus创建MySQL访问账号

使用Prometheus收集MySQL数据库监控数据时,需要创建一个供Prometheus使用的MySQL访问账号,并最小化授予只读权限。本文将以mysqld_exporter为例,为您演示创建的全部步骤。

示例说明

  • $mysql>为命令提示符,在输入命令时,请避免输入提示符。

  • #--为注释前缀,在输入命令时,请避免输入注释前缀及注释内容。

操作步骤

说明

MySQL 8.0版本之后禁止使用GRANT语句创建新用户,创建用户与授权操作需要分开执行。因此,本文示例将分为创建授权两个步骤。

MySQL 8.0版本之前的用户可以在登录账号后,参考步骤三:授权所示操作和注释,创建并授权账户。

步骤一:登录root账户或管理员账户

启动并登录MySQL,以root用户为例。

$ mysql -u root -p

# 在Enter password后输入root用户密码
Enter password: password

步骤二:创建账号

  1. MySQL命令行中执行以下命令,创建一个账号mysqld_exporter

    mysql> CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'password';
    • localhost:允许连接的主机IP,可根据实际情况替换。

    • mysqld_exporterpassword是自定义的用户名和密码,可以根据实际情况进行替换。

  2. 验证(可选)

    在命令行中执行以下命令,若查询到用户及对应主机信息,则用户mysqld_exporter创建成功。

    -- 从mysql.user表中查询用户信息
    mysql> SELECT User,Host FROM mysql.user WHERE User = 'mysqld_exporter';
    
    -- 查询结果
    +-----------------+-----------+
    | User            | Host      |
    +-----------------+-----------+
    | mysqld_exporter | localhost |
    +-----------------+-----------+

步骤三:授权

  1. 在命令行中执行授权命令,对mysqld_exporter账户进行最小化授权。

    -- 添加对所有表的主从服务器状态检查权限和进程查看权限。
    -- 直接使用GRANT语句创建新用户时,建议在末尾添加[IDENTIFIED BY 'password']以设置用户密码。
    mysql> GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqld_exporter'@'localhost';
    
    -- 添加performance_schema.* 表的读取权限。
    mysql> GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost';
    
    -- 重新加载权限表,使账号授权生效。
    mysql> FLUSH PRIVILEGES;
    • REPLICATION CLIENT:授权语句,允许账户检查主/从服务器状态。

    • PROCESS:授权语句,允许账户查看MySQL中的进程信息。

  2. 验证(可选)

    在命令行中执行以下命令,可检查用户是否已被授予相应权限。

    -- 查看用户持有权限
    mysql> SHOW GRANTS FOR 'mysqld_exporter'@'localhost';
    
    -- 查询结果
    +---------------------------------------------------------------------------+
    | Grants for mysqld_exporter@localhost                                      |
    +---------------------------------------------------------------------------+
    | GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqld_exporter'@'localhost' |
    | GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost'     |
    +---------------------------------------------------------------------------+

常见问题及解决方案

  • Operation CREATE USER failde for 'usernam'@'hostname'

    这个错误表示创建用户失败,因为已经存在具有相同名称的用户。要解决此问题,可以首先尝试删除现有用户,然后再创建新的用户。删除用户命令:

    mysql> DROP USER 'username'@'hostname';
  • Access denied for user 'username'@'hostname'(using password: YES/NO)

    这个错误表示MySQL服务器拒绝了连接尝试,因为提供的用户名或密码不正确。要解决此问题,可以检查使用的用户名和密码是否正确,并确保已为用户授予适当的权限。

  • Can't find any matching row in the user table

    这个错误表示使用的用户名或主机名在MySQL权限列表中不存在。要解决此问题,可以检查是否有拼写错误,并确保正确地输入了主机名。如确认拼写无误可尝试使用FLUSH PRIVILEGES命令刷新权限列表。

相关文档

使用Prometheus收集MySQL数据库监控数据的具体操作,请参考如何使用Prometheus监控MySQL