MySQL数据库 表被锁的解决办法

客户提供的表被锁截图

1.可以通过控制台登陆DMC界面,将没有执行完的线程Kill掉,具体操作如下:
2.可以通过命令行的方式kill掉线程

Mysql -u <账号> -P  <端口> -p  <密码> -h   -e "show processlist" | grep -i "Locked" #查看锁表的线程
Mysql -u <账号> -P  <端口> -p  <密码> -h   -e “kill thread_id”

或者通过shell脚本的方式将所有的锁表进程全部杀掉:

Mysql -u <账号> -P  <端口> -p  <密码> -h   -e "show processlist" | grep -i "Locked" >> locked_log.txt

for line in cat locked_log.txt | awk '{print $1}' 
do  
   echo "kill $line;" >> kill_thread_id.sql 
done

3: 如果客户说不用考虑数据的问题,我们也可以重启数据库, 虽然重启也能当时解锁,但是还会出现锁表情况,制标不治根 建议客户: SQL语句中不要使用太复杂的关联多表的查询;使用“执行计划”对SQL语句进行分析,对于有全表扫描的SQL语句,建立相应的索引进行优化。

你可能感兴趣的:(MySQL数据库 表被锁的解决办法)