mysql优化锁怎么解锁 mysql优化命令

MySQL锁表和解锁操作

1、确定mysql有锁表的情况则使用以下命令查看锁表进程

创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目成都做网站、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元桥西做网站,已为上家服务,为桥西各地企业和个人服务,联系电话:18982081108

2、杀掉查询结果中已经锁表的trx_mysql_thread_id

扩展:

1、查看锁的事务

2、查看等待锁的事务

3、查询是否锁表:

4、查询进程

Mysql锁表解锁

-- 查询是否锁表

show OPEN TABLES ;

-- 查询进程

show processlist ;

-- 查询到相对应的进程,然后杀死进程

kill id; -- 一般到这一步就解锁了

-- 查看正在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

-- 查看等待锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

-- 解锁表

UNLOCK TABLES;

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的最大连接数据限制了,然后新的连接就直接被拒,得到连接数过多的消息。

因为mysql配置文件使用的之前的配置文件,当时跟web同服务器,所以不存在这个问题。

这也正好解释了为什么phpMyAdmin里看mysqld状态时,有很多失败的连接,它们应该就是因反解析失败而被拒的。

参考资料

MySQL解锁.壹聚教程[引用时间2018-1-21]


当前文章:mysql优化锁怎么解锁 mysql优化命令
网页地址:http://myzitong.com/article/dojisgj.html