2012-11-26 69 views
1

是否有可能通過查詢或其他方式確定在新連接嘗試創建之前是否有人已經在使用特定的MySQL數據庫?我有一個數據庫,我想一次限制一個用戶的數量。 (即使是每個用戶的一個實例,不一定是兩個不同的用戶一次)檢測當前是否正在使用MySQL數據庫

我的原因是爲了防止與該數據庫一起使用的多個程序實例之間的任何讀/寫衝突。由於程序的工作方式,如果在實例A中進行了更改,它們不會立即顯示在實例B中,直到數據刷新爲止。目前無法實時同步這些內容。在實例A完成之前阻止實例B啓動會更容易)在我的情況下,客戶端應用程序和數據庫都在本地主機上運行,​​但數據庫可能是遠程的。

可以這樣做嗎?如果是這樣,有沒有一種簡單的方法可以通過Qt來實現?

回答

1

在MySQL 5.0.3,可以limit the number of simultaneous connections to the server by an account。然後,您可以檢測帳戶是否正在使用,因爲額外的連接嘗試將被服務器拒絕(錯誤爲1203 ER_TOO_MANY_USER_CONNECTIONS或錯誤1226 ER_USER_LIMIT_REACHED)。

GRANT USAGE ON *.* TO 'usera'@'localhost' WITH MAX_USER_CONNECTIONS 1 

更多資源限制:

  • 要設置一個賬戶資源限制,使用GRANT聲明。提供一個WITH子句,將每個資源命名爲受限。 MAX_USER_CONNECTIONS是一個整數,表示帳戶同時連接的最大數量。

  • 要修改或刪除帳戶的限制,請在全局級別使用GRANT USAGE聲明(GRANT USAGE ON *.* TO 'usera'@'localhost' WITH ...)。這隻會修改指定的限制值,並使帳戶保持不變。

  • 「帳戶」對應於mysql.user表中的單個行。 'usera'@'localhost''usera'@'%.example.com'是不同的帳戶。

相關問題