为了减少数据库磁盘占用,使用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