MySQL 异常"connection lost during query"、"MySQL server has gone away"和"command out of sync"

MySQL exception "connection lost during query", "MySQL server has gone away" and "command out of sync"

本文关键字:MySQL command away out sync of gone server connection 异常 lost      更新时间:2023-10-16

我有一个带有c 的代码,该代码使用sqlapi 库。在我的代码中,我尝试为mySQL打开连接,然后创建两个命令,它们可以使用相同的连接,然后从两个线程调用该命令。在执行我的代码期间,我收到了例外的"查询期间连接丢失"answers" MySQL Server消失了"。有时候,我会收到异常"命令of nof Sync,您现在无法运行此命令"。我试图增加wait_timeoutտ> 150和max_lowered_packageտ64m,但我的问题无法解决。波纹管您可以找到C 代码。

int main()
{
  try
  {
    SAConnection saConnection;
    saConnection.Connect("scada", "root", "123qwerty!@#", SA_MySQL_Client);
    saConnection.setAutoCommit(SA_AutoCommitOff);   
    SACommand saCommand1{&saConnection, "select * from Node"};
    SACommand saCommand2{&saConnection, "select * from Node limit 1"};
    // VM: TODO: saCommand1.setOption("UseStatement") = "TRUE";
    // VM: TODO: saCommand2.setOption("UseStatement") = "TRUE";
    saCommand1.setOption("HandleResult") = "store";
    saCommand2.setOption("HandleResult") = "store";
    auto f1 = std::async(std::launch::async, [&]{ saCommand1.Execute(); saConnection.Commit(); });
    auto f2 = std::async(std::launch::async, [&]{ saCommand2.Execute(); saConnection.Commit(); });
    f1.get();
    f2.get();
    //saConnection.Commit(); // BOOM!
/*
    while (saCommand1.FetchNext())
      std::cerr << "======== fetching a record from saCommand1" << std::endl;
    while (saCommand2.FetchNext())
      std::cerr << "======== fetching a record from saCommand2" << std::endl;
*/
  }
  catch(const SAException& ex)
  {
    std::cerr << "==== ex.what() is " << static_cast<const char*>(ex.ErrText()) << std::endl;
  }
  return 0;
}

您使用的是来自两个std::async对象的一个连接,可能是来自两个线程,不支持的两个线程。创建与数据库的两个连接,每个std::async