2013-07-29 3 views
0

Я могу подключиться к удаленной базе данных от клиента MySQL и использовать терминал. Но при попытке получить доступ к базе данных из приложения Rails, я получил эту ошибку:Не удается подключиться к серверу MySQL на «myhost.com» (4)

mysql2 :: Ошибка (не удается подключиться к серверу MySQL на «myhost.com» (4))

Моя база данных. YML имеет следующую конфигурацию для развития:

adapter: mysql2 
encoding: utf8 
reconnect: false 
host: myhost.com 
port: 3306 
database: the_database 
pool: 5 
username: myusername 
password: mypassword 
socket: /var/lib/mysql/mysql.sock 

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

Google google, я вижу различные причины не подключения к базе данных, но ни один из них не похож на мой и с этим кодом 4 (это код ошибки?).

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

Я не уверен, что это действительно так, но у этого пользователя есть только чтение.

Я использую Rails 3.2.8 и Ruby 1.8.7.

+0

Вы не можете использовать связь сокетов unix, кроме сервера mysql на локальном компьютере. Попробуйте удалить строку 'socket:/var/lib/mysql/mysql.sock'. –

+0

Можете ли вы ping 'myhost.com'? Если вы используете ssh в myhost.com и пытаетесь подключиться с той же базой данных, именем пользователя и паролем, это работает? –

+0

@JoachimIsaksson, к сожалению, это не решило проблему. – rocir

ответ

0

Вы используете как host, который может быть удаленным хостом, так и локальным хостом, но вы также используете socket, который представляет собой путь к UNIX Socket, который находится в вашей файловой системе сервера. socket - предпочтительный способ подключения к вашей локальной базе данных. Если вы не знаете путь tpo к вашему сокету mysql, вы можете найти его в своем конфигурационном файле mysql, который находится в /etc/mysql/my.cnf в большинстве случаев.

Если вы хотите подключиться к удаленному хосту вы должны проверить, если вы можете свистеть, и если вы можете, вы должны попробовать telneting порт, как это:

telnet <hostname> 3306 

, который позволит вам, если Theres поверки деамон прослушивает порт, к которому вы пытаетесь подключиться. Если вы не можете подключиться к серверу и управлять сервером, могут существовать некоторые правила брандмауэра, ограничивающие доступ. Его definitfly не является проблемой ограничения mysql, поскольку ограничения хоста вызывают другие сообщения об ошибках.

+0

Здравствуйте @davidb. Сокет должен быть удален сотовой линии? Я знаю путь к сокету на сервере MySQL, который отличается от моего локального компьютера. На сервере он /var/lib/mysql/mysql.sock, а локально - /tmp/mysql.sock. Но я думаю, что я должен использовать сокет на стороне сервера, верно? – rocir

+0

Кроме того, я могу выполнить ping мой хост, и когда я попробую telnet, он откроет странное сообщение (символ Escape - «^]».), А затем, в другой строке, другая странная вещь (5.5.23-55?%! THL ##X ?? X0 (w @ vS | 7 rocir

2

У меня была такая же ошибка головной боли (Ошибка «Не удается подключиться к серверу MySQL (4)) в течение 3 недель, в конце концов я обнаружил, что моя проблема была основана на правиле брандмауэра.

В решение было попросить мой хостинг-провайдер, чтобы открыть порт 3306, но в OUT пути.

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

Не пытайтесь ожидать, так как это большое решение, потому что в конфигурации есть много вещей, но, эй, я наконец-то получил его, и все дело в брандмауэре моего провайдера.

Надеюсь, что эта помощь для кого-то.

Смежные вопросы