Ruby on Rails 3OSXのソケット「/tmp/mysql.sock」を介してローカルMySQLサーバーに接続できません


84

標準の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

確かにそれは私が見逃している単純なものです。


1
ソケットファイルは存在しますか?多分それはどこかに存在しますか(/var/lib/mysql/mysql.sock)?
Eimantas 2011年

いいえ、どちらも存在しません。作ってみます。
ジェイミーブキャナン

この問題のか、OSレベルでのコア..
RGB

回答:


211

まず、ソケットファイルを見つけるには:

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

17
rootにパスワードがある場合は、次のようにします。 "mysqladmin -pxxxx variables | grep socket"ここで、xxxxはrootパスワードです
Abe Petrillo

これがどのように機能するかについて私は混乱しています。リストした最初のコマンドをどこに/どのように入力しますか?私は、端末にこれを入力すると、それが報告されますmysqladmin: command not found
CodeBiker

2
コマンドは任意のフォルダーに入力できます。Command not foundmysqlがインストールされていないことを示します。
マグネ2014年

2
パスワードがない場合でも、ユーザーをrootとして指定する必要がありました。mysqladmin-uroot変数| grepソケット
bkunzi01 2015

1
@CodeBiker参考:Linuxシェルは、作業ディレクトリから修飾されていないプログラム名を実行しない傾向があります(明示的にに含まれている場合を除くPATH./program_name ...。たとえば、明示的にする必要があります。つまり、実際に実行されるプログラムは、どこから実行しようとしても独立している傾向があります。
mwfearnley 2016

87

それを見つけた!

host: localhostconfig / database.ymlをhost: 127.0.0.1に変更して、レールがローカルソケットではなくTCP / IP経由で接続するようにします。

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

7
mysql.sockファイルの場所を見つけて、次の行をconfig / database.ymlに追加することをお勧めします: "socket:/path/to/mysql.sock"
gparis 2011年

2
TCP / IPを介してソケットを使用する利点は何ですか?申し訳ありませんが、私はRailsとUnixを初めて使用します
Jamie Buchanan

5
Unixソケットは、TCP / IPソケットよりもオーバーヘッドが少なくなります。
Tobias Cohen

1
ありがとうございました!Railsの外部で(mysql gemを使用して)この問題に遭遇し、このソリューションは機能しました。ルートアクセス権がないため、ソケットファイルに別の場所を使用するようにgemを変更できません。このトリックは私に頭痛を救った。
Sojoodi 2011

2
この答えは私を別の方法で助けてくれました。localhost 3306が公開された状態で、ドッキングされたmysqlインスタンスに対してrailsアプリケーションを実行しています。この設定の副作用の1つは、localhostを介して接続できても、mysqlは同じマシンではなくVMで実行されているため、思考TCPしか接続できないため、ソケット接続がないことです。悲しいことに、私が見つけたより良いオプションはないように思われるので、これの代わりに、RailsにTCPの使用を義務付けることがここでの答えです。
ブライアン

11

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)

この回答は、MACでこの問題を修正するのに役立ちました...このコメントが上位にランク付けされない理由がわかりません。mysqlをインストールすると、コンソールにいくつかのメモが表示されます。次のコマンドを実行する必要がありました。unset TMPDIRおよびmysql_install_db --verbose --user=whoami`--basedir = "$(brew --prefix mysql)" --datadir = / usr / local / var / mysql --tmpdir = / tmp ....then I had to start the server mysql.server start`
dmillion

サービスが機能しなくなる可能性があります。これは間違いなく最初に確認することです。
タス2013年

8

この問題を解決するためのオプションは次のとおりです。

オプション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アプリケーション用のOSXバージョン10.9.5にXAMPPをインストールしたため、このエラーが発生します。ここでデフォルトのソケット位置の1つを選択します。

デフォルトのRailsアプリを選択します:

socket: /tmp/mysql.sock

PHPアプリの場合、XAMPPをインストールするので、ここにソケットを設定します。

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

その他OSXのソケットの場所

MAMPPの場合:

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

MySQLのパッケージインストーラーの場合:

socket: /tmp/mysql.sock

Mac OS X ServerにバンドルされているMySQLの場合:

socket: /var/mysql/mysql.sock

Ubuntuの場合:

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

オプション3:これらの設定がすべて機能しない場合は、ソケットの場所を削除できます。

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

これがお役に立てば幸いです。


このコマンドの素晴らしい説明:socket: /var/run/mysqld/mysql.sock私のために働いた
Yonela Nuba

6

「/tmp/mysql.sock」は、MySQLサーバーを起動すると自動的に作成されます。したがって、railsサーバーを起動する前にそれを行うことを忘れないでください。


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

3

Mac OSXを使用している場合は、

MySQL Unixソケットのデフォルトの場所は、選択したインストールタイプに応じて、Mac OSXとMacOS XServerで異なります。

インストールタイプ別のMacOSXでのMySQLUnixソケットの場所

  • MySQLのパッケージインストーラー------------------ / tmp / mysql.sock

  • MySQLのTarball ------------------------------- / tmp / mysql.sock

  • Mac OSXサーバーにバンドルされているMySQL ------- / var / mysql / mysql.sock

したがって、使用socket: /tmp/mysql.sockているOSとインストールの種類に応じて、database.ymlを 変更して適切な場所を指すようにします。



1

私は同じ問題を抱えていましたが、どの答えも私がしなければならないことを段階的に示していませんでした。このエラーは、ソケットファイルがまだ作成されていないために発生します。あなたがしなければならないのは:

  1. mysqlサーバーを起動して、/tmp/mysql.sock作成します。これを実行するには、次のようにします。mysql server start
  2. それが完了したら、アプリディレクトリに移動し、config/database.ymlファイルを編集してsocket: /tmp/mysql.sockエントリを追加/編集します
  3. rake:dbmigrateもう一度実行すると、すべてがうまくいくはずです

rake db:migrate*
ビクター

0

問題は、実稼働環境しかないことです。開発環境やテスト環境がありません。

'RAILS_ENV = production'を追加して、コマンドを実行します

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

出来た


0

XAMPPを介してMYSQLを実行している場合:

  1. XAMPP mysql構成ファイル(OSX上)を開きます。

    /Applications/XAMPP/etc/my.cnf

  2. ソケットパスをコピーします。

    ソケット= / 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サーバーを再起動します

楽しい :)


0

このような問題があります:ソケット '/var/run/mysqld/mysqld.sock'を介してローカルMySQLサーバーに接続できません

回答:$ sudo service mysql start


0

私のマシンではmysqldサービスが停止したため、同じ問題が発生していました。

1:-ターミナルに移動して入力します

sudo service mysqld restart

これにより、mysqldサービスが再起動し、必要な場所に新しいsockファイルが作成されます。


-1

Ubuntuまたは他のLinuxでXAMPPまたはLAMPPを介してMYSQLを実行している場合は、以下を試してください。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.