Grafana MySQL监控大盘指标图趋势不连续分析

发布于:2025-06-22 ⋅ 阅读:(18) ⋅ 点赞:(0)

问题现象

通过benchmarksql对MySQL数据库做压测完发现Grafana关于该数据库的监控图趋势不连续,监控数据异常。

说明:Prometheus+mysql+expoter都通过容器运行

日志分析

检查了其他数据库节点跟主机节点趋势图均正常,排除 Prometheus 的问题,检查 expoter 日志发现有报错信息:

time=2025-06-12T06:18:52.960Z level=ERROR source=exporter.go:131 msg="Error opening connection to database" err="Error 1203 (42000): User root already has more than 'max_user_connections' active connections"

通过日志代码 1203 定位分析 MySQL 的用户 root 当前已经达到了最大连接数限制(max_user_connections),导致 mysqld_exporter 无法再建立新的连接来采集监控数据。

  • 查看活跃连接数

 MySQL [test1]> SHOW GLOBAL STATUS LIKE 'Threads_connected';

+-------------------+-------+

| Variable_name | Value |

+-------------------+-------+

| Threads_connected | 1900 |

+-------------------+-------+

1 row in set (0.01 sec)

  • 查看 MySQL 中 root 用户的最大连接数限制(MAX_USER_CONNECTIONS):

MySQL [test1]> SELECT 
        -> USER, 
        -> HOST, 
        -> MAX_USER_CONNECTIONS 
        -> FROM 
        -> mysql.user 
        -> WHERE 
        -> USER = 'root'; 
+------+-----------+----------------------+
| USER | HOST      | MAX_USER_CONNECTIONS | 
+------+-----------+----------------------+ 
| root | %         |                    0 | 
| root | localhost |                    0 | 
+------+-----------+----------------------+ 
2 rows in set (0.00 sec)
  1. MAX_USER_CONNECTIONS = 0 表示该用户使用的是 全局最大连接限制,而不是单独设置的值。

  2. 所以 root@%root@localhost 都会受到系统变量 max_user_connections 的限制。

  • 查看连接数设置

MySQL [test1]> show variables like '%connection%'; 
+-----------------------------------+----------------------+ 
| Variable_name                     | Value                | 
+-----------------------------------+----------------------+ 
| character_set_connection          | utf8mb3              | 
| collation_connection              | utf8_general_ci      | 
| connection_memory_chunk_size      | 8912                 | 
| connection_memory_limit           | 18446744073709551615 | 
| global_connection_memory_limit    | 18446744073709551615 | 
| global_connection_memory_tracking | OFF                  | 
| max_connections                   | 10000                | 
| max_user_connections              | 1900                 | 
| mysqlx_max_connections            | 100                  | 
+-----------------------------------+----------------------+
参数名 含义
max_connections 10000 MySQL 允许的最大连接数(包括所有用户)
max_user_connections 1900 单个用户允许的最大连接数(root 用户受此限制)

问题定位

  • root 用户没有设置独立的 MAX_USER_CONNECTIONS,所以受限于全局变量 max_user_connections = 1900

  • MySQL 整体最多支持 max_connections = 10000 个连接

  • 因此,一个用户最多只能建立 1900 个连接,超过这个数字就会报错

Error 1203: User root already has more than 'max_user_connections' active connections

解决办法

方案一:更换 mysqld_exporter 使用的数据库用户(推荐)

CREATE USER 'exporter'@'%' IDENTIFIED BY 'your_password';

GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';

FLUSH PRIVILEGES;

然后修改 mysqld_exporter 的配置文件 my.cnf 或启动参数,使用新用户连接:

[client] user=exporter password=your_password host=localhost port=3306

方案二:增加 root 用户的最大连接数限制

ALTER USER 'root'@'%' WITH MAX_USER_CONNECTIONS 10000; 
FLUSH PRIVILEGES;

复测

确认趋势图正常


网站公告

今日签到

点亮在社区的每一天
去签到