Обсуждение статьи "Работа с сетевыми функциями, или MySQL без DLL: Часть II - программа для мониторинга изменения свойств сигналов" - страница 2

 

I'm using the database name in the "USE" query.

I also noticed the following when removing the 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


I would really like to get the library working as I want to avoid the DLLs used by the other MySQL solutions.

 

Не в курсе что значит:

Transaction Error: MYSQL_ERR_AUTHORIZATION_TIMEOUT

Вот здесь

ENUM_TRANSACTION_STATE res = Incoming(buf,rsp_len);

Получаю IN_PROGRESS и так и не авторизуется за таймаут. Данные верные точно.

Вот здесь result получаю ...IN_PROGRESS всё время. Куда копать?

ENUM_TRANSACTION_STATE CMySQLTransaction::Incoming(uchar &data[], uint len)
{
 ....
 //--- Пакет "Data"
                     m_packet.type = MYSQL_PACKET_DATA;
                     if((result = PacketDataHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
                        break;
}

 
leonerd #:

Не в курсе что значит:

Transaction Error: MYSQL_ERR_AUTHORIZATION_TIMEOUT

Вот здесь

ENUM_TRANSACTION_STATE res = Incoming(buf,rsp_len);

Получаю IN_PROGRESS и так и не авторизуется за таймаут. Данные верные точно.

Вот здесь result получаю ...IN_PROGRESS всё время. Куда копать?


Что-то пошло не так после отправки серверу логина и пароля.

Если бы данные были неверные, была бы ошибка, а не таймаут. А так либо сервер не ответил, либо ответил чем-то непонятным для библиотеки.

Есть возможность посмотреть перехват сетевых пакетов? Какая версия сервера MySQL?

 
Serhii Shevchuk #:

Что-то пошло не так после отправки серверу логина и пароля.

Если бы данные были неверные, была бы ошибка, а не таймаут. А так либо сервер не ответил, либо ответил чем-то непонятным для библиотеки.

Есть возможность посмотреть перехват сетевых пакетов? Какая версия сервера 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 что ли ставить? Ну это долго. Завтра может.
 
leonerd #:
wireshark что ли ставить? Ну это долго. Завтра может.

К сожалению, без этого сложно будет определить причину.

 
Кстати, на mysql 5.7 всё работало. На 8.0 не работает.
 
leonerd #:
Кстати, на mysql 5.7 всё работало. На 8.0 не работает.
Ну так с этого и нужно было начинать. Спасибо за сообщение, проверю.
 

А на работающем экземпляре (старая mysql) периодически такое получаю:

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

Здесь на data[ptr]:

ENUM_TRANSACTION_STATE CMySQLTransaction::Incoming(uchar &data[], uint len)
  {
   int ptr=0; // индекс текущего байта в буфере data
   ENUM_TRANSACTION_STATE result=MYSQL_TRANSACTION_IN_PROGRESS; // результат обработки принятых данных
   while(len>0)
     {
      if(m_packet.total_length==0)
        {
         //--- Если неизвестно количество данных в пакете
         while(m_rcv_len<4 && len>0)
           {
            m_hdr[m_rcv_len] = data[ptr];
            m_rcv_len++;
            ptr++;
            len--;
           }
 
leonerd #:

А на работающем экземпляре (старая mysql) периодически такое получаю:

Здесь на data[ptr]:

Я пока что вообще не смог подключиться к MySQL 8.0.23 (ошибка 1045: "access denied for user ... ").

Разбираюсь.

По поводу ошибки в строке (367, 37) - странно. Поставить бы там проверку с брейкпойнтом, посмотреть на значения переменных. У меня эта библиотека работает круглосуточно не первый год, запросы каждые 30 секунд (не короткие, с данными). И ни разу не падала. Знать бы, какой запрос её сносит.