Ruby on Rails 3无法通过OSX上的套接字'/tmp/mysql.sock'连接到本地MySQL服务器

Jam*_*nan 83 mysql macos ruby-on-rails-3

我有一个标准的Rails3环境,RVM 1.2.9,Rails 3.0.5,Ruby 1.9.2p180,MySQL2 Gem 0.2.7,mysql-5.5.10-osx10.6-x86_64

运行rake db:migrate创建数据库时遇到的错误是:

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Run Code Online (Sandbox Code Playgroud)

config/database.yml有

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx
Run Code Online (Sandbox Code Playgroud)

确定这是我想念的简单事.

Tob*_*hen 207

首先,找到你的套接字文件:

mysqladmin variables | grep socket
Run Code Online (Sandbox Code Playgroud)

对我来说,这给了:

| socket                                            | /tmp/mysql.sock                                                                                                        |
Run Code Online (Sandbox Code Playgroud)

然后,添加一行到您的config/database.yml:

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx
  socket: /tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)

  • 如果您在root上有密码,请执行:"mysqladmin -pxxxx variables | grep socket"其中xxxx是您的root密码 (17认同)
  • 您可以在任何文件夹中输入命令.`command not found'表示你没有安装mysql. (2认同)
  • 即使我没有密码,我仍然必须将用户指定为root:mysqladmin -u root variables | grep socket (2认同)

Jam*_*nan 82

找到了!

host: localhostconfig/database.yml 更改host: 127.0.0.1为使rails通过TCP/IP而不是本地套接字连接.

development:
  adapter: mysql2
  host: 127.0.0.1
  username: root
  password: xxxx
  database: xxxx
Run Code Online (Sandbox Code Playgroud)

  • 最好找到mysql.sock文件位置并将此行添加到config/database.yml:"socket:/path/to/mysql.sock" (7认同)
  • Unix套接字比TCP/IP套接字具有更少的开销. (5认同)
  • 使用TCP/IP套接字有什么好处?对不起 - 我是Rails和Unix的新手 (2认同)
  • 这个答案以不同的方式帮助了我。我在暴露了本地主机3306的dockerized mysql实例上运行Rails应用程序。这种设置的副作用是,即使您可以通过本地主机连接,也只能通过TCP连接,因为mysql是在VM中运行的,而不是在同一台计算机上运行的-因此没有套接字连接。代替这一点,在这里强制Rails使用TCP是答案,因为可悲的是,似乎没有找到更好的选择。 (2认同)

sug*_*ane 11

您的mysql服务器可能没有运行.下面介绍如何启动服务器.这是mysql下载附带的README文件的摘录.

安装完成后,可以通过在终端窗口中运行以下命令来启动MySQL.您必须具有管理员权限才能执行此任务.

如果已安装启动项,请使用以下命令:

 shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
 (ENTER YOUR PASSWORD, IF NECESSARY)
 (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)
Run Code Online (Sandbox Code Playgroud)

如果不使用"启动项",请输入以下命令序列:

 shell> cd /usr/local/mysql
 shell> sudo ./bin/mysqld_safe
 (ENTER YOUR PASSWORD, IF NECESSARY)
 (PRESS CONTROL-Z)
 shell> bg
 (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)
Run Code Online (Sandbox Code Playgroud)


akb*_*bin 8

这些是解决此问题的选项:

选项 1:将您的主机更改为 127.0.0.1

staging:
  adapter: mysql2
  host: 127.0.0.1
  username: root
  password: xxxx
  database: xxxx
  socket: your-location-socket
Run Code Online (Sandbox Code Playgroud)

选项 2:您似乎有 2 个连接到服务器 MySql。要找到您的套接字文件位置,请执行以下操作:

mysqladmin variables | grep socket
Run Code Online (Sandbox Code Playgroud)

对我来说:

mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' exists!
Run Code Online (Sandbox Code Playgroud)

或者

mysql --help 
Run Code Online (Sandbox Code Playgroud)

我收到此错误是因为我在 OS X 版本 10.9.5 中为 PHP 应用程序安装了 XAMPP。在此处选择默认套接字位置之一。

我选择默认 Rails 应用程序:

socket: /tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)

对于我的 PHP 应用程序,我安装了 XAMPP,所以我在这里设置了我的套接字:

socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

OS X 中的 OTHERS 套接字位置

对于 MAMPP:

socket: /Applications/MAMP/tmp/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

对于 MySQL 的软件包安装程序:

socket: /tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)

对于与 Mac OS X 服务器捆绑的 MySQL:

socket: /var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

对于 Ubuntu:

socket: /var/run/mysqld/mysql.sock
Run Code Online (Sandbox Code Playgroud)

选项 3:如果所有这些设置都不起作用,您可以删除您的套接字位置:

staging:
  # socket: /var/run/mysqld/mysql.sock
Run Code Online (Sandbox Code Playgroud)

我希望这对你有帮助。


Mag*_*gne 6

启动MySQL服务器时将自动创建"/tmp/mysql.sock".所以请记住在启动rails服务器之前这样做.