Mysql
在未登錄 MySQL 的情況下殺死程序
情況如下:
- 我在數據庫上執行了一個非常複雜的查詢,預計將在幾個小時內執行(伺服器配置不好,數據集很大)。此查詢正在使用表
tblA
- 在執行查詢時,應用程序 A(在伺服器上執行)執行
DROP TABLE tblA
。- 此 DDL 語句鎖定元數據,
tblA
因為表正在被另一個事務(我的查詢)使用。- 應用程序 B 進來並想要在 上執行更新
tblA
。DROP TABLE tblA
由於持有元數據鎖,更新語句不會執行。- 應用程序 B 是多執行緒的,並在
tblA
- 應用程序 B 一直這樣做,直到
max_connections
達到限制,並且Too Many Connection
每次嘗試連接到伺服器時都會收到錯誤消息。- 此刻,我用來執行查詢的應用程序 (HeidiSQL) 停止工作並崩潰。
- 我剛剛注意到與伺服器的所有連接都是通過本地主機的 Root 使用者進行的,因此無法登錄 MySQL 來終止 DDL 語句。
問題是:
有沒有辦法結束這一切而不必殺死或停止 MySQL 伺服器?
我已經嘗試殺死應用程序 A 和 B,但該程序仍保留在 MySQL 隊列中。聽起來我的查詢也不願意很快結束。
對於這樣的情況,有“一個額外的連接可用”。任何擁有
SUPER
priv(例如“root”)kill
的人都可以進入DROP
.但是,這樣做的先決條件是不要讓使用者和應用程序以“root”身份登錄。相反,他們應該有自己的登錄名,最好(出於安全原因)僅限於他們需要訪問的數據庫。
為“管理員”操作保留“root”,例如您在這種情況下需要的操作。
在 mysql 伺服器上嘗試“mysqladmin flush-hosts”。