【问题标题】:Mysql2 Error MySQL server has gone awayMysql2 错误 MySQL 服务器已消失
【发布时间】:2011-10-12 00:42:49
【问题描述】:

我偶尔会收到此错误。我在 stackoverflow 中阅读了一些解决方案,但它们是关于 rails 2 或 mysql 的。任何帮助将不胜感激。

ActiveRecord::StatementInvalid (Mysql2::Error: MySQL server has gone away

【问题讨论】:

  • 消息“MySQL 服务器已消失”是否告诉您任何信息?遇到此错误(phpMyAdmnin,控制台)时,您是否尝试过连接到您的 MySQL 服务器?
  • 当我刷新页面时它可以工作。
  • 此错误发生在随机页面上还是在某个特定位置?也许是一些无效的查询有问题?
  • 您使用的是共享主机还是私人服务器?
  • 应用在我们,数据库服务器在欧洲

标签: ruby-on-rails-3 mysql2


【解决方案1】:

我在尝试通过调用一个语句通过seeds.rbrake db:seed 导入大文件时遇到此错误:

ActiveRecord::Base.connection.execute(IO.read("path/to/file.sql"))

我不断收到ActiveRecord::StatementInvalid (Mysql2::Error: MySQL server has gone away...


解决方案

我通过两件事的结合解决了这个问题:

  1. reconnect: true 添加到database.yml 中的数据库规范
  2. 读取SQL文件并单独执行语句,如下:

    f = File.new('path/to/file.sql')
    
    while statements = f.gets("") do
      ActiveRecord::Base.connection.execute(statements)
    end  
    

我不得不修改以从我的 SQL 文件中删除一些 cmets —— 它们使 ActiveRecord 出于某种原因抛出错误,但这解决了我的问题。

【讨论】:

【解决方案2】:

当我在开发环境中运行“rake db:reset”命令时,我遇到了完全相同的问题。但是当我运行“rake db:migrate:reset && rake db:seed”时,我从未看到此错误消息。

虽然很奇怪,但这可能会对这个问题有所启发。如果我的帖子能以某种方式找到解决方案,我会很高兴。

【讨论】:

  • 我在运行 rake db:reset 时遇到了同样的问题。在异常的源代码行之前放置一个ActiveRecord::Base.connection.reconnect! 来修复它。
【解决方案3】:

导致错误的原因有很多。请参阅下页了解可能的原因。也许您的数据包大小设置得太小了。

http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

【讨论】:

    【解决方案4】:

    也许您托管的服务器过载,在某些情况下 MySQL 服务器无法执行查询。向您的托管服务提供商询问性能监控工具,或直接告诉他这个问题。这个错误信息应该足以让他们给你一个答案。

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2012-06-28
      • 2011-12-18
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多