2015-08-11 15 views
9

Sto tentando di impostare gli endpoint in tempo reale su Asterisk 13 utilizzando il driver MySQL ODBC (libmyodbc5a). Così ha osservato che una volta che un endpoint è stato registrato, Asterisk Server si blocca. il log dei messaggi mostra:Asterisk si arresta in modo anomalo alla registrazione dell'endpoint

res_odbc.c: SetConnectAttr (Txn isolation) returned an error: HY000: [MySQL][ODBC 5.3(w) Driver]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '7' at line 1 
res_config_odbc.c: SQL Prepare failed![SELECT * FROM ps_domain_aliases WHERE id = ?] 
res_odbc.c: Connection is down attempting to reconnect... 
res_odbc.c: Connecting DE-VOICE 
res_odbc: Connected to DE-VOICE [DE-VOICE-DNS] 
SetConnectAttr (Txn isolation) returned an error: HY000: [MySQL][ODBC 5.3(w) Driver]Lost connection to MySQL server during query 

Qualsiasi aiuto sarà apperciated

+0

forse [questo] (http://dba.stackexchange.com/questions/10578/client-times- out-while-mysql-query-remains-running) può aiutare? –

risposta

0

Il messaggio di errore da MySQL indica che una query viene inviata al server che non può analizzare. Immagino che ciò che viene effettivamente inviato a MySQL non sia esattamente quello che viene detto nel log degli errori (SELECT * FROM ps_domain_aliases WHERE id =?) Poiché l'errore di sintassi coinvolge '7'. Sto indovinando che ODBC espande la domanda ma forse non lo fa abbastanza bene. Se dovessi eseguire il debug di questo, la prima cosa che farei è usare tcpdump o qualche altra utility di acquisizione di pacchetti per catturare il traffico sulla porta MySQL (3306 di default), e capire cosa viene effettivamente inviato. Quindi, dopo aver verificato che fosse spazzatura, avrei aggiornato il driver ODBC e l'asterisco, quindi forse avrei provato a configurare Asterisk per usare un altro modo di parlare con MySQL.

0

è possibile simulare un valore previsto di "?" nella query, eseguirlo tramite NoOp, quindi eseguire la query risultante in mysql, per vedere se effettivamente mostra il risultato atteso IN mysql.

Inoltre è possibile attivare il debug e aumentare la verbosità dall'interno asterisco, per vedere che cosa sta realmente accadendo ..

Inoltre, cercare di mettere l'id =? in '' esempio:

SELECT * FROM ps_domain_aliases WHERE id = "?" 

So che si invia un intero, ma ancora ..