Discusión sobre el artículo "Trabajando con las funciones de red, o MySQL sin DLL: Parte II - El programa para monitorear los cambios de las propiedades de las señales" - página 2

 
SysFX:

Estoy tratando de utilizar la parte MySQL del sistema, pero sigo recibiendo un error "No hay base de datos seleccionada" - incluso si emito un comando "use `mytable`".

¿Tiene alguna idea de por qué está sucediendo esto?

En tu caso, ¿es "mitabla" el nombre de la base o de la tabla? USE debe ir seguido del nombre de la base de datos, pero no de la tabla.
 

Estoy utilizando el nombre de la base de datos en la consulta "USE".

También me di cuenta de lo siguiente al quitar la EA:

2021.08.20 01:20:24.248 Sync (EURUSD,H1) 6 undeleted objects left
2021.08.20 01:20:24.248 Sync (EURUSD,H1) 1 object of type CMySQLTransaction left
2021.08.20 01:20:24.248 Sync (EURUSD,H1) 1 object of type CMySQLPacket left
2021.08.20 01:20:24.248 Sync (EURUSD,H1) 1 object of type CData left
2021.08.20 01:20:24.248 Sync (EURUSD,H1) 1 object of type CMySQLLoginRequest left
2021.08.20 01:20:24.248 Sync (EURUSD,H1) 2 objects of type CMySQLPacketReader left
2021.08.20 01:20:24.248 Sync (EURUSD,H1) 1024 bytes of leaked memory


Me gustaría mucho que la librería funcionara ya que quiero evitar las DLL que utilizan las otras soluciones MySQL.

 

No estoy seguro de lo que significa:

Error de transacción: MYSQL_ERR_AUTHORIZATION_TIMEOUT

Aquí

ENUM_TRANSACTION_STATE res = Entrante(buf,rsp_len);

Obtengo IN_PROGRESS y sigo sin autorización por el tiempo de espera. Los datos son correctos exactamente.

Aquí resultado obtengo ...IN_PROGRESS todo el tiempo. ¿Dónde investigar?

ENUM_TRANSACTION_STATE CMySQLTransaction::Incoming(uchar &data[], uint len)
{
 ....
 //--- Paquete "Datos
                     m_packet.type = MYSQL_PACKET_DATA;
                     if((result = PacketDataHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
                        break;
}

 
leonerd #:

No sé qué significa eso:

Error de Transacción: MYSQL_ERR_AUTHORIZATION_TIMEOUT

Aquí está

ENUM_TRANSACTION_STATE res = Entrante(buf,rsp_len);

Obtengo IN_PROGRESS y todavía no hay autorización para el tiempo de espera. Los datos son correctos exactamente.

Aquí resultado obtengo ...IN_PROGRESS todo el tiempo. ¿Dónde buscar?


Algo salió mal después de enviar al servidor el nombre de usuario y la contraseña.

Si los datos fueran incorrectos, habría un error, no un timeout. Así que o el servidor no respondió, o respondió con algo que la biblioteca no entiende.

¿Hay alguna manera de ver la captura de paquetes de red? ¿Qué versión del servidor MySQL?

 
Serhii Shevchuk #:

Algo salió mal después de enviar al servidor el nombre de usuario y la contraseña.

Si los datos fueran incorrectos, habría habido un error, no un tiempo de espera. Pero o el servidor no respondió, o respondió con algo que la biblioteca no entendió.

¿Hay alguna forma de ver la captura de paquetes de red? ¿Qué versión del servidor MySQL?

"Variable_name" "Value"
"admin_tls_version"     "TLSv1,TLSv1.1,TLSv1.2,TLSv1.3"
"immediate_server_version"      "999999"
"innodb_version"        "8.0.26"
"original_server_version"       "999999"
"protocol_version"      "10"
"replica_type_conversions"      ""
"slave_type_conversions"        ""
"tls_version"   "TLSv1.2"
"version"       "8.0.26-0ubuntu0.20.04.2"
"version_comment"       "(Ubuntu)"
"version_compile_machine"       "x86_64"
"version_compile_os"    "Linux"
"version_compile_zlib"  "1.2.11"
 
Есть возможность посмотреть перехват сетевых пакетов?
¿Wireshark o algo así? Bueno, eso va a llevar un rato. Tal vez mañana.
 
leonerd ¿Wireshark o algo así? Bueno, eso va a llevar un rato. Tal vez mañana.

Desafortunadamente, sin eso será difícil determinar la causa.

 
Por cierto, todo funcionaba en mysql 5.7. No funciona en 8.0.
 
leonerd #:
Por cierto, todo funcionaba en mysql 5.7. No funciona en 8.0.
Así que por ahí deberías haber empezado. Gracias por el mensaje, voy a comprobarlo.
 

Y en una instancia en ejecución (mysql antiguo) me pasa esto de vez en cuando:

2021.09.09 16:57:18.818 prices_to_mysql array out of range in 'MySQLTransaction.mqh' (367,37)

Aquí en data[ptr]:

ENUM_TRANSACTION_STATE CMySQLTransaction::Incoming(uchar &data[], uint len)
  {
   int ptr=0; // índice del byte actual en el búfer de datos
   ENUM_TRANSACTION_STATE result=MYSQL_TRANSACTION_IN_PROGRESS; // resultado del tratamiento de los datos recibidos
   while(len>0)
     {
      if(m_packet.total_length==0)
        {
         //--- Si se desconoce el número de datos del paquete
         while(m_rcv_len<4 && len>0)
           {
            m_hdr[m_rcv_len] = data[ptr];
            m_rcv_len++;
            ptr++;
            len--;
           }