Amo i trigger per una ragione: funzionano e basta. Detesto i trigger per una ragione: quando non funzionano, dimentica di provare a eseguire il debug. O dolce frustrazione.Debug di trigger MySQL
In pratica, desidero visualizzare la query di aggiornamento, cancellazione, inserimento, ecc. Eseguita. Voglio vedere quella query ... da qualche parte, nel mio terminale o in un log, esattamente come e quando MySQL lo esegue, e possibilmente qualsiasi output/errore corrispondente. Pensieri/hack?
Sto provando a eseguire il debug di una query di aggiornamento con alcuni join e cosa no. Le mie domande sono molto più complesse, ma per brevità ecco un esempio.
DELIMITER |
CREATE TRIGGER ireallyhateyourightnow AFTER UPDATE ON watch_this_table
FOR EACH ROW BEGIN
IF (OLD.my_value != NEW.my_value) THEN
update
my_table
set
my_column = NEW.my_value;
END IF;
END|
DELIMITER ;
Ecco alcune contesto supplementare che può aiutare a influenzare un suggerimento o risposta. Ancora una volta, sono meno interessato alla semantica/sintassi e più interessato a vedere MySQL eseguire la query, ma a tutti i costi, sono aperto a qualsiasi cosa a questo punto.
- Strace non funziona/mostra query.
- Ambiente non replicato MA se i registri del cestino mostrano istruzioni di trigger, lo imposterò sicuramente.
- "show full processlist" mostra l'esecuzione del trigger e/o le istruzioni eseguite all'interno (non le vedo mai dopo aver eseguito l'elenco di processi completo fino a quando perl è in grado di eseguirlo ma potrei semplicemente mancarlo)?
- Il log delle query generali non mostra queste query (certamente non il log degli errori).
- Non sto usando alias (più).
- Nessun errore di sintassi durante la creazione del trigger.
- L'istruzione IF funziona.
- Quando inserisco i NUOVI valori in una tabella "test/temp" ed eseguo manualmente la query di aggiornamento funziona (sono addirittura arrivato a inserire l'intera query di aggiornamento)
- Non riesco a mostrare tu la query ma, come ho appena detto, funziona quando eseguo manualmente se ciò aiuta.
- Ho rimosso tutti i caratteri errati, le schede, i ritorni a capo, i newline, ecc.
- Il socket MySQL mostrerebbe solo la connessione locale/dati ma non i funzionamenti interni MySQL, penso.
- MyISAM quindi i log INNODB non sono un'opzione
- lsof non sembra mostrare nient'altro che sia utile.
- Sto usando MySQL 5.0.77 su CentOS 5.5.
Sì, un passo in è in grigio. Presumibilmente perché è un processo? – Justin
Il comando 'Passa a' deve essere attivo dal codice di procedura memorizzato. Hai seguito le istruzioni passo passo (Come: avviare il debug del trigger)? – Devart
Grazie Devart! Un bel pezzo di software. – Justin