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. Поэтому позвольте мне объяснить мои рабочие и неудачные случаи использования

не

  1. вход на сервер на консоли
  2. попробуйте вызвать сохраненный proc
  3. не The MySQL server is running with the --read-only option so it cannot execute this statement

передать

  1. вход на сервер на консоли
  2. создать temp таблица
  3. попробуйте вызвать сохраненный proc
  4. успехов

еще более странно, что я определенно отбрасываю эту временную таблицу внутри сохраненного proc и воссоздаю ее, если она существует.

Я достаточно уверен, что на данный момент мы смотрим на ошибку MySQL

1 ответов


вы пытались добавить временное ключевое слово в команда таблицы падения?

временное ключевое слово имеет следующие эффекты:

  • оператор отбрасывает только временные таблицы.
  • инструкция не завершает текущую транзакцию.
  • права доступа не проверяются. (ВРЕМЯНКА таблица видима только для сеанса, который ее создал, поэтому проверка не выполняется необходимый.)