Автономный скрипт сообщает "MySQL сервер ушел";проблема с my.cnf? - PullRequest
0 голосов
/ 21 мая 2011

У меня есть скрипт ruby, который требует mysql2 и использует операторы запроса для mysql, например
@db.query("SELECT sname,id FROM streets where region_id=#{region["id"]}")
но он сообщает мне об ошибке всегда так:

main.rb:261:in `query': MySQL server has gone away (Mysql2::Error)
    from main.rb:261:in `block (3 levels) in <main>'
    from main.rb:258:in `each'
    from main.rb:258:in `block (2 levels) in <main>'
    from main.rb:254:in `each'
    from main.rb:254:in `block in <main>'
    from main.rb:253:in `loop'
    from main.rb:253:in `<main>'

Сценарий на моем Ubuntu в порядке, однако моя производственная среда - CentOS, и там я установил MySQL из исходного кода. Мое приложение Rails работает нормально, и для него также требуется «mysql2», но когда я запускаю этот скрипт, происходит сбой.

Я думаю, что проблема связана с my.cnf, но я не знаю, как его настроить.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2012

gem mysql2 предоставляет опцию до переподключения к MySQL в случае разрыва соединения.Вместо того, чтобы обновлять файл my.cnf, обновите файл database.yml своего драгоценного камня, включив в него параметр

  reconnect: true

.Это гарантирует, что гем mysql2 будет пытаться переподключиться к MySQL при необходимости.

1 голос
/ 21 мая 2011

вы вызываете метод .query непосредственно для объекта @db ... что это за объект?

Я имею в виду ... если вы находитесь под Rails, вы должны вызывать запросы вроде:

result = ActiveRecord::Base.connection.execute("sql here")

Я думаю, что это может быть причиной, потому что Rails управляет пулом соединений (например, 5 установленных соединений, и каждый запрос направляется к одному из них на основе запросов).

В любом случае, если это не является причиной, возможно, ваш гем mysql2 скомпилирован с другой версией библиотеки libmysqlclient.so в системе ... Затем, когда вы пытаетесь сделать запрос, он внутренне выдает ошибку о несовместимом протоколе и отключается ...

Пожалуйста, проверьте, что ваш libmysqlclient.so и его заголовочные файлы имеют одинаковую версию ... Или если у вас не установлено больше версий ... и затем, пожалуйста, попробуйте перекомпилировать mysql2 gem.

Надеюсь, это поможет. С уважением, NoICE

...