我可以从MySQL客户端连接到远程数据库并使用终端。但是当我尝试从Rails应用程序访问数据库时,我收到了这个错误:
Mysql2 ::错误(无法连接到'myhost.com'上的MySQL服务器'(4))
我的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。
答案 0 :(得分:2)
我遇到了同样的头痛错误(错误是“无法连接到MySQL服务器(4)”大约3周,最后我发现我的问题是基于防火墙规则。
解决方案是要求我的托管服务提供商以OUT方式打开端口3306。
我使用的是CPanel,这里的要点是我没有任何控制来管理CPanel防火墙。
不要试图期待,因为这是一个很大的解决方案,因为在配置中需要考虑很多事情,但是嘿!我终于得到了它,这完全取决于我的提供商的防火墙。
希望对某人有所帮助。
答案 1 :(得分:0)
您正在使用可以是远程主机的host
或本地主机,但您也使用socket
,它是位于服务器文件系统中的UNIX套接字的路径。 socket
是连接到本地数据库的首选方式。如果您不知道您的mysql套接字的路径tpo,您可以在大多数情况下位于/etc/mysql/my.cnf中的mysql配置文件中查找它。
如果你想连接到远程主机,你应该检查一下你是否可以ping它,如果可以的话,你应该尝试telnet这样的端口:
telnet <hostname> 3306
这将允许您检查是否有一个deamon正在侦听您尝试连接的端口。如果您无法连接到服务器并且您控制服务器,则可能存在一些限制访问的防火墙规则。它的definitfly不是mysql限制问题,因为主机限制会导致其他错误消息。