Mysql

在未登錄 MySQL 的情況下殺死程序

  • February 11, 2019

情況如下:

  • 我在數據庫上執行了一個非常複雜的查詢,預計將在幾個小時內執行(伺服器配置不好,數據集很大)。此查詢正在使用表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 隊列中。聽起來我的查詢也不願意很快結束。

對於這樣的情況,有“一個額外的連接可用”。任何擁有SUPERpriv(例如“root”)kill的人都可以進入DROP.

但是,這樣做的先決條件是不要讓使用者和應用程序以“root”身份登錄。相反,他們應該有自己的登錄名,最好(出於安全原因)僅限於他們需要訪問的數據庫。

為“管理員”操作保留“root”,例如您在這種情況下需要的操作。

在 mysql 伺服器上嘗試“mysqladmin flush-hosts”。

引用自:https://dba.stackexchange.com/questions/104261