2011-02-09 15 views
1

Windows Server 2008プラットフォームでPHP 5.3.3でMySQL Community Server 5.5を使用しています。 1人のユーザーのリソース制限、特に1時間以内にDBユーザーが実行するクエリに関連する制限を設定しました。私はこの文書を読んできましたが、それはとても面白いですが、いつも私にとってはうまくいきません。PHPでMySQLクエリを実行しているときに "max_questions"の制限が守られていません

http://dev.mysql.com/doc/refman/5.5/en/user-resources.html

私はmysqlコマンドラインツール(mysql.exe)を介してクエリを実行すると制限が正常に動作し、1時間以内7つのクエリが、私はエラーを受け取った後、時間あたりのクエリの制限は、7だった場合:

ERROR 1226 (42000): User 'user' has exceeded the 'max_questions' resource (current value: 7)

これは望ましい動作です。

私はPHPを介してクエリを実行すると(私はDBに接続するために使用したユーザーは上記と同じです)、クエリの制限は機能しません:PHPを使用して同じユーザーが、任意の制限。そして、カウンタの上にあるmysqlコマンドラインに戻ってくると、たとえ時間が経過していなくてもリセットされているようです。私は1時間以内に7つのクエリも実行できます。 これは望ましい動作ではないと私は思う。 PHPがカウンタをリセットし、クエリ制限を起動しないようです。

PS:「ユーザーが」唯一SELECT,INSERT,UPDATE,DELETE権限を所有し、PHPのコード内の任意のSQLコードがRELOAD権限がユーザーに割り当てられていないため、ユーザーのユーザーが「(実行したことがなかったことFLUSH USER_RESOURCESようがありません)事前

+0

'user @ localhost'だけに制限しましたが、' user @ host-your-php-code-runson'に制限しましたか? –

+0

なぜこのような奇妙な制限が必要ですか? –

+0

PHPはアカウントuser @ localhostを使用してクエリを実行し、正しく動作します(権限はクエリーの制限を無視して正しく評価されます)。 –

答えて

0

私はあなたが小さなミスをやっていると思うで

おかげで、

PHPにあなたにmysql_connect関数内のホストをチェックしてください。 ホストがIPアドレスの場合、リソース制限をusername @ youripまたはusername @%

に割り当てる必要があります。コマンドラインで実行している場合は、username @ localhostからログインしています。同じユーザー。

私の上記のトリックを試してみてください。まだ問題がある場合は教えてください。

ハッピーコーディング....

+0

mysq_connect関数のホストは次のとおりです: "127.0.0.1:3307" –

+0

ホストのlocalhostを使用してうまく動作します:) – Ankur

+0

私のサーバにはmysqldサーバがたくさんあるので、私はホストフィールドで 'localhost'異なるポート。 –

0

私は(部分的に)問題を解決しました。

MAX_CONNECTIONS_PER_HOUR !=0 
MAX_USER_CONNECTIONS !=0; 

例えば:MAX_QUERIES_PER_HOUR成分を含むクエリはまた、0とは異なる以下の要素のうちの1つを含む場合にのみ

問題が発生します

GRANT USAGE ON *.* TO 'user'@'localhost' 
WITH MAX_QUERIES_PER_HOUR 20 
MAX_UPDATES_PER_HOUR 10 
MAX_CONNECTIONS_PER_HOUR 5 
MAX_USER_CONNECTIONS 2; 

は、代わりに以下の助成金は、正しく動作し、MySQLが正しく制限が適用されます。次のgrantクエリは、これまでのクエリに関連するエラーメッセージはPHPでの達成を制限することはありません。クエリの設定クエリの制限は、コンポーネントのうちの1つを含むとき、要するに

GRANT USAGE ON *.* TO 'user'@'localhost' 
    WITH MAX_QUERIES_PER_HOUR 20 
    MAX_UPDATES_PER_HOUR 10 
    MAX_CONNECTIONS_PER_HOUR 0 
    MAX_USER_CONNECTIONS 0; 

は、MAX_CONNECTIONS_PER_HOURと0と異なるMAX_USER_CONNECTIONS、MAX_QUERIES_PER_HOURとMAX_UPDATES_PER_HOURに関連する制限が無視されます。私のPHPページは彼らが望むすべてのクエリを実行することができます。それ以外の場合、制限が理解され、クエリ制限達成イベントが発生した場合には、メッセージ

has exceeded the 'max_questions' resource

が正しく表示されます。

上記のとおり、私がmysqlコマンドラインツールを使用しても問題は発生しません。これは、PHPページを通してクエリが実行されている場合にのみ発生します。あなたが同じ名前であなたのmysqlを持っているん

どのように多くのユーザー

1

チェックこのヒント..(だけではなく、名前を覚えていますが、ユーザーを接続するためにpermitedされているホストはMySQLで指定されています)。 **非常に重要です。

ユーザーの@%
[email protected]
のuser @ localhostの
[email protected]

任意の制限ルールを持っているあなたは、あなたがしたいならば、それらのそれぞれが、同じではありません使用するためには、リミテッドを必要とする場所にユーザー@に制限を割り当てる必要があります。 (それらのすべて、あなたが問題を抱えていれば**あなたのケースだと思う)。

推奨:WEB PHP用の特定のユーザーを作成します(1人のユーザーのみを作成する必要があります)。代わりに複数のユーザーが割り当てられている汎用ユーザーを使用します。 phpuser @ 'localhost'のように通常は十分です。

関連する問題