0

我使用 c++ 和 mysql++ 库。我在每个线程上有单独的 mysqlpp::Connection 对象。所有 mysqlpp 选项都是默认的(ReconnectOption 被禁用)。每个线程都与 MariaDB 服务器保持持久连接。在一系列 SQL 查询之前,我进行以下检查:

try
{
    if (!connection.ping()) connection.connect(db_cfg.name.c_str(),
                                               db_cfg.server.c_str(),
                                               db_cfg.user.c_str(),
                                               db_cfg.password.c_str(),
                                               db_cfg.port);
}

此代码很少产生以下 SIGSEGV:

#0  0x00007fe0a625eb46 in ?? () from /usr/lib/x86_64-linux-  gnu/libmysqlclient.so.20
#1  0x00007fe0a6251b26 in mysql_ping () from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
#2  0x00007fe0ab6773b1 in mysqlpp::Connection::ping() () from /usr/lib/libmysqlpp.so.3

我试图通过在无限循环中运行带有 ping/connect 调用的测试程序来重现此错误。在执行期间,我手动重新启动了 MariaDB 服务器。但是我没有成功复制。您有任何解决方法的想法吗?谢谢你。

操作系统:Ubuntu 64 位

4

1 回答 1

0

mysqlpp++ 是使用 libmariadbclient 而不是 libmysqldbclient 重建的。它解决了这个问题。

于 2017-07-11T13:19:29.020 回答