C++ mysql++;自重新启动后,连接始终返回0行

C++ mysql++;自重新启动后,连接始终返回0行,c++,mysql,mysql++,C++,Mysql,Mysql++,这可能是显而易见的,但我一辈子也弄不明白。自从我们做了一个服务器重新启动,一个C++程序使用MySQL +连接到我们的数据库刚刚返回0行的所有查询立即。我的第一个想法是My.cnf可能没有正确加载,但在检查show变量并进行比较之后,它似乎是正确加载的 有什么建议吗?是否有可能某些目录设置找不到我不知道的mysqlpp需要的一些 谢谢你的建议 有什么建议吗 当然可以: 确保您正在检查所有返回的错误代码(如果您已检查) 如果没有禁用异常,请检查可能涉及的每个catch块是否只是悄悄地吞噬了错误 M

这可能是显而易见的,但我一辈子也弄不明白。自从我们做了一个服务器重新启动,一个C++程序使用MySQL +连接到我们的数据库刚刚返回0行的所有查询立即。我的第一个想法是My.cnf可能没有正确加载,但在检查show变量并进行比较之后,它似乎是正确加载的

有什么建议吗?是否有可能某些目录设置找不到我不知道的mysqlpp需要的一些

谢谢你的建议

有什么建议吗

当然可以:

  • 确保您正在检查所有返回的错误代码(如果您已检查)

    如果没有禁用异常,请检查可能涉及的每个
    catch
    块是否只是悄悄地吞噬了错误

    MySQL C API库(因此也就是MySQL++)可能试图告诉您出了什么问题,而您正在抑制它或以某种方式忽略它

  • 构建并运行。如果它们以与您的程序相同的方式失败,则意味着问题的性质是广泛的。这些示例具有良好的诊断功能,因此它们可以指导您解决问题

    如果示例工作正常,则问题特定于您的程序或其数据。因此,请将这些情况分开:

    • 程序是否在不同的机器上针对与问题机器结构相同但内容不同的DB工作

    • 如果是这样,当您将问题数据库的副本加载到第二台计算机时,它是否仍在该计算机上工作

    • 如果这仍然有效,那么当您直接从有效的系统访问远程机器的数据库时,它是否有效?(注意这一点。您希望在MySQL DB连接本身上设置SSL,或者使用某种安全通道,如VPN或SSH隧道。)

    如果您成功地运行了gauntlet,则意味着问题出在原始计算机上的程序本身,或者程序的环境。正如您所推测的,库或权限是一种可能性

  • 在调试器下运行程序

    首先尝试
    gdb
    ,因为我们感兴趣的是调试器是否看到任何异常或抛出的信号。例如,该程序可能是核心转储

    如果
    gdb
    为程序提供了一份干净的健康清单,请尝试
    valgrind
    。如果Valgrind抱怨你的程序,很可能它在抱怨一些合法的东西;也许无害,但合法。如果您收到投诉,并且在上面发现问题特定于一台机器,我建议您在程序成功运行的系统上重新尝试Valgrind运行。修复这些问题,或者至少在继续在原始问题机器上调试之前排除无害的警告

  • 是否有可能某些目录设置找不到我不知道的mysqlpp需要的一些

    很容易检查:

    $ ldd myprogram
    

    您应该会得到一份报告,列出您的程序链接到的所有共享库,包括它们的完整路径。运行
    ldd
    的用户丢失或无法读取的任何数据都将被显示。

    您检查过数据库中是否有数据吗?:)是的,一切都很好,网站正常运行,数据库也很好。我甚至在程序中添加了一个测试查询,它只执行“select version()”,同时返回0行,我觉得自己像个白痴。非常感谢,我禁用了异常(我是mysqlpp的新手)。我想对你的答案投赞成票,但我的stackoverflow帐户太新了。不过非常感谢