MySQL хранимая процедура на реплике чтения с PHP PDO
Я открыл отчет об ошибке против MySQL http://bugs.mysql.com/bug.php?id=70793&thanks=4. здесь есть пример кода, который демонстрирует это на этой ошибке. Существует также обходной путь, который я нашел, который включен в отчет об ошибке. Этот обходной путь работает для PHP и console
я столкнулся с причудливой проблемой с хранимой процедурой и PHP PDO.
мне не разрешено публиковать тело хранимой процедуры, но я могу предоставить следующая информация.
- Она работает на реплике только для чтения при доступе из консоли С тем же пользователем, который разделяет PHP PDO -- Edit: мой первоначальный отчет здесь частично неверен, хранимая процедура будет работать, если временная таблица существует и завершится ошибкой, если временная таблица не существует как в консоли, так и в средах pdo. См. связанный отчет об ошибке в MySQL для деталей.
- я проверил, что Я использую одного и того же пользователя в обоих местах.
- только операций записи, выполняемых в временную таблицу
- он использует курсор
- Мастер и реплика оба работают MySQL 5.5.27
- серверы MySQL управляются на AWS RDS; у меня есть одна группа параметров со стандартной конфигурацией.
моя проблема в том, что я не могу вызвать эту хранимую процедуру из PHP PDO, я получаю эту ошибку
SQLSTATE[HY000]: общая ошибка: 1290 сервер MySQL работает с опцией --read-only, поэтому он не может выполнить эту инструкцию
Это не имеет абсолютно никакого смысла, потому что я могу назвать это только для чтения реплики пока я не делаю это из PHP.
может ли кто-нибудь пролить свет на то, что здесь происходит?
редактировать более странная информация
Я могу получить сеанс консоли для сбоя, но я может также сделать его успешным. Это зависит от того, была ли уже создана временная таблица, которую использует хранимый proc. Поэтому позвольте мне объяснить мои рабочие и неудачные случаи использования
не
- вход на сервер на консоли
- попробуйте вызвать сохраненный proc
- не
The MySQL server is running with the --read-only option so it cannot execute this statement
передать
- вход на сервер на консоли
- создать temp таблица
- попробуйте вызвать сохраненный proc
- успехов
еще более странно, что я определенно отбрасываю эту временную таблицу внутри сохраненного proc и воссоздаю ее, если она существует.
Я достаточно уверен, что на данный момент мы смотрим на ошибку MySQL
1 ответов
вы пытались добавить временное ключевое слово в команда таблицы падения?
временное ключевое слово имеет следующие эффекты:
- оператор отбрасывает только временные таблицы.
- инструкция не завершает текущую транзакцию.
- права доступа не проверяются. (ВРЕМЯНКА таблица видима только для сеанса, который ее создал, поэтому проверка не выполняется необходимый.)