2011-02-09 1 views
1

Я использую MySQL Community Server 5.5 с PHP 5.3.3 на платформе Windows Server 2008. Я установил ограничения на пользовательские ресурсы, в частности ограничение, связанное с запросами, выполняемыми пользователем БД в течение одного часа. Я прочитал этот документ, и это очень интересно, но всегда это не работает для меня.Предел «max_questions» не соблюдается при запуске MySQL-запроса через PHP

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

При запуске запроса с помощью командной строки MySQL инструмента (mysql.exe) предел работает должным образом, и если лимит запросов в час был 7, после 7 запросов в течение одного часа я получаю ошибку:

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

Это вышеизложенное поведение.

Когда я запускаю запрос через PHP (пользователь, которого я использовал для подключения к БД, является тем же самым выше), предел запросов не работает: один и тот же пользователь через php может запускать все запросы, которые он хочет, и без любой предел. И если я вернусь в командной строке mysql выше счетчика, похоже, будет сброшен (даже если час не истек): я могу запустить 7 запросов в течение часа. Я думаю, что это не желаемое поведение. Похоже, что PHP сбрасывает счетчик и не вызывает ограничение запросов.

PS: «пользователь» владеет только SELECT,INSERT,UPDATE,DELETE привилегии и в коде PHP не существует какой-либо SQL-код, как FLUSH USER_RESOURCES что пользователь «пользователь» не мог работать (потому что RELOAD привилегия не назначена пользователю)

заранее спасибо

+0

Вы ограничились только 'user @ localhost', но не' user @ host-your-php-code-runson'? –

+0

Зачем вам такие странные ограничения? –

+0

PHP запускает запросы, используя учетную запись user @ localhost, и работает корректно (привилегии правильно соблюдаются, ограничивая количество запросов). –

ответ

0

Я думаю, что вы делаете маленькую ошибку,

Пожалуйста, проверьте для хоста в вашей функции mysql_connect в PHP. , если ваш хост является IP-адресом, тогда вам нужно назначить ограничение ресурса на имя пользователя @ yourip или имя пользователя @%

Если вы используете командную строку, то вы являетесь логином от имени пользователя @ localhost, и вы назначаете лимит на тот же пользователь.

Пожалуйста, попробуйте мои вышеупомянутые трюки и сообщите мне, есть ли у вас проблемы?

Днем кодирования ....

+0

Хост в функции mysq_connect таков: «127.0.0.1:3307» –

+0

использует localhost в хосте и будет работать нормально :) – Ankur

+0

Я не могу использовать только «localhost» в поле хоста, потому что на моем сервере есть много серверов mysqld для разные порты. –

0

я решил (частично) проблема.

Проблема возникает только тогда, когда запрос включая компонент MAX_QUERIES_PER_HOUR также включает в себя один из следующих элементов, отличных от 0:

MAX_CONNECTIONS_PER_HOUR !=0 
MAX_USER_CONNECTIONS !=0; 

например, следующий запрос грант не будет когда-либо вызовет сообщение об ошибке, связанное с запросами ограничить достижение в PHP:

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 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 и MAX_USER_CONNECTIONS отличного от 0, пределов, связанные с MAX_QUERIES_PER_HOUR и MAX_UPDATES_PER_HOUR игнорируются: мои PHP страница может выполнять все запросы, которые они хотят ,В противном случае понимается предел, и сообщение

has exceeded the 'max_questions' resource

Правильно отображается, когда происходит событие достижения предельных значений запросов.

Как я уже говорил выше, проблема не возникает, когда я использую инструмент командной строки mysql. Это происходит только тогда, когда запросы запускаются через страницы PHP.

1

Проверить этот наконечник,

, сколько пользователей у вас есть в вашем MySQL с тем же именем .. (помните не только имя, но хост, где разрешенный для подключения пользователя указан в MySQL). **ОЧЕНЬ ВАЖНО.

пользователь @%
[email protected]
пользователь @ локальный
[email protected]

каждый один из них не то же самое, если у вас есть какие-либо ограничения правила вам нравится поэтому вы должны назначать ограничения пользователю @, где бы вы ни находились. (все они, если у вас есть проблемы ** думаю, это ваш случай).

Рекомендация: создать определенного пользователя для WEB PHP (необходимо создать только один пользовательский хост @), вместо этого использовать общий пользователь, у которого может быть назначено несколько пользователей @ hosts. как phpuser @ 'localhost' обычно достаточно.

Смежные вопросы