2012-11-26 92 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'是不同的帐户。

相关问题