使用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
步骤二:创建账号
在MySQL命令行中执行以下命令,创建一个账号
mysqld_exporter
。mysql> CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'password';
localhost
:允许连接的主机IP,可根据实际情况替换。mysqld_exporter
和password
是自定义的用户名和密码,可以根据实际情况进行替换。
验证(可选)
在命令行中执行以下命令,若查询到用户及对应主机信息,则用户
mysqld_exporter
创建成功。-- 从mysql.user表中查询用户信息 mysql> SELECT User,Host FROM mysql.user WHERE User = 'mysqld_exporter'; -- 查询结果 +-----------------+-----------+ | User | Host | +-----------------+-----------+ | mysqld_exporter | localhost | +-----------------+-----------+
步骤三:授权
在命令行中执行授权命令,对
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中的进程信息。
验证(可选)
在命令行中执行以下命令,可检查用户是否已被授予相应权限。
-- 查看用户持有权限 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 failed 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。