3

我想知道mysqlplus gem 是不是比普通的Ruby mysql gem 更好的数据库驱动程序?我曾经在我的 Rails 应用程序中遇到过一些问题,例如:ActiveRecord::StatementInvalid: Mysql::Error: MySQL server has gone away

4

3 回答 3

1

MySQL server has gone away意味着 mysql 服务器在运行您的查询时崩溃了,或者(更常见的是)您向它发送了一个大于 max_allowed_pa​​cket 的 quert。见http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html

于 2009-12-03T19:07:49.763 回答
1

如果您只想检查“mysql 服务器已消失”错误,那么 activerecord 就绰绰有余了。它是一个成熟的代码库,足以满足大多数用例。

结帐http://blog.new-bamboo.co.uk/2010/4/11/automatic-reconnection-of-mysql-connections-in-active-record了解更多详情。

当您需要并发时, mysqlplus 会更好,所有酷男孩都推荐它:-) 但我不确定它是否已准备好生产。

于 2010-05-11T05:44:56.480 回答
0

mysql 在一段时间不活动后获取连接。这在“wait_timeout”中定义。
可以通过以下方式在 mysql 中看到这一点:
mysql> show variables like 'wait_timeout'

默认为 8 小时。您在建立连接时收到此错误,并且在此期间没有通过此连接执行任何查询。

Activerecord 有 ActiveRecord::Base#verify_active_connections!对于这个用例。如果您在 database.yml 中指定 reconnect: true ,它将自动执行此操作。

上述方法是在我们从连接池中检出连接时执行的,它可以防止不活动。

如果您正在运行一个长时间运行的查询并且它超过了wait_timeout期限,它将对您没有帮助,那么您可能需要增加 mysql 中的 timeout 变量。您也可以尝试在以下位置设置补丁: http: //gist.github.com/238999这将在出现此类错误时重试查询,情况可能已经改变,但补丁并不可靠,因为它没有重试计数。

于 2010-05-11T05:40:34.507 回答