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。 你所要做的就是:
- 开始你的MySQL服务器,所以你的
/tem/mysql.sock
被创build,要做到这一点你运行:mysql.server start
- 完成之后,转到
config/database.yml
并添加socket: /tmp/mysql.sock
- 运行
rake:dbmigrate
再一次,一切都应该运行良好
我发现问题是我只有一个生产环境。 我没有开发或testing环境。
通过添加“RAILS_ENV =生产”来给出命令
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
有效
如果您通过XAMPP运行MYSQL:
-
打开XAMPP mysqlconfiguration文件(在OSX上):
/Applications/XAMPP/etc/my.cnf
-
复制套接字path:
socket = /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
-
打开rails项目的数据库configuration文件:myproject / config / database.yml
-
将套接字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
- 重新启动rails服务器
请享用 :)
你有这样的问题:不能连接到本地MySQL服务器通过套接字'/var/run/mysqld/mysqld.sock'
回答:$ sudo服务mysql启动