暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片
MYSQL 连接全部打满后的解决方案, 包含5.7 8.pdf
130
6页
7次
2024-03-29
免费下载
MYSQL 连接全部打满后的解决方案, 包含5.7 8.0 (外加一个招
聘信息)
原创 carol11 AustinDatabases 今天
收录于话题
#数据库 18
#mysql 24
MYSQL 的连接被打满,然后就无法提供服务了, 那大部分会有几种解决的方案和方法.
1 监控要到位,你的MYSQL到底MAX_CONNECTIONS是多少, 超过多少连接数就需要告警了,这是一个问题.
然这只能提前预知危险,但不能阻止危险.
2 基于MYSQL 的连接打满后的连接清理的问题
这里分两个部分说
1 MYSQL 5.X
2 MYSQL 8
1 MYSQL 5.X 如何处理这样的问题
首先要确认的是你的MYSQL 的版本, 如果你的MYSQL 5.X 是 percona 或者mariadb的版本,那么OK,下面的
方法适合你, 如果你用的是官方的版本,(俗称社区版),那不好意思,自己想办法去吧.
实际上我们只需要在MYSQL 的配置文件中添加另个参数
extra_max_connections = 3
extra_port=3307
为了测试我们将MYSQL的 MAX_CONNECTIONS 变化到 1
我们开了一个SESSION 又开了一个 报错, 这个是自然的, TOO MANY CONNECTIONS
我们将参数打入到MY.CNF 并重启动数据库
我们通过3307 的预设的端口进行访问是可以的, 这个方法可以弥补这个连接打满的问题
后面我们可以通过直接执行下面的存储过程,将应用的连接都KILL 掉,达到治标的解决问题的方案.
DELIMITER $
CREATE PROCEDURE kill_process_proc()
BEGIN
DECLARE kill_done int;
DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;
BEGIN
DECLARE cursor_ID int;
DECLARE cursor_i CURSOR FOR
SELECT
id
FROM information_schema.PROCESSLIST
WHERE USER not in ('root','sys','repl','proxysql','mha','event_scheduler')
AND ID != CONNECTION_ID();
OPEN cursor_i;
read_loop:
LOOP
FETCH cursor_i INTO cursor_ID;
KILL CONNECTION cursor_ID;
IF kill_done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cursor_i;
END;
END$
DELIMITER ;
以上的脚本是验证过的.
那么MYSQL 官方版本如何解决这个问题, 实际上在MYSQL 8.014这个版本提供了administrative connection
port 这个功能.
of 6
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。