如果你只想检查“mysql server has gone away”错误,那么activerecord已经足够了。它是一个成熟的代码库,对于大多数用例来说已经足够好了。
请查看http://blog.new-bamboo.co.uk/2010/4/11/automatic-reconnection-of-mysql-connections-in-active-record以获取更多详细信息。
当你需要并发时,mysqlplus更好,所有酷男孩都推荐它 :-) 但我不确定它是否已经准备好投入生产。
MySQL服务器已断开连接
意味着您的查询可能导致MySQL服务器崩溃,或者(更常见的情况)您发送了一个大于max_allowed_packet的查询。请参阅http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html。
mysql会在一段时间的不活动后断开连接。这是在'wait_timeout'中定义的。
可以在mysql中看到如下信息:
mysql> show variables like 'wait_timeout'
默认情况下,该时间为8小时。如果您建立了连接,并且在此期间没有执行任何查询,则会出现此错误。
对于此用例,ActiveRecord有ActiveRecord :: Base#verify_active_connections!。如果您在database.yml中指定reconnect:true,它将自动执行此操作。
当我们从连接池中检出连接时,将执行上述方法,以防止不活动状态。
如果您运行长时间运行的查询并超过了wait_timeout期限,则无法帮助您。然后,您可能需要增加mysql中的超时变量。您还可以尝试在以下位置设置补丁: http://gist.github.com/238999 在这种错误情况下重试查询,情况可能已经改变,但补丁不够健壮,因为它没有重试计数。
console
中,通常reload!
命令可以解决。 - ma11hew28