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_packet(我尝试了高达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