記事"ネットワーク関数の適用、または DLL を使用しない MySQL: パートII - シグナル特性の変化を監視するプログラム"についてのディスカッション - ページ 2

 
SysFX:

システムのMySQL部分を使用しようとしているのですが、"use `mytable`"コマンドを発行しても、"No database selected "エラーが出続けます。

なぜこのようなことが起こるのか、何か考えられることはありますか?

あなたの場合、`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ソリューションで使用されているDLLを避けたいので、どうしてもライブラリを動作させたいです。

 

どういう意味かわからない:

トランザクション・エラー: 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)

ここで 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--;
           }