Ошибка сервера MySQL Mysql2

Я получаю эту ошибку изредка. Я прочитал некоторые решения в stackoverflow, но они были о rails 2 или mysql. Любая помощь будет оценена.

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

Ответ 1

Существует множество причин ошибки. Ниже приведены возможные причины. Возможно, ваш размер пакета слишком мал.

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

Ответ 2

Я получил эту ошибку, пытаясь импортировать большой файл через seeds.rb с помощью rake db:seed, вызывая одно утверждение:

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

И я продолжал получать ActiveRecord::StatementInvalid (Mysql2::Error: MySQL server has gone away...


Решение

Я решил это с помощью комбинации двух вещей:

  • Добавьте reconnect: true в спецификацию базы данных в database.yml
  • Прочитайте файл SQL и выполните инструкцию отдельно:

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

Мне пришлось модифицировать, чтобы удалить некоторые комментарии из моего SQL файла - они по каким-то причинам сделали ошибку ActiveRecord, но это решило мою проблему.

Ответ 3

У меня такая же проблема возникает, когда я запускаю команду rake db: reset в моей среде разработки. Но я никогда не вижу этого сообщения об ошибке при запуске "rake db: migrate: reset & rake db: seed".

Хотя это очень странно, но это может вызвать некоторые проблески в этом вопросе. Я рад, если мой пост каким-то образом приведет к решению.

Ответ 4

Возможно, сервер, на котором вы размещены, перегружен, и в некоторых случаях сервер MySQL не может выполнить запрос. Спросите своего хостинг-провайдера о инструментах мониторинга производительности или сообщите ему об этой проблеме напрямую. Это сообщение об ошибке должно быть достаточно, чтобы дать вам ответ.