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
- Accedere al server su console
- tenta di chiamare il proc memorizzato
- Fail
The MySQL server is running with the --read-only option so it cannot execute this statement
Passa al numero
- Accedere al server su console
- Creare la tabella temporanea
- tenta di chiamare il proc memorizzato
- 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
forse su console si stabilisce la connessione con il root @ '' e in php con root @ 'localhost' .. .it sembra essere un problema utente – Hackerman
usa select current_user() su mysql cli – Hackerman
@RobertRozas Sto usando lo stesso utente per console e PHP PDO. nessuno dei due è root. – wmarbut