Proxysql故障:9001: Max connect timeout 错误。

2,928 阅读1分钟

又一次现场同时反馈,现场项目中的组件报错

{
  "error": "Error 9001: Max connect timeout reached while reaching hostgroup 10 after 10000ms", 
  "code": 2,
  "details"" []
}

网上查了下SQL 9001的错误,众说纷纭,有几个比较实用的解决办法,但是可能无法应用在生产环境。

  • 重启Proxy
  • 单节点运行Proxy
  • Proxy没有加载MGT节点,需要重新load mysql servers to runtime;

为什么会出现 9001 错误?

如果 mysql_servers.max_connections 达到最大,一些连接一直等待直到达到 mysql-connect_timeout_server_max ,然后proxysql回抛出 SQL 9001 错误。

因为整个平台中的MySQL部署方式是 [MariaDB Galera Cluster + Proxysql] 来实现的,看了下mysql和proxy的日志,发现。

排查了MySQL的最大连接数限制,发现MySQL的最大连接数是1000

MariaDB [mysql]> SHOW VARIABLES LIKE 'max_connections';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| max_connections   | 1000  |
+-------------------+-------+
1 row in set (0.001 sec)

Proxy配置的也是1000,并且MySQL分配给该服务的用户没有限制用户连接数

最后问了下infra的同事,了解到mysql配置中限制了exporter用户(负责监控的)连接数,需要修改下mysql对于监控用户的限制。

具体是修改MySQL user表中的数据

# 设置为0表示
Update mysql.user SET max_user_connections=0 WHERE User = 'xxx';