无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器

时间:2011-09-05 17:08:26

标签: mysql ruby-on-rails-3

我是网络开发和RoR的全新手 - 一个超级微博! - 我正在通过lynda.com参加在线RoR课程。很高兴加入StackOverflow社区,非常感谢路障的一些帮助。

当我设置我的基本应用程序并成功运行一些迁移时,MySQL和localhost工作正常几周,但今天我在启动我的rails服务器并在我的浏览器中查看http://localhost:3000/时收到此MySQL错误:

Mysql2 :: Error(无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器'(2)):

我不认为我在环境中改变了任何相关内容,所以我想知道我是否需要更新宝石或类似的东西?

我已经在谷歌和StackOverflow上搜索了几个小时了,现在仍然无法弄清楚这里出了什么问题以及如何解决它。其他解决方案似乎与新设置有关,而不是与莫名其妙地打破的工作设置有关。

以下是一些背景信息:


来自我的config / database.yml:

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: simple_cms_development
  pool: 5
  username: simple_cms
  password: XXXXXXXXX
  socket: /tmp/mysql.sock

我在几周前保存了一个命令行,当时MySQL和localhost工作正常:

Last login: Mon Aug 15 21:34:23 on ttys000
sdemessieres$ cd sites/simple_cms
sdemessieres$ pwd
/Users/sdemessieres/sites/simple_cms
sdemessieres$ rails server
=> Booting WEBrick
=> Rails 3.0.7 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-08-22 22:28:01] INFO  WEBrick 1.3.1
[2011-08-22 22:28:01] INFO  ruby 1.8.7 (2009-06-12) [universal-darwin10.0]
[2011-08-22 22:28:01] INFO  WEBrick::HTTPServer#start: pid=66952 port=3000


Started GET "/" for 127.0.0.1 at Mon Aug 22 22:28:20 -0400 2011
  Processing by DemoController#index as HTML

等......(从这里工作得很好)


但是今天我尝试了相同的命令并收到错误:

Last login: Mon Sep  5 12:13:22 on ttys000
sdemessieres$ cd sites/simple_cms
sdemessieres$ pwd
/Users/sdemessieres/sites/simple_cms
sdemessieres$ rails server
=> Booting WEBrick
=> Rails 3.0.7 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-09-05 12:33:09] INFO  WEBrick 1.3.1
[2011-09-05 12:33:09] INFO  ruby 1.8.7 (2009-06-12) [universal-darwin10.0]
[2011-09-05 12:33:09] INFO  WEBrick::HTTPServer#start: pid=11027 port=3000


Started GET "/" for 127.0.0.1 at Mon Sep 05 12:33:41 -0400 2011

Mysql2::Error (Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)):


Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.0.7/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.8ms)
Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.0.7/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.7ms)
Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.0.7/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (6.3ms)

所以我从训练中回到了数据库笔记,并尝试从我以前运行但不再使用的命令行连接到MySQL:

sdemessieres$ pwd
/Users/sdemessieres/sites/simple_cms
sdemessieres$ which mysql
/usr/local/mysql/bin/mysql
sdemessieres$ mysql --version
mysql  Ver 14.14 Distrib 5.5.13, for osx10.6 (i386) using readline 5.1
sdemessieres$ mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
sdemessieres$ 

一个StackOverflow thread给了我这个线索,但它似乎只是强调了我的设置是正确的。

sdemessieres$ mysql_config |grep -- --socket
        --socket         [/tmp/mysql.sock]

正如我所说,我是初学者,所以任何帮助都会非常感谢,谢谢!

5 个答案:

答案 0 :(得分:6)

这个问题有些过时,但我在研究类似问题时遇到过这个问题。使用mysql_config命令确认套接字位置和名称有助于解决我的问题。

我收到了同样的错误并调整了config/database.yml中的套接字条目路径以匹配我找到.sock文件的位置。

然而,在路径更改之后,我的database.yml文件中的套接字条目引用了"mysql.sock",与我在搜索期间与此问题相关的大多数讨论一样。

mysql_config的输出略有不同。它显示文件名为"mysqld.sock" ...注意'd',而不是mysql.sock。我错过了,因为我专注于这条道路。

mysql安装仅在服务器VPS上,没有客户端,这可以解释套接字文件名的不同。

答案 1 :(得分:1)

更新:我今天再次尝试,没有改变任何东西,它工作得很好。去搞清楚。但是,我希望我知道发生了什么。

答案 2 :(得分:0)

我运行相同的错误,对我来说,两个套接字信息都显示mysqld。 我在mysql客户端中定义了两个会话。我通过删除一个会话定义并仅保留localhost来解决我的问题。删除并重新运行应用程序后,连接正常。

我不知道它是如何相互联系的,但是它有效,所以它也可能适用于其他人。

答案 3 :(得分:0)

在heroku配置中将CLEARDB_DATABASE_URL重命名为DATABASE_URL

答案 4 :(得分:0)

我遇到了同样的错误,再次安装mysql(来自官方网站)解决了这个问题。