0

我可以从 MySQL 客户端连接到远程数据库,也可以使用终端。但是当尝试从 Rails 应用程序访问数据库时,我收到了这个错误:

Mysql2::Error(无法连接到 'myhost.com' (4) 上的 MySQL 服务器)

我的 database.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

我已更改主机的名称以发布此问题,如用户名、密码和数据库。

谷歌搜索,我可以看到不连接到数据库的不同原因,但没有一个与我的相似,并且代码为 4(这是错误代码吗?)。

我是 Rails 的新手,所以我不知道接下来应该做什么来修复它。我已经仔细检查了我的配置,甚至是套接字。我亲自检查了服务器端,这是通往套接字的正确路径。

我不确定它是否相关,但该用户对该数据库具有只读访问权限。

我正在使用 Rails 3.2.8 和 Ruby 1.8.7。

4

2 回答 2

2

I was having the same headache error (The error is "Can't connect to MySQL Server (4)) for about 3 weeks, finally i discovered that my problem was based on a firewall rule.

The solution was to ask to my hosting provider to open the port 3306 but in the OUT way.

I was using CPanel and the main point here was that i does not have any kind of control to manage the CPanel firewall.

Don´t try to expect as this is the big solution, because there are many things to be considered in configuration, but hey! i finally got it and it was all about the firewall of my provider.

Hope this help for someone.

于 2014-10-01T22:56:38.100 回答
0

您正在使用既host可以是远程主机也可以是本地主机,但您也可以使用socket它是位于服务器文件系统中的 UNIX 套接字的路径。这socket是连接到本地数据库的首选方式。如果你不知道你的 mysql 套接字的路径,你可以在大多数情况下在 /etc/mysql/my.cnf 中的 mysql 配置文件中查找它。

如果你想连接到一个远程主机,你应该检查你是否可以 ping 它,如果可以,你应该尝试像这样远程登录端口:

telnet <hostname> 3306

这将允许您检查是否有守护程序正在侦听您尝试连接的端口。如果您无法连接到服务器并且您控制了服务器,则可能有一些防火墙规则限制了访问。它的 definitfly 不是 mysql 限制问题,因为主机限制会导致其他错误消息。

于 2013-07-29T09:10:38.460 回答