MySQL进程杀掉后是killed

为了减少数据库磁盘占用,使用delete + where语句清理表数据,但是这样删除数据后也无法释放磁盘空间,而直接用delete和truncate表数据是可以清理磁盘的。

原因可参考https://www.cnblogs.com/renzhicai/p/8857480.html

为了清理磁盘计划先用delete + where清理表数据;在用optimize table释放磁盘空间,但是这样都锁表。所以计划关闭session sql_bin_log逐个slave执行。

由于delete删除数据量特别大,执行时间特别长造成主从复制延迟,就手欠的kill掉MySQL processlist进程。但是发现进程是killed状态,就重启MySQL服务。

重启后show processlist出现killed是没有 了,但是发现它回滚,而且trx_mysql_thread_id为0是没法kill掉的

SELECT * FROM information_schema.INNODB_TRXG

*************************** 1. row ***************************
                    trx_id: 715674773
                 trx_state: ROLLING BACK
               trx_started: 2018-09-24 23:17:30
     trx_requested_lock_id: NULL
          trx_wait_started: NULL
                trx_weight: 540574
       trx_mysql_thread_id: 0
                 trx_query: NULL
       trx_operation_state: NULL
         trx_tables_in_use: 0
         trx_tables_locked: 1
          trx_lock_structs: 3
     trx_lock_memory_bytes: 1136
           trx_rows_locked: 2
         trx_rows_modified: 540571  #代表锁影响的行数,当数值为0时,锁将会释放
   trx_concurrency_tickets: 0
       trx_isolation_level: REPEATABLE READ
         trx_unique_checks: 1
    trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
          trx_is_read_only: 0
trx_autocommit_non_locking: 0
1 row in set (0.00 sec)

下次遇到这种情况,还是

1、先确定执行的sql是否为最优 ,

2、在slave不影响业务上执行,用screen命令执行,执行过程不要终止。因为执行不成功会回滚。执行时间更长。

锁表查看命令

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

参考

MySQL kill进程后出现killed死锁问题 - xibuhaohao - 博客园 https://www.cnblogs.com/xibuhaohao/p/11867024.html

(3条消息)mysql kill进程后出现killed死锁问题_m0_37827567的博客-CSDN博客 https://blog.csdn.net/m0_37827567/article/details/82979767

(3条消息)mysql kill进程后出现killed死锁问题(续)_m0_37827567的博客-CSDN博客 https://blog.csdn.net/m0_37827567/article/details/91044989

原文地址:https://www.cnblogs.com/paul8339/p/13565027.html