mysql - Mac OSX/MySQL 5.6.19 上为 "Mysql2::Error: Lost connection to MySQL server during query"

标签 mysql ruby-on-rails-3 macos

我最近从 Ubuntu 切换到了 OSX。现在我无法再运行 RSpec 测试,尽管它可以在 Ubuntu 上运行。

第一个测试用例将始终返回:

Failure/Error: @match.save!
 ActiveRecord::StatementInvalid:
   Mysql2::Error: MySQL server has gone away: ROLLBACK TO SAVEPOINT active_record_1

然后是此后的每个测试用例:

Failure/Error: Unable to find matching line from backtrace
 Mysql2::Error:
   Can't connect to local MySQL server through socket '/tmp/mysql.sock' (61)

我的database.yml只是通过套接字/tmp/mysql.sock连接到数据库。设置reconnect:true没有什么区别。

我通过自制程序安装了mysql。我也已经按照所述重新安装了它here确保不是mysql安装的问题。

我还按照建议增加了 mysql max_allowed_pa​​cket here (我尝试了高达 4096M 并使用 show variables like 'max_allowed_pa​​cket' 验证了设置,但仍然没有成功。

按照建议设置use_transactional_fixtures:false here使用数据库清理器也没有帮助。

更新

我将问题范围缩小到仅影响模型中使用 before_save 触发器的测试用例。在开发模式下触发受影响的方法时,会出现同样的问题:

Mysql2::Error: Lost connection to MySQL server during query: UPDATE ...

同时,我还删除了自制 mysql 服务器并从官方网站安装了服务器 - 但没有任何运气。

这是 mysql 错误日志,两个 mysql 服务器版本(官方+自制)看起来都很相似:Gist

更新二

以下是有问题的陈述。我还可以在 MySQL 控制台中单独运行它,它会可靠地使服务器崩溃:

UPDATE bets SET points = 2 WHERE betsession_id IN (1, 3, 5, 7, 10, 16, 31, 33, 35, 39, 42, 44, 49, 50, 56, 58, 61) AND match_id = 1583 AND (home_score = guest_score) AND (home_score = 2 OR home_score = 0);

我可以将其精简为

UPDATE bets SET points = 2 WHERE (home_score = guest_score);

有时会使服务器崩溃。然而,添加 AND (home_score = 0 OR home_score = 2) 确实会导致崩溃。孤立的 2 个 WHERE 条件中的任何一个往往都能很好地发挥作用。我是否需要增加某种内部内存缓冲区?

最佳答案

我可以从发布的日志中看出,这是导致连接关闭的内部错误,而不是连接问题。因此,重点关注服务器本身而不是连接。

更新:这似乎是 5.6 中的一个错误。尝试降级

关于mysql - Mac OSX/MySQL 5.6.19 上为 "Mysql2::Error: Lost connection to MySQL server during query",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228300/

相关文章:

ios - 有关iOS应用开发的基本问题

PHP MYSQL 配置更新语句

ruby-on-rails - Rails3 CMS舒适墨西哥沙发与omniauth路由不匹配

macos - 如何在安装了 Homebrew 的 Mac OSX 上升级 Postgresql 的次要版本?

ruby-on-rails - rails 3 : Simple form start date

ruby-on-rails - 无法在任何来源中找到 activemodel-3.2.0(Heroku 上的 Rails 3.2)

macos - 在 MAC OSX 和 Ubuntu 上的 F# 中,我在 4.0 中运行 FSI 时出错

php - 当有多棵树时,使用修改后的前序树遍历进行选择

php - PDO 中用于 mysql_result() 函数的替代方法

MySQL连接ip从指定的ip地址变化