1

新しい接続が試行される前に、誰かが特定のMySQLデータベースをすでに使用しているかどうかを(クエリまたはその他の手段で)判断することは可能ですか?ユーザー数を一度に1人に制限したいデータベースがあります。(各ユーザーの1つのインスタンスでさえ、必ずしも一度に2人の異なるユーザーである必要はありません)

これの私の理由は、このデータベースで動作するプログラムの複数のインスタンス間の読み取り/書き込みの競合を防ぐためです。プログラムの動作方法により、インスタンス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以降、アカウントによるサーバーへの同時接続の数を制限できます。その後、追加の接続試行がサーバーによって拒否されるため(エラー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テーブルの1つの行に対応します。'usera'@'localhost''usera'@'%.example.com'は別個のアカウントです。

于 2012-11-26T23:41:46.063 に答える