Mysqli在SSL上给了2003年



我正在使用ssl的mysqli连接,因此,在代码中使用以下:

$mdbconnection = mysqli_init();
$mdbconnection->ssl_set('/ssl/xyz.pem', '/ssl/abc-cert.pem', NULL, NULL, 'AES256-SHA');    
$mdbconnection->real_connect(SV_SERVER, SV_MYSQL_LOGIN, SV_MYSQL_PASSWORD, SV_MYSQL_DATABASE);

我注意到我无法一直通过MySQL Server连接。如果尝试100次失败3次。

并遵循错误

echo($mdbconnection->connect_errno);

打印:

2003

,如果我在失败后第二次尝试{echo($mdbconnection->connect_errno);}将始终给出1045

我正在尝试解决此错误。
任何想法都将不胜感激。

2003错误代码意味着无法建立连接:https://dev.mysql.com/doc/refman/5.5/en/error-messages-client.html

错误代码1045表示客户端连接,但服务器拒绝了凭据(访问被拒绝):https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html

我会说,如果您每100次尝试中几次获得2003年错误代码,那么听起来有些可能性可能是:

  1. 某些中间应用或硬件可能是您的尝试是可能的洪水攻击(DDOS),并且可能正在拦截和阻止连接(如果您非常快速连接100次)

  2. 您可能在客户端遇到一些网络稳定性问题。可能有时间运行Wireshark并重现其运行的问题,以捕获问题并查看是否显示出任何重要的东西(例如DNS失败)。

  3. MySQL Server可能正在崩溃,然后重新启动。检查您的服务器端MYSQL错误日志(https://dev.mysql.com/doc/refman/5.7/en/error-log.html)。实际上,您应该在MySQL中任何奇异行为时,您应该真正做到这一点。

  4. 如果MySQL Server日志没有显示任何内容,请检查您的系统日志,尤其是在登录诸如阻止的防火墙(iptables或您使用的f/w的任何f/w)的情况下,并搜索它们以查找您的顾客IP在问题时期。

最后,如果您可以轻松/快速地重现此(例如,通过脚本建立100个连接并看到失败),请尝试从方程式中消除SSL并无需SSL连接,然后看看它是否给您带来了相同的问题。如果它在没有SSL的情况下完美无缺,那么在您的MySQL软件包的编译过程中使用的SSL库存在问题。

您可能还想检查一下是否有任何负载平衡,可能会使您的脚本连接到MySQL Server的不同实例(这可能不太可能服务器已关闭,下一个服务器没有您提供的凭据)

最新更新