MySQL kill指令使用指南

 更新时间:2020年12月28日 09:41:36   作者:掘金小勇士  
这篇文章主要介绍了MySQL kill指令的使用方法,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
KILL [CONNECTION | QUERY] processlist_id

在Mysql中每个连接都是单独线程运行,可以使用语句 KILL processlist_id statement.来终止语句执行。

KILL允许可选 CONNECTION或QUERY 修饰符:

  • KILL CONNECTION ,KILL与无修饰符相同 :终止与给定关联的连接 processlist_id,在终止该连接正在执行的任何语句之后。
  • KILL QUERY终止连接当前正在执行的语句,但保持连接本身不变。

使用show processlist 查看所有id

Kill 指令使用

如果我们应用执行SQL后,由于锁select for update或者数量太大,导致执行SQL卡在数据库,此时想取消该SQL怎么办?可以通过kill命令停止mysql线程或者是取消该SQL执行,此处需要到底是执行 kill threadId指令还是 kill query theadId指令?

kill与kill query 最大区别是是否取消该连接上执行的所有sql,即是否关闭该线程,如果关闭该线程即对应JDBC中statement关闭

-- 数据库锁住acctno=13记录 然后执行如下更新语句
update test set acctname ='12' where acctno=13

show processlist查看正在执行sql的线程id

如果想取消该SQL执行,可以使用命令 kill query 407 取消SQL执行,执行后407线程并不会消失,如果该连接上有SQL执行会继续执行;但是如果使用kill 407 ,407线程会消失。使用时需要注意二者差异。

线程id除了通过show processlist查看,也可以使用编程的方式获取threadId

 Connection connection = getConnection();
 ((MysqlConnection)connection).getSession().getThreadId();

Statement cancel方法

我们使用JDBC编程方式对数据库进行操作时,可以也可以使用Statement对象的cancel方法进行取消,Mysql驱动内部也是发送Kill query threadId 指令,Mysql驱动cancel方法源码

 public void cancel() throws SQLException {
    try {
      if (this.query.getStatementExecuting().get()) {
        if (!this.isClosed && this.connection != null) {
          JdbcConnection cancelConn = null;
          Object cancelStmt = null;

          try {
            HostInfo hostInfo = this.session.getHostInfo();
            String database = hostInfo.getDatabase();
            String user = StringUtils.isNullOrEmpty(hostInfo.getUser()) ? "" : hostInfo.getUser();
            String password = StringUtils.isNullOrEmpty(hostInfo.getPassword()) ? "" : hostInfo.getPassword();
            NativeSession newSession = new NativeSession(this.session.getHostInfo(), this.session.getPropertySet());
            newSession.connect(hostInfo, user, password, database, 30000, new TransactionEventHandler() {
              public void transactionCompleted() {
              }

              public void transactionBegun() {
              }
            });
            //驱动内部使用 KILL QUERY + threadId 指令取消
            newSession.sendCommand((new NativeMessageBuilder()).buildComQuery(newSession.getSharedSendPacket(), "KILL QUERY " + this.session.getThreadId()), false, 0);
            this.setCancelStatus(CancelStatus.CANCELED_BY_USER);
          } catch (IOException var13) {
            throw SQLExceptionsMapping.translateException(var13, this.exceptionInterceptor);
          } finally {
            if (cancelStmt != null) {
              ((Statement)cancelStmt).close();
            }

            if (cancelConn != null) {
              ((JdbcConnection)cancelConn).close();
            }

          }
        }

      }
    } catch (CJException var15) {
      throw SQLExceptionsMapping.translateException(var15, this.getExceptionInterceptor());
    }
  }

客户端工具执行

客户端工具执行SQL后取消执行,有些工具发 kill 命令 有些发kill query 指令,可以通过抓包工具验证下Navicat工具发送什么指令,抓包工具推荐Wireshark,很强大。

是kill 指令,对应的线程ID为407,也有部分工具是发送的kill query指令。

以上就是MySQL kill指令使用指南的详细内容,更多关于MySQL kill指令的资料请关注脚本之家其它相关文章!

相关文章

  • Mysql纵表转换为横表的方法及优化教程

    Mysql纵表转换为横表的方法及优化教程

    在应用中为了从不同的视图去分析数据,会使用不同的方案去查询数据库,横表和纵表的相互转换就是其中一个常见的情景,这篇文章主要给大家介绍了关于Mysql纵表转换为横表的相关资料,需要的朋友可以参考下
    2021-08-08
  • mssql转换mysql的方法小结

    mssql转换mysql的方法小结

    mssql转换mysql的方法小结,需要的朋友可以参考下。
    2011-03-03
  • (MariaDB)MySQL数据类型和存储机制全面讲解

    (MariaDB)MySQL数据类型和存储机制全面讲解

    下面小编就为大家分享一篇(MariaDB)MySQL数据类型和存储机制全面讲解,具有很的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • mysql8.0.27配置步骤以及注意事项

    mysql8.0.27配置步骤以及注意事项

    这篇文章主要给大家介绍了关于mysql8.0.27配置步骤以及注意事项的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • mysql5.7以上版本配置my.ini的详细步骤

    mysql5.7以上版本配置my.ini的详细步骤

    这篇文章主要为大家详细介绍了mysql5.7以上版本配置my.ini的详细步骤,文中每一步介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • MySQL事务的ACID特性以及并发问题方案

    MySQL事务的ACID特性以及并发问题方案

    这篇文章主要介绍了MySQL事务的ACID特性以及并发问题方案,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • MySQL定时备份数据库操作示例

    MySQL定时备份数据库操作示例

    这篇文章主要介绍了MySQL定时备份数据库操作,结合实例形式分析了MySQL定时备份数据库相关命令、原理、实现方法及操作注意事项,需要的朋友可以参考下
    2020-03-03
  • 分析一条sql的性能的标准总结

    分析一条sql的性能的标准总结

    在本篇文章里小编给各位分享了关于分析一条sql的性能的相关知识点总结内容,有兴趣的朋友们学习下。
    2019-07-07
  • MySQL中查询日志与慢查询日志的基本学习教程

    MySQL中查询日志与慢查询日志的基本学习教程

    这篇文章主要介绍了MySQL中查询日志与慢查询日志的基本学习教程,文中还提到了MySQL自带的Mysqldumpslow日志分析工具的使用,需要的朋友可以参考下
    2015-12-12
  • ubuntu 22.04安装mysql 8.0步骤与避坑指南

    ubuntu 22.04安装mysql 8.0步骤与避坑指南

    MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的关系数据库管理系统应用软件之一,这篇文章主要给大家介绍了关于ubuntu 22.04安装mysql 8.0步骤与避坑指南的相关资料,需要的朋友可以参考下
    2023-12-12

最新评论