Mac OSX / MySQL 5.6.19 上的“Mysql2::Error: Lost connection to MySQL server during query”

Posted

技术标签:

【中文标题】Mac OSX / MySQL 5.6.19 上的“Mysql2::Error: Lost connection to MySQL server during query”【英文标题】:"Mysql2::Error: Lost connection to MySQL server during query" on Mac OSX / MySQL 5.6.19 【发布时间】:2014-08-05 08:52:18 【问题描述】:

我最近从 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 安装的问题。

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

按照建议的here 设置use_transactional_fixtures:false 并使用Database Cleaner 也无济于事。

更新

我将问题缩小到仅影响在模型中使用 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 条件中的任何一个都可以很好地工作。我需要增加某种内部内存缓冲区吗?

【问题讨论】:

Ps:我不会在我的测试中更改数据库架构,所以***.com/questions/13161394/… 与我无关。 你试过增加net_read_timeout吗? @FuzzyTree:我可以在家里试试这个,但我不太相信它会有所帮助。 (1) 结果集非常小(测试只有大约 20 条记录),应该立即返回。 (2) 来自文档:This timeout applies only to TCP/IP connections, not to connections made through Unix socket files @FuzzyTree net_read_timeout 设置为默认值 30 秒。但是,操作会立即失败 - 无需任何等待时间。使用 TCP 连接而不是套接字时同样的问题。 是的,@Unihedron 这样做了 - 它只是一个通用页面,并不特定于错误。另外我已经知道导致mysql崩溃的语句,所以那里的信息对我没有帮助 【参考方案1】:

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

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

【讨论】:

谢谢@Alireza - 我也是这么想的。如前所述 - 我尝试了 Homebrew + 官方 mysql.com 版本;两者都有相同的问题。也许它是构建过程中使用的库?非常感谢任何提示。请注意,分配赏金有 1 天的宽限期 - 所以即使在 3 小时内用完,我也可以分配它。 你能猜出哪个测试失败以及正在执行的命令吗?这似乎是一个错误。 如果我没记错的话,这是一个UPDATE xy SET a = B WHERE id IN (c, d, e, ...) 声明。没什么太花哨的,真的。当我大约 8 小时在家时,我可以发布实际声明。我几乎可以肯定这不是一般错误,而是仅限于我的机器。在家时,我会尝试在 mysql 客户端中手动运行语句序列,看看是否也会导致服务器崩溃。 这对我来说更好,因为我也会在家。 但我仍然认为这可能是一个普遍的错误。

以上是关于Mac OSX / MySQL 5.6.19 上的“Mysql2::Error: Lost connection to MySQL server during query”的主要内容,如果未能解决你的问题,请参考以下文章

mac osx 10.9.2 上的 mysql-python:错误:命令“/usr/bin/clang”失败,退出状态为 1

osx上的mysql:访问被拒绝并且无法连接到套接字

Mac OSX 上的 Eclipse CDT 问题

MAC OSX LION:mac 上的 gcc 未编译 wget

mac osx上的邮件系统配置文件

如何在mac osx下启用mysql(转载)