我在运行 Ubuntu Intrepid 的 VPS 上维护一个运行 Passenger 和 MySQL 的 rails 应用程序,今天早上早些时候,网络服务器停止连接到服务器。我的异常通知程序向我发送了一条带有此错误的消息:
ActionView::TemplateError: Mysql::Error: MySQL server has gone away: SELECT * FROM `table_name` WHERE (`table_name`.`id` = 70)
炮击试图打开 mysql 的 vps 给了我这个:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
我通过停止 apache、重新启动数据库服务器和重新启动乘客来清除此错误,这似乎让一切都再次正常运行,但这并没有解决首先解决为什么会发生这种情况的问题。
我应该在哪些地方寻找导致此错误的原因?(除了 production.log 或 /var/log ),所以我以后可以避免这种情况,并且看到这很容易修复,如果这些情况再次发生,是否值得自动重启两台服务器未来?
当 MySQL 数据库关闭 Rails 应用程序打开的持久连接时,会发生此问题。当您的 Rails 应用程序长时间处于空闲状态(>= mysql 配置中定义的连接关闭时间)并且没有请求命中它时,就会发生这种情况。
您可能希望在 mysql 设置中增加连接到期时间 - 或编写一个 cron 作业以继续从 rails 应用程序获取一些动态页面(以便 rails 保持数据库句柄新鲜)。