MySQL:为什么我必须在几分钟后反复刷新主机?

MySQL:为什么我必须在几分钟后反复刷新主机?

我在 AWS 中设置了一个 Web 系统,我们正在构建该系统以将现有的 Web 应用程序迁移到该系统。我有 2 个 VPC:1 个用于 Web,1 个用于数据。这些 VPC 是 Peered 的,并且设置了安全组来隔离每个 VPC 子网。

目前,有一台 EC2 Ubuntu 14 + Apache 2 + PHP 5.6 机器,它连接到数据 VPC 中的单个 MySQL 主数据库,用于写入,并调用数据 VPC 中的内部弹性负载均衡器,该负载均衡器平衡 2 个 MySQL 从属/副本以进行读取。每个数据库都是运行 MySQL 5.6 的 Amazon Linux EC2。

几分钟内(10-30 分钟左右)一切正常,但随后 Web 服务器无法连接到数据库。连接丢失通过我们的 PHP + CodeIgniter Web 应用程序表现为“无连接”错误。我已移除从服务器,但仅从主服务器读取/写入时仍会出现同样的问题。

我可以暂时通过运行FLUSH HOSTSMySQL Workbench 来解决这个问题,该工作台通过 SSH 隧道通过 Web 服务器连接到主数据库。但我注意到,一旦我这样做,我的/var/lib/mysql/{host}.err

[Warning] IP address 'ommitted' could not be resolved: Name or service not known

根据该错误消息,我认为这是一个网络问题,但在从主服务器刷新主机后,系统运行良好了一段时间。还要注意的是,我的通过同一 Web 服务器的 SSH 隧道从未出现过问题,无论是在 Web 应用程序中断之前、期间还是之后。

我对此有点困惑,因为它工作了一段时间然后就坏了。如果可能的话,我宁愿不简单地增加我的连接max_connect_errors而不知道到底是什么导致了我的连接错误,所以任何和所有的见解都是受欢迎的,非常感谢!

答案1

  • 也许您有一个使用错误的登录名/密码连接到数据库的脚本:MySQL 将在每次尝试失败时增加主机错误计数,并且在 max_connect_errors 时它会将此主机列入黑名单。

FLUSH HOSTS 将重置所有主机的错误计数。

检查所有脚本是否都与正确的信息相连接。最后,你可以使用类似下面的命令来捕获流量

    tcpdump -i any -s 0 -w mysql.pcap port 3306

然后使用 wireshark 分析捕获的内容以检查登录名和密码。

  • 您还可以使用 ip 或网络(而不是 dns 名称)配置您的帐户,然后使用 skip-resolve 选项启动 mysql。您将不再尝试解析“ommitted”,并且将获得更好的连接性能。

相关内容