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

我有一个标准的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时出现错误rake db:migrate到创build数据库是:

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

config / database.yml有

 development: adapter: mysql2 host: localhost username: root password: xxxx database: xxxx 

肯定这是简单的我错过了。

首先,find你的套接字文件:

 mysqladmin variables | grep socket 

对我来说,这给了:

 | socket | /tmp/mysql.sock | 

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

 development: adapter: mysql2 host: localhost username: root password: xxxx database: xxxx socket: /tmp/mysql.sock 

find了!

host: localhost在config / database.yml中更改为host: 127.0.0.1以使rails通过TCP / IP而不是本地套接字进行连接。

 development: adapter: mysql2 host: 127.0.0.1 username: root password: xxxx database: xxxx 

你的mysql服务器可能没有运行。 下面解释如何启动服务器。 这是从MySQL下载自带的README文件的摘录。

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

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

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

如果您不使用启动项目,请input以下命令序列:

  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) 

“/tmp/mysql.sock”将在您启动MySQL服务器时自动创build。 所以记得在启动rails服务器之前这样做。

通过在OSX上安装MAMP,MySQL套接字位于/Applications/MAMP/tmp/mysql/mysql.sock 。 我用locate mysql.sock来查找我的MySQL套接字位置。

所以我的config/database.yml如下所示:

 development: adapter: mysql2 host: localhost username: root password: xxxx database: xxxx socket: /Applications/MAMP/tmp/mysql/mysql.sock 

如果你在Mac OSX上,

根据您select的安装types,MySQL Unix套接字的默认位置在Mac OS X和Mac OS X Server上不同

安装types在Mac OS X上的MySQL Unix插槽位置

  • 从MySQL的包安装程序—————— / tmp / mysql.sock

  • 来自MySQL的Tarball ——————————- / tmp / mysql.sock

  • MySQL与Mac OS X服务器捆绑在一起——- / var / mysql / mysql.sock

所以,只要在socket: /tmp/mysql.sock更改database.yml指向正确的位置,取决于您使用的操作系统和安装types

Mac OS X上MySQL套接字的默认位置是/var/mysql/mysql.sock

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

选项1:将主机更改为127.0.0.1

 staging: adapter: mysql2 host: 127.0.0.1 username: root password: xxxx database: xxxx socket: your-location-socket 

选项2:好像你有2个连接到你的服务器MySql。 要find你的套接字文件的位置,请执行以

 mysqladmin variables | grep socket 

对我来说:

 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! 

要么

 mysql --help 

我得到这个错误是因为我在我的OS X 10.9.5版本的PHP应用程序中安装了XAMPP。 在这里select一个默认的套接字位置。

我select了默认的rails应用程序:

 socket: /tmp/mysql.sock 

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

 socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock 

OTHERS OS X中的Socket位置

对于MAMPP:

 socket: /Applications/MAMP/tmp/mysql/mysql.sock 

对于来自MySQL的包安装程序:

 socket: /tmp/mysql.sock 

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

 socket: /var/mysql/mysql.sock 

对于Ubuntu:

 socket: /var/run/mysqld/mysql.sock 

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

 staging: # socket: /var/run/mysqld/mysql.sock 

我希望这可以帮助你。

我也遇到了同样的问题,但是没有一个答案能够一步步完成我所需要做的。 发生此错误的原因是您的套接字文件尚未创build。 你所要做的就是:

  1. 开始你的MySQL服务器,所以你的/tem/mysql.sock被创build,要做到这一点你运行: mysql.server start
  2. 完成之后,转到config/database.yml并添加socket: /tmp/mysql.sock
  3. 运行rake:dbmigrate再一次,一切都应该运行良好

我发现问题是我只有一个生产环境。 我没有开发或testing环境。

通过添加“RAILS_ENV =生产”来给出命令

 bundle exec rake redmine:plugins:migrate RAILS_ENV=production 

有效

如果您通过XAMPP运行MYSQL:

  1. 打开XAMPP mysqlconfiguration文件(在OSX上):

    /Applications/XAMPP/etc/my.cnf

  2. 复制套接字path:

    socket = /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

  3. 打开rails项目的数据库configuration文件:myproject / config / database.yml

  4. 将套接字configuration添加到开发数据库configuration:

– >

 development: adapter: mysql2 encoding: utf8 reconnect: false database: difiuri_falcioni pool: 5 username: root password: host: localhost socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock 
  1. 重新启动rails服务器

请享用 :)

你有这样的问题:不能连接到本地MySQL服务器通过套接字'/var/run/mysqld/mysqld.sock'

回答:$ sudo服务mysql启动