为了减少数据库磁盘占用,使用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_TRX\G*************************** 1. row ***************************trx_id:715674773trx_state: ROLLING BACK
trx_started:2018-09-24 23:17:30trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight:540574trx_mysql_thread_id:0trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use:0trx_tables_locked:1trx_lock_structs:3trx_lock_memory_bytes:1136trx_rows_locked:2trx_rows_modified:540571#代表锁影响的行数,当数值为0时,锁将会释放
trx_concurrency_tickets:0trx_isolation_level: REPEATABLE READ
trx_unique_checks:1trx_foreign_key_checks:1trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched:0trx_is_read_only:0trx_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