1

在尝试建立新的连接之前,是否可以确定(通过查询或其他方式)是否有人已经在使用特定的 MySQL 数据库?我有一个数据库,我想一次将用户数量限制为一个。(甚至每个用户的一个实例,不一定同时有两个不同的用户)

我这样做的原因是为了防止与该数据库一起使用的程序的多个实例之间发生任何读/写冲突。由于程序的工作方式,如果在实例 A 中进行更改,它们不会立即显示在实例 B 中,直到数据被刷新。现在还没有办法实时同步这些。在实例 A 完成之前阻止实例 B 启动会更容易)在我的情况下,客户端应用程序和数据库都在本地主机上运行,​​但数据库可能是远程的。

这可以做到吗?如果是这样,有没有一种简单的方法可以通过 Qt 做到这一点?

4

2 回答 2

2

听起来你想要单用户模式:

http://dev.mysql.com/doc/refman/4.1/en/mysql-cluster-single-user-mode.html

于 2012-11-26T23:32:04.850 回答
1

从 MySQL 5.0.3 开始,您可以通过 account 限制与服务器的同时连接数。然后,您可以检测该帐户是否正在使用,因为服务器将拒绝其他连接尝试(错误 1203ER_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'是不同的帐户。

于 2012-11-26T23:41:46.063 回答