首页 > 数据库 >MySQL 锁表后快速解决方法 及 MySQL中的锁

MySQL 锁表后快速解决方法 及 MySQL中的锁

时间:2023-06-28 18:35:25浏览次数:29  
标签:information show 锁表后 线程 MySQL 快速 id schema

(1) 遇到锁表快速解决办法

  依次执行1-6步,运行第6步生成的语句即可。

  如果特别着急,运行 1 2 6 步 以及第6步生成的kill语句 即可。 

第1步 查看表是否在使用。

show open tables where in_use > 0 ;

如果查询结果为空。则证明表没有在使用。结束。

mysql>  show open tables where in_use > 0 ;
Empty set (0.00 sec)

 

如果查询结果不为空,继续后续的步骤。

mysql>  show open tables where in_use > 0 ;
+----------+-------+--------+-------------+
| Database | Table | In_use | Name_locked |
+----------+-------+--------+-------------+
| test     | t     |      1 |           0 |
+----------+-------+--------+-------------+
1 row in set (0.00 sec)

 

第2步 查看数据库当前的进程,看一下有无正在执行的慢SQL记录线程。

show processlist;
注意:show processlist 是显示用户正在运行的线程,需要注意的是,除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。 SHOW PROCESSLIST shows which threads are running. If you have the PROCESS privilege, you can see all threads. Otherwise, you can see only your own threads (that is, threads associated with the MySQL account that you are using). If you do not use the FULL keyword, only the first 100 characters of each statement are shown in the Info field.  

 

第3步 当前运行的所有事务

SELECT * FROM information_schema.INNODB_TRX;

 

第4步 当前出现的锁

SELECT * FROM information_schema.INNODB_LOCKs;

 

第5步 锁等待的对应关系

SELECT * FROM information_schema.INNODB_LOCK_waits;

看事务表INNODB_TRX,里面是否有正在锁定的事务线程,看看ID是否在show processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。
搜索的结果是在事务表发现了很多任务,这时候最好都kill掉。

 

第6步 批量删除事务表中的事务

这里用的方法是:通过information_schema.processlist表中的连接信息生成需要处理掉的MySQL连接的语句临时文件,然后执行临时文件中生成的指令。

 

SELECT concat('KILL ',id,';') 
FROM information_schema.processlist p 
INNER JOIN  information_schema.INNODB_TRX x 
ON p.id=x.trx_mysql_thread_id 
WHERE db='test';

记得修改对应的数据库名。

这个语句执行后结果如下:

 

mysql>  SELECT concat('KILL ',id,';')  FROM information_schema.processlist p  INNER JOIN  information_schema.INNODB_TRX x  ON p.id=x.trx_mysql_thread_id  WHERE db='test';
+------------------------+
| concat('KILL ',id,';') |
+------------------------+
| KILL 42;               |
| KILL 40;               |
+------------------------+
2 rows in set (0.00 sec)

 

 

执行结果里的两个kill语句即可解决锁表。 

 

摘自:https://weikeqin.com/2019/09/05/mysql-lock-table-solution/

 

标签:information,show,锁表后,线程,MySQL,快速,id,schema
From: https://www.cnblogs.com/todarcy/p/17512223.html

相关文章

  • 修改xampp中的mysql的密码报错,ERROR 1348 (HY000): Column 'Password' is not updatab
    xampp中的mysql(MariaDB)默认密码为空,进入mysql的bin目录,输入mysql-uroot-p,回车,无密码登录:查看所有数据库,选择mysql数据库:showdatabases;usemysql;使用update语句修改密码报错:ERROR1348(HY000):Column‘Password’isnotupdatable使用如下命令修改密码,并没有效果:使......
  • 【Linux基本指令(2)】几十条指令快速入手Linux_深入理解什么是指令
    本文思维导图:@TOCTips:*号匹配。功能:可以匹配任何东西。比如:可以看到,*号可以匹配任何东西,2.ctrl+c指令:终止因为程序或者指令异常,而导致我们无法进行指令输入。3.Linux下一切皆文件对于显示器来说,显示器文件有写方法(fwrite),有读方法(fread),但是读方法为空。对于键盘文件来说,键盘文......
  • 如何配置mysql主从复制中的二进制日志传输?
    要配置MySQL主从复制中的二进制日志传输,需要进行以下步骤:确保主服务器的二进制日志功能已启用:在主服务器的配置文件(通常是my.cnf或my.ini)中,找到并确认以下配置项已启用:log_bin=ONbinlog_format=ROWlog_bin表示启用二进制日志功能,binlog_format设置......
  • 使用宝塔webhook快速部署github仓库上的项目
    1、宝塔安装webhook点击添加Hook,输入如下命令。cd/www/wwwroot/project_namegitpull点击查看密钥,可以得到hooks的地址和密钥。2、Github上设置Webhooks填入上面得到的地址和密钥 3、为了git拉取免登录,需要在服务器安装ssh证书ssh-keygen-trsacat~/.ssh/id_r......
  • mysql连接另一台电脑机器数据库
    方法一:1.开放被访问机器端口:在windows防火墙的高级设置中添加新的入站规则,选择端口选项,然后选择TCP协议,端口输入3306,其他选项按照默认即可。2.假设192.168.1.3为服务器3.首先在ip为192.168.1.103的机子上能够ping通4.把两台电脑的IP设置在同一个网段,如:192.168.1.2,192.168.1.3......
  • Win10下,配置Mysql开启请求日志
    当我们在调试程序时,需要知道最终发给Mysql的是啥语句,这时候就要看Mysql收到的请求了。Mysql有四种日志:ErrorLog(错误日志),记录MySQL运行过程ERROR,WARNING,NOTE等信息,系统出错或者某条记录出问题可以查看ERROR日志。GeneralQueryLog(日常运行日志),记录MySQL运行中的每条请......
  • 武汉星起航:亚马逊卖家如何快速进入亚马逊市场并实现盈利
    亚马逊跨境电商市场提供了一个巨大的商机,让卖家可以将业务扩展到全球范围。然而,要在这个竞争激烈的市场中快速实现盈利并取得成功,卖家需要制定正确的策略和执行计划。武汉星起航将为亚马逊卖家提供一些宝贵的建议,帮助他们进入亚马逊跨境电商市场,并快速实现盈利。选择合适的市场:在......
  • docker部署指定版本的mysql client
    docker部署mysqlclientdockerpullmysql:8.0.31cat>>~/.bashrc<<'EOF'##--rm表示容器退出及销毁aliasmysql-cli="dockerrun-it--rmmysql:8.0.31mysql"EOFsource~/.bashrcmysql-cli-h123.123.123.123-P23306-uxxxxxxxx-pxx......
  • 【Oracle】使用PL/SQL快速查询出1-9数字
    【Oracle】使用PL/SQL快速查询出1-9数字简单来说,直接RecursiveWITHClauses在Oracle里面就直接使用WITHresult(参数)即可WITHresult(num)AS(SELECT1ASnumfromdualUNIONALLSELECTnum+1ASnumFROMresultWHEREnum<9)SELECTnumFROMresult......
  • Linux - 操作mysql数据库
    运行环境Ubuntu20.04虚拟机Mysql8.0APIlibmysqlclient-devgcc9.4.0一、准备工作1、在Ubuntu上准备mysql开发环境更新软件源sudoaptupdate安装libmysqlclient-dev,这个lib库是Linux下C/C++连接mysql的客户端sudoaptinstalllibmysqlclient-dev2、创建测试数据库......