2013-10-30 16 views
6

Ho aperto un bug report su MySQL http://bugs.mysql.com/bug.php?id=70793&thanks=4. C'è un esempio di codice qui che lo dimostra su questo bug. C'è anche una soluzione che ho trovato che è inclusa nella segnalazione di bug. Questa soluzione funziona per PHP e consoleProcedura memorizzata MySQL su una replica di lettura con PDO PHP

Sto correndo in un bizzarro problema con una stored procedure e PHP PDO.

Non sono autorizzato a pubblicare il corpo della stored procedure, ma posso fornire le seguenti informazioni.

  • funzioni correttamente su una unica replica leggere quando si accede dalla console con lo stesso utente che condivide PHP DOP - Modifica: Il mio rapporto iniziale qui è parzialmente corretto, la stored procedure funziona se la la tabella temporanea esiste e fallirà se la tabella temporanea non esiste in entrambi gli ambienti console e pdo. Vedi il rapporto bug collegato a MySQL per i dettagli.
  • Ho verificato che sto utilizzando lo stesso utente in entrambi i posti.
  • L'unica attività di scrittura esegue è all'interno di una tabella temporanea
  • Lo fa utilizzare un cursore
  • Il master e replica sono entrambi in esecuzione MySQL 5.5.27
  • I server MySQL sono gestiti su AWS RDS; Ho un singolo gruppo di parametri con una configurazione standard.

Il mio problema è che non riesco a chiamare questa stored procedure da PHP DOP, ottengo questo errore

SQLSTATE[HY000]: General error: 1290 The MySQL server is running with the --read-only option so it cannot execute this statement

Questo rende assolutamente alcun senso perché posso chiamare questo sul lettura unica replica più a lungo come non lo sto facendo da PHP.

Qualcuno può far luce su cosa potrebbe succedere qui?

Modifica più bizzarro informazioni

posso ottenere una sessione della console a fallire, ma posso anche farlo riuscire. Dipende se la tabella temporanea utilizzata dallo stored proc è già stata creata.Quindi, mi permetta di spiegare le mie lavoro e sull'uso di mancanza di casi

Fail

  1. Accedere al server su console
  2. tenta di chiamare il proc memorizzato
  3. Fail The MySQL server is running with the --read-only option so it cannot execute this statement

Passa al numero

  1. Accedere al server su console
  2. Creare la tabella temporanea
  3. tenta di chiamare il proc memorizzato
  4. Successo

Ancora più strano è che io sicuramente goccia che tabella temporanea all'interno della memorizzato proc e ricrearlo se esiste.

Sono ragionevolmente certo, a questo punto siamo di fronte a un bug di MySQL

+0

forse su console si stabilisce la connessione con il root @ '' e in php con root @ 'localhost' .. .it sembra essere un problema utente – Hackerman

+0

usa select current_user() su mysql cli – Hackerman

+0

@RobertRozas Sto usando lo stesso utente per console e PHP PDO. nessuno dei due è root. – wmarbut

risposta

1

Hai provato aggiungendo la parola chiave TEMPORARY al DROP TABLE command?

La parola chiave TEMPORARY ha i seguenti effetti:

  • La dichiarazione scende tabelle solo temporanee.
  • La dichiarazione non termina una transazione in corso.
  • Nessun diritto di accesso selezionato. (A TEMPORANEA tabella è visibile solo per la sessione che lo ha creato, in modo che nessun controllo è necessario.)
+0

Una presa fantastica! Grazie Signore – wmarbut

Problemi correlati