Автономный скрипт сообщает, что «сервер MySQL ушел»; проблема с my.cnf?

0

У меня есть ruby ​​script, который требует "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>'

script на моем Ubuntu в порядке, однако моя производственная среда - CentOS, и там я установил MySQL из исходного кода. В моем приложении Rails есть ОК, и для него также требуется "mysql2", но когда я запускаю этот script, он терпит неудачу.

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

Теги:
mysql2
ruby-on-rails-3
my.cnf

2 ответа

2

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

  reconnect: true

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

1

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

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

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

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

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

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

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

  • 0
    Я нахожу 4 /lib/libmysqlclient.so.16 который используется рельсами? я могу скопировать это восстановить друг друга?
  • 0
    В этом случае он использует тот, который предлагает ваша система, в Linux это делается с помощью конфигурационных файлов «ldconfig», в OS X это управляется «dyload» ... Но я не помню, как вы можете получить какой он использует ... Однако, они все .16 (так что теоретически они должны быть одинаковыми), и вы должны использовать тот, который установлен с вашей текущей установкой сервера mysql ... Также ищите заголовочные файлы libmysqlclient ( .час). Когда вы запустите gem install mysql2 --debug, вы должны увидеть, какой из них он использует при компиляции ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню