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_TRX\G

*************************** 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM