MYSQL锁死怎么办?通过代码解锁 。
代码如下
1set global max_connections=4000;
增加允许的最大连接数,先让前台网站可以正常工作 。
回过头google :mysql unauthenticated user
果然,遇到此类问题的人很多,问题在于mysql的反向ip地址解析,配置参数里加上skip-name-resolve就可以 。
补充
一、查看进程运行情况(会话1)
代码如下
1mysql select id,user,host,db,command,time,state from processlist a;+—-+——+—————–+——————–+———+——+———–+| id | user | host | db | command | time | state|+—-+——+—————–+——————–+———+——+———–+| 40 | root | localhost:14046 | information_schema | Query | 0 | executing|| 39 | root | localhost:13992 | chf | Sleep | 251 ||| 38 | root | localhost:13991 | chf | Sleep | 251 ||+—-+——+—————–+——————–+———+——+———–+3 rows in set (0.00 sec)
二、构造表被锁现象
1)锁住表(会话1)
代码如下
1mysqlLOCK TABLES chf.disc02 READ;或者–LOCK TABLES chf.disc02 WRITE;
2)执行dml操作(会话2)
代码如下
1mysqldelete from chf.disc02 limit 1;–会话处于卡死状态
3)查询进程运行情况(会话1)
代码如下
1mysql select id,user,host,db,command,time,state from processlist a;+—-+——+—————–+——————–+———+——+———–+| id | user | host | db | command | time | state|+—-+——+—————–+——————–+———+——+———–+| 41 | root | localhost:14358 | chf | Query | 5 | Locked|| 40 | root | localhost:14046 | information_schema | Query | 0 | executing|| 39 | root | localhost:13992 | chf | Sleep | 343 ||| 38 | root | localhost:13991 | chf | Sleep | 343 ||+—-+——+—————–+——————–+———+——+———–+
4 rows in set (0.01 sec)
说明:发现进程id为41的进程状态为Locked
三、解锁操作
1)删掉被锁进程(会话1)
代码如下
1mysql kill 41;
出现现象(会话2)
ERROR 2013 (HY000): Lost connection to MySQL server during query
2)查看进程(会话1)
代码如下
1mysql select id,user,host,db,command,time,state from processlist a;+—-+——+—————–+——————–+———+——+———–+| id | user | host | db | command | time | state|+—-+——+—————–+——————–+———+——+———–+| 40 | root | localhost:14046 | information_schema | Query | 0 | executing|| 39 | root | localhost:13992 | chf | Sleep | 298 ||| 38 | root | localhost:13991 | chf | Sleep | 298 ||+—-+——+—————–+——————–+———+——+———–+3 rows in set (0.01 sec)
四、批量解锁
代码如下
1mysql select concat(‘kill ‘,id,’;') kill_process from processlist a where a.state=’Locked’;+————–+| kill_process |+————–+| kill 43; || kill 42; |+————–+2 rows in set (0.01 sec)
Note:
1)可以使用show processlist查看当前用户连接
如果是root帐号,你能看到所有用户的当前连接 。如果是其它普通帐号,只能看到自己占用的连接 。show processlist;只列出前100条,如果想全列出请使用show full processlist;
2)在构造锁的会话中,使用unlock tables;也可以解锁
总结一下原因,大概如下:
因为mysql默认会根据客户端的ip地址反向解析 , 用于用户登录授权之用 。不过正常情况下,很少会有人这样用 。ip地址反向解析是很慢的,尤其是高负荷的mysql,每秒种几百次甚至更高的请求,这个请求压到本地的dns服务器上,dns服务器说不定会怀疑你在恶意请求 , 然后不理你了,然后这些登录请求就挂在那里,后面的连接还持续,然后越积越多,然后就达到mysql的最大连接数据限制了 , 然后新的连接就直接被拒 , 得到连接数过多的消息 。
推荐阅读
- 芯象直播教程,芯象直播助手怎么用
- html5数字类型,html5元素类型及特点
- java小说爬虫安卓,java爬虫的书籍
- 苹果pdf怎么转语音,iphone的pdf怎么转word
- go语言写防注入 golang 注入
- gis在生活中应用的事例,gis在社会中的应用
- chatgpt训练一次费用,ChatGPT训练一次费用
- 梗下载,四合院开局傻柱教训了棒梗下载
- php输入文字存到数据库 php输入文字存到数据库的方法