標準の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)
MySQLサーバーを起動すると、「/ tmp/mysql.sock」が自動的に作成されます。したがって、Railsサーバーを起動する前に忘れずに実行してください。
Mac OSXを使用している場合、
MySQL Unixソケットのデフォルトの場所は、選択したインストールタイプに応じてMac OS XとMac OS X Serverで異なります
インストールタイプ別のMac OS X上のMySQL Unixソケットの場所
そのため、socket: /tmp/mysql.sock
のdatabase.ymlを変更して、適切な場所を指すようにします使用しているOSおよびインストールタイプ
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
これらはこの問題を修正するオプションです:
オプション1:ホストを127.0.0.1に変更します
staging:
adapter: mysql2
Host: 127.0.0.1
username: root
password: xxxx
database: xxxx
socket: your-location-socket
オプション2:サーバーMySqlに2つの接続があるようです。ソケットファイルの場所を見つけるには、次の操作を行います。
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
PHPアプリケーション用にOS Xバージョン10.9.5にXAMPPをインストールしたため、このエラーが発生します。ここでデフォルトのソケットの場所のいずれかを選択します。
デフォルトのRailsアプリを選択します:
socket: /tmp/mysql.sock
PHPアプリの場合、XAMPPをインストールして、ソケットをここに設定します。
socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
OS Xのその他のソケットの場所
MAMPPの場合:
socket: /Applications/MAMP/tmp/mysql/mysql.sock
MySQLのパッケージインストーラーの場合:
socket: /tmp/mysql.sock
Mac OS X ServerにバンドルされているMySQLの場合:
socket: /var/mysql/mysql.sock
buntuの場合:
socket: /var/run/mysqld/mysql.sock
オプション3:これらの設定がすべて機能しない場合は、ソケットの場所を削除できます。
staging:
# socket: /var/run/mysqld/mysql.sock
これがお役に立てば幸いです。
Mac OS X上のMySQLソケットのデフォルトの場所は/var/mysql/mysql.sock
です。
私は同じ問題を抱えていましたが、答えはどれも、私がする必要があることを一歩一歩説明しませんでした。このエラーは、ソケットファイルがまだ作成されていないために発生します。あなたがしなければならないことは次のとおりです。
/tem/mysql.sock
を作成します。これを実行するには、mysql.server start
を実行しますconfig/database.yml
に移動してsocket: /tmp/mysql.sock
を追加しますrake:dbmigrate
をもう一度実行すると、すべて正常に動作するはずです問題は、実稼働環境しか持っていないことです。開発環境またはテスト環境がありません。
「Rails_ENV = production」を追加してコマンドを提供する
bundle exec rake redmine:plugins:migrate Rails_ENV=production
動いた
次のような問題があります:ソケット '/var/run/mysqld/mysqld.sock'を介してローカルMySQLサーバーに接続できません
回答:$ Sudo service mysql start
XAMPPを介してMYSQLを実行している場合:
XAMPP mysql構成ファイルを開きます(OSX上):
/Applications/XAMPP/etc/my.cnf
ソケットパスをコピーします。
ソケット= /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Railsプロジェクトのデータベース構成ファイルmyproject/config/database.ymlを開きます
ソケット構成を開発データベース構成に追加します。
->
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
楽しい :)
私のマシンではmysqldサービスが停止したため、同じ問題が発生していました。
1:-ターミナルに移動して入力
Sudo service mysqld restart
これにより、mysqldサービスが再起動され、必要な場所に新しいsockファイルが作成されます。