Diskussion zum Artikel "Verwendung von Netzwerkfunktionen oder MySQL ohne DLL: Teil II - Programm zur Überwachung von Änderungen der Signaleigenschaften" - Seite 2

 
SysFX:

Ich versuche gerade, den MySQL-Teil des Systems zu verwenden, aber ich erhalte immer wieder die Fehlermeldung "No database selected" - selbst wenn ich den Befehl "use `mytable`" gebe.

Haben Sie eine Idee, warum das so ist?

Ist in Ihrem Fall `mytable` der Name der Datenbank oder der Tabelle? Auf USE muss der Name der Datenbank folgen, nicht aber der der Tabelle.
 

Ich verwende den Datenbanknamen in der "USE"-Abfrage.

Außerdem habe ich beim Entfernen der EA folgendes festgestellt:

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


Ich würde die Bibliothek wirklich gerne zum Laufen bringen, da ich die von den anderen MySQL-Lösungen verwendeten DLLs vermeiden möchte.

 

Bin mir nicht sicher, was es bedeutet:

Transaktionsfehler: MYSQL_ERR_AUTHORIZATION_TIMEOUT

Hier

ENUM_TRANSACTION_STATE res = Incoming(buf,rsp_len);

Ich erhalte IN_PROGRESS und immer noch keine Autorisierung für den Timeout. Die Daten sind genau richtig.

Hier erhalte ich die ganze Zeit ...IN_PROGRESS. Wo soll ich suchen?

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

 
leonerd #:

Ich weiß nicht, was das bedeutet:

Transaktionsfehler: MYSQL_ERR_AUTHORIZATION_TIMEOUT

Hier ist es

ENUM_TRANSACTION_STATE res = Incoming(buf,rsp_len);

Ich erhalte IN_PROGRESS und immer noch keine Berechtigung für die Zeitüberschreitung. Die Daten sind genau richtig.

Hier erhalte ich die ganze Zeit ...IN_PROGRESS. Wo soll ich suchen?


Irgendetwas ist schief gelaufen, nachdem ich dem Server das Login und das Passwort geschickt habe.

Wenn die Daten falsch wären, würde ein Fehler auftreten, nicht eine Zeitüberschreitung. Entweder hat der Server nicht geantwortet, oder er hat mit etwas geantwortet, das die Bibliothek nicht versteht.

Gibt es eine Möglichkeit, die Netzwerk-Paketaufzeichnungen zu sehen? Welche Version des MySQL-Servers?

 
Serhii Shevchuk #:

Beim Senden von Login und Passwort an den Server ist etwas schief gelaufen.

Wären die Daten falsch gewesen, hätte es einen Fehler gegeben, nicht eine Zeitüberschreitung. Aber entweder hat der Server nicht geantwortet, oder er hat mit etwas geantwortet, das die Bibliothek nicht verstanden hat.

Gibt es eine Möglichkeit, die Netzwerk-Paketaufzeichnungen zu sehen? Welche Version des MySQL-Servers?

"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 oder so etwas? Nun, das wird eine Weile dauern. Vielleicht morgen.
 
leonerd Wireshark oder so etwas? Nun, das wird eine Weile dauern. Vielleicht morgen.

Leider wird es ohne das schwer sein, die Ursache zu ermitteln.

 
Übrigens funktionierte alles mit mysql 5.7. Es funktioniert nicht auf 8.0.
 
leonerd #:
Übrigens funktionierte alles mit mysql 5.7. Auf 8.0 funktioniert es nicht.
Da hätten Sie also anfangen sollen. Danke für die Nachricht, ich werde es überprüfen.
 

Und auf einer laufenden Instanz (altes mysql) erhalte ich dies von Zeit zu Zeit:

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

Hier auf data[ptr]:

ENUM_TRANSACTION_STATE CMySQLTransaction::Incoming(uchar &data[], uint len)
  {
   int ptr=0; // Index des aktuellen Bytes im Datenpuffer
   ENUM_TRANSACTION_STATE result=MYSQL_TRANSACTION_IN_PROGRESS; // Ergebnis der Verarbeitung der empfangenen Daten
   while(len>0)
     {
      if(m_packet.total_length==0)
        {
         //--- Wenn die Anzahl der Daten im Paket unbekannt ist
         while(m_rcv_len<4 && len>0)
           {
            m_hdr[m_rcv_len] = data[ptr];
            m_rcv_len++;
            ptr++;
            len--;
           }