繁体   English   中英

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

[英]Ruby on Rails 3 Can't connect to local MySQL server through socket '/tmp/mysql.sock' on OSX

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

当然这是我遗漏的一些简单的东西。

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

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

找到了!

将 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

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

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

选项 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。 要找到您的套接字文件位置,请执行以下操作:

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。 在此处选择默认套接字位置之一。

我选择默认 Rails 应用程序:

socket: /tmp/mysql.sock

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

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

OS X 中的 OTHERS 套接字位置

对于 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

我希望这对你有帮助。

“/tmp/mysql.sock”将在您启动 MySQL 服务器时自动创建。 所以请记住在启动 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,

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

按安装类型划分的 Mac OS X 上的 MySQL Unix 套接字位置

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

  • 来自 MySQL 的压缩包 -------------------------------/tmp/mysql.sock

  • 与 Mac OS X 服务器捆绑的 MySQL -------/var/mysql/mysql.sock

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

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

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

  1. 启动你的 mysql 服务器,这样你的/tmp/mysql.sock被创建了,为此你运行: mysql server start
  2. 完成后,转到您的应用程序目录并编辑config/database.yml文件并添加/编辑socket: /tmp/mysql.sock条目
  3. 再次运行rake:dbmigrate ,一切都应该正常运行

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

通过添加 'RAILS_ENV=production' 来给出命令

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

有效

如果您通过 XAMPP 运行 MYSQL:

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

    /Applications/XAMPP/etc/my.cnf

  2. 复制套接字路径:

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

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

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

-->

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 服务器

享受 :)

你有这样的问题:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Ans: $ sudo service mysql start

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

1:- 转到终端并输入

sudo service mysqld restart

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM