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

时间:2011-03-31 11:24:54

标签: mysql ruby-on-rails-3 macos

我有一个标准的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)

config / database.yml有

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

确定这很简单,我很想念。

14 个答案:

答案 0 :(得分:204)

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

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

答案 1 :(得分:82)

发现它!

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

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

答案 2 :(得分:10)

你的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)

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

 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)

答案 3 :(得分:6)

启动MySQL服务器时,将自动创建

“/ tmp / mysql.sock”。所以请记住在启动rails服务器之前这样做。

答案 4 :(得分:3)

通过在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

答案 5 :(得分:3)

如果您使用的是Mac OSX,

  

MySQL Unix套接字的默认位置在Mac OS X和Mac OS X Server上有所不同,具体取决于您选择的安装类型

MySQL Unix Socket Locations on Mac OS X by Installation Type

  • 来自MySQL的程序包安装程序------------------ / tmp / mysql.sock

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

  • 与Mac OS X Server捆绑在一起的MySQL ------- / var / mysql / mysql.sock

只需将socket: /tmp/mysql.sock中的 database.yml 更改为指向正确的位置,具体取决于您使用的操作系统和安装类型

答案 6 :(得分:3)

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

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

int currentTab = mSetupSharedPreferences.getInt(CURRENT_TAB, 0)
switch (currentTab) {
  case  1: // Switch tab view here to 1
  break;
  case  2: // Switch tab view here to 2
  break;
  case  3: // Switch tab view here to 3
  break;
}

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

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

对我来说:

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!

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

我选择默认的rails应用:

mysql --help 

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

socket: /tmp/mysql.sock

其他OS X中的套接字位置

对于MAMPP:

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

来自MySQL的软件包安装程序:

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

对于与Mac OS X Server捆绑在一起的MySQL:

socket: /tmp/mysql.sock

对于Ubuntu:

socket: /var/mysql/mysql.sock

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

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

我希望这对你有所帮助。

答案 7 :(得分:2)

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

答案 8 :(得分:1)

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

  1. 启动mysql服务器,以便创建/tem/mysql.sock,为此:mysql.server start
  2. 完成后,转到config/database.yml并添加socket: /tmp/mysql.sock
  3. 再次运行rake:dbmigrate,一切都应该运动得很好

答案 9 :(得分:0)

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

添加' RAILS_ENV =生产'给出命令

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

它有效

答案 10 :(得分:0)

如果您通过XAMPP运行MYSQL:

  1. 打开XAMPP mysql配置文件(在OSX上):

    /Applications/XAMPP/etc/my.cnf

  2. 复制套接字路径:

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

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

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

  5. - >

    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服务器
    2. 享受:)

答案 11 :(得分:0)

你有这样的问题:无法通过socket'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器

Ans:$ sudo service mysql start

答案 12 :(得分:0)

在我的机器上,mysqld服务停止了,这就是为什么它给了我同样的问题。

1: - 转到终端并输入

sudo service mysqld restart

这将重新启动mysqld服务并在所需位置创建一个新的sock文件。

答案 13 :(得分:-1)

如果您正在Ubuntu或其他Linux上通过XAMPP或LAMPP运行MYSQL,请尝试:

socket: /opt/lampp/var/mysql/mysql.sock