mysql 表被锁住,无法对表进行更新,删除操作

进入mysql,执行show processlist;

 查看Info中出现:Waiting for table metadata lock,该语句表示表被锁住,

如果想要解锁,查询当前没有提交的事务,执行:

select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx

发现有事务未提交

linux CLI: select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx\G

字段意义:

trx_state: 事务状态,一般为RUNNING
trx_started: 事务执行的起始时间,若时间较长,则要分析该事务是否合理
trx_mysql_thread_id: MySQL的线程ID,用于kill
trx_query: 事务中的sql

一般只要kill掉这些事务线程,DDL操作就不会Waiting for table metadata lock

kill 1354613(对应的trx_mysql_thread_id  )

可以通过 服务器监控 找到 trx_mysql_thread_id  右键 结束进程

杀掉这些事务线程后, 发现已经可以执行DDL语句了
 

调整锁超时阈值

lock_wait_timeout 表示获取metadata lock的超时(单位为秒),允许的值范围为1到31536000(1年)。 默认值为31536000。详见 https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_lock_wait_timeout 。默认值为一年!将其调整为30分钟

set session lock_wait_timeout = 1800;

set global lock_wait_timeout = 1800;

SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout'; -- 查询锁等待时间

SET session innodb_lock_wait_timeout = 500;
SET GLOBAL innodb_lock_wait_timeout=500;
SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout'; -- 永久设置,需重启mysql

SHOW GLOBAL VARIABLES LIKE 'lock_wait_timeout';

SET session lock_wait_timeout = 1800;
SET GLOBAL lock_wait_timeout =1800;
SHOW GLOBAL VARIABLES LIKE 'lock_wait_timeout'; -- 永久设置,需重启mysql

如果以上方法都不行,那可能是mysql有进程卡住了,可以用过下面的命令来解决:

查询mysql没有关闭的进程:tasklist| findstr "mysql"

杀掉mysql所有进程:taskkill/f /t /im mysqld.exe

mysql无法启动解决:

解决无法启动

A、先使用命令C:/Program files/mysql/bin/mysqladmin-u root -p shutdown来关闭MYSQL.

B、再在cmd命令行下,执行net start mysql启动mysql.

MySQL无法启动、无法停止各种解决方法总结_IT技术分享博客

猜你喜欢

转载自blog.csdn.net/k0307x1990y/article/details/126489322