Python MQTT WebSocket 连接:配置、踩坑和修复
记录用 paho-mqtt 库连接 MQTT WebSocket 时遇到的版本兼容、DNS、端口等问题及解决办法。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-07-11 10:15:47 MySQL Too many connections 数据库连接泄露 故障排查
线上收到报警,数据库报 Too many connections,应用页面直接挂了。这种问题一般就两个方向:要么连接数真不够用,要么代码有地方没释放连接。
上来先确认是不是真到了上限。连上 MySQL 执行:
SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Threads_connected';
如果 Threads_connected 已经和 max_connections 贴得很近,那确实被打满了。这时候可以先应急调大一点,让业务恢复。
临时生效,重启后会丢:
SET GLOBAL max_connections = 500;
但光提上限没用,得看都是谁占着连接。
用 SHOW PROCESSLIST 看一眼,一堆 Sleep 状态而且同一个用户、同一台机器过来的,基本就是连接池没回收或者长连接忘了关。统计一下更直观:
SELECT user, host, COUNT(*) AS conn_count
FROM information_schema.processlist
GROUP BY user, host
ORDER BY conn_count DESC;
哪个应用对应的用户连接数飙得最高,查那个应用的代码或连接池配置。这里其实容易踩坑:有些框架的连接池默认不设超时,或者代码里在循环里 new 连接却不 close,本地测不出来,一上量就炸。
如果只是连接数设置偏小,确实可以把 max_connections 改大并持久化。找到 my.cnf(或 my.ini),在 [mysqld] 下面加上:
[mysqld]
max_connections = 500
然后重启 MySQL 生效。重启命令:
sudo systemctl stop mysql
sudo systemctl start mysql
但很多场景下,把空闲连接尽快踢掉比无限堆上限更有用。
wait_timeout 和 interactive_timeout 控制非交互和交互连接的空闲存活时间,默认值经常是 28800(8 小时),线上完全可以缩到几分钟。
先看看当前值:
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';
临时调整:
SET GLOBAL wait_timeout = 300;
SET GLOBAL interactive_timeout = 300;
同样,要永久生效就写进配置文件里。这两个参数经常一起调,一个是针对非交互式连接,另一个针对交互式连接,一般线上两个设成一样就行。
说到连接泄漏,PHP 里用 mysqli 的话,别忘了显式调用 close(),或者依赖脚本结束自动释放——不过显式关掉更靠谱。下面是一段正确管理连接的示例:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 执行查询...
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
} else {
echo "0 结果";
}
// 关闭连接
$conn->close();
?>
后期做监控,可以定期采集 max_connections 和历史上最大的并发连接数 Max_used_connections,这个值在 SHOW STATUS 里能拿到。算一下比例:Max_used_connections / max_connections * 100%,理想状态在 85% 左右。
如果远低于这个数,说明 max_connections 设大了,浪费资源;接近 100% 就说明峰值快扛不住了,要么优化查询,要么扩连接数。
这套排查流程走下来,大部分 Too many connections 的问题都能定位到原因。不是代码没关连接,就是超时时间太长,再不然就是连接数确实配低了。
硬调连接数不查泄露,早晚还得再报一次。
记录用 paho-mqtt 库连接 MQTT WebSocket 时遇到的版本兼容、DNS、端口等问题及解决办法。
记录一次 Windows 下 MySQL 服务启动报系统找不到指定文件的排查过程。
LEFT()函数的常见用法、边界情况,以及和其他截取函数的简单对比,顺便聊聊线上可能踩的坑。
记录 datetime 字段定义、插入、格式化查询以及 Java 端类型映射、时区等问题,避免线上踩坑。
在处理海量MySQL数据时,如何高效利用REPLACE函数进行字符串替换,避免性能瓶颈?本文不仅详述REPLACE的强大功能,更聚焦于其在大型数据库操作中的性能表现与优化技巧。我们将深入探讨分批执行、索引影响、事务管理等高级策略,旨在帮助DBA和开发者在实现数据清洗、格式统一的同时,最大限度保障系统性能,确保数据操作的顺畅与高效。