在MySQL數據庫中,有時候會出現表被鎖住無法操作的情況。這時候我們需要查看哪個進程鎖住了這張表,才能解決該問題。
使用MySQL提供的內置工具可以方便地查看到當前所有正在執行的進程和線程,并且能夠查詢和檢視每個進程或線程的詳細信息,也就是說可以很容易的找到占用表的進程。具體的操作如下:
$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 8.0.27 MySQL Community Server - GPL mysql>show processlist; +------+-----------------+------------------+---------------+---------+------+----------------------+ | Id | User | Host | db | Command | Time | State | +------+-----------------+------------------+---------------+---------+------+----------------------+ | 2815 | system user | | NULL | Daemon | NULL | Waiting for next activation | | 2814 | system user | | NULL | Daemon | NULL | Waiting for next activation | | 2813 | system user | | NULL | Daemon | NULL | Waiting for next activation | | 2812 | system user | | NULL | Daemon | NULL | Waiting for next activation | | 2811 | system user | | NULL | Daemon | NULL | Waiting for next activation | | 2736 | root | localhost | employees | Query | 0 | executing | | 2836 | root | localhost | | Query | 0 | starting | | 2837 | root | localhost | | Query | 0 | Sleep | +------+-----------------+------------------+---------------+---------+------+----------------------+ 8 rows in set (0.00 sec)
可以看到,執行了show processlist命令之后,我們就能夠看到當前所有正在執行的進程和線程了。其中,db顯示該進程當前正在操作的數據庫,而State則顯示進程當前的狀態。如果一個進程的狀態一直為“executing”,則說明該進程一直在占用某張表。
如果要查看某個正在占用的進程或者線程的詳細信息,可以使用如下命令:
mysql>select * from information_schema.processlist where id=進程id;
其中,進程id為查看到的某個進程的ID,會顯示該進程執行的具體SQL語句等詳細信息。
下一篇css bind