文章 "应用网络函数,或无需 DLL 的 MySQL:第 II 部分 - 监视信号属性变化的程序" - 页 2

 
SysFX:

我只是想使用系统中的 MySQL 部分,但却一直收到 "未选择数据库 "的错误信息,即使我发出 "使用 `mytable`"命令也是如此。

你知道为什么会出现这种情况吗?

在你的情况中,"mytable "是数据库的名称还是表的名称?USE 后面必须跟数据库名称,而不是表。
 

我在 "USE "查询中使用了数据库名称。

在删除 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


我很想让库正常工作,因为我想避免使用其他 MySQL 解决方案使用的动态链接库。

 

不知道是什么意思:

事务错误:MYSQL_ERR_AUTHORIZATION_TIMEOUT

这里

ENUM_TRANSACTION_STATE res = Incoming(buf,rsp_len);

我得到了 IN_PROGRESS,但仍然没有授权超时。数据完全正确。

这里的结果是我一直得到......IN_PROGRESS。该去哪里查找?

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

 
leonerd #:

我不知道那是什么意思:

事务错误:MYSQL_ERR_AUTHORIZATION_TIMEOUT

这里是

ENUM_TRANSACTION_STATE res = Incoming(buf,rsp_len);

我得到的结果是 IN_PROGRESS,但仍然没有授权超时。数据完全正确。

这里的结果是我一直得到......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)

Here on data[ptr]:

ENUM_TRANSACTION_STATE CMySQLTransaction::Incoming(uchar &data[], uint len)
  {
   int ptr=0; // 数据缓冲区中当前字节的索引
   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--;
           }