Ruby on Rails 3 OSX에서 '/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 년

아니요, 둘 다 존재하지 않습니다. 하나 만들어 보겠습니다.
Jamie Buchanan

이 문제의 핵심 또는 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
루트에 암호가있는 경우 다음을 수행하십시오. "mysqladmin -pxxxx 변수 | grep socket"여기서 xxxx는 루트 암호입니다
Abe Petrillo

이것이 어떻게 작동하는지 혼란 스럽습니다. 나열한 첫 번째 명령을 어디에 / 어떻게 입력합니까? 터미널에 입력하면 다음과 같이보고됩니다.mysqladmin: command not found
CodeBiker 2013

2
모든 폴더에 명령을 입력 할 수 있습니다. Command not foundmysql이 설치되어 있지 않음을 나타냅니다.
Magne 2014.10.09

2
암호가 없더라도 사용자를 루트로 지정해야합니다. mysqladmin -u 루트 변수 | 그렙 소켓
bkunzi01

1
@CodeBiker 참고 : Linux 쉘은 작업 디렉토리에서 정규화되지 않은 프로그램 이름을 실행하지 않는 경향이 있습니다 (명시 적으로에 있지 않는 한 PATH) ./program_name .... 예를 들어 . 즉, 실행되는 실제 프로그램은 실행하려는 위치와 독립적 인 경향이 있습니다.
mwfearnley

87

그것을 발견!

레일이 로컬 소켓 대신 TCP / IP를 통해 연결되도록 host: localhostconfig / database.yml을 host: 127.0.0.1로 변경 합니다.

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

7
mysql.sock 파일 위치를 찾기 위해 더 나은 것 및이 줄을 추가하는 설정은 database.yml을을 / : "소켓 : /path/to/mysql.sock는"
gparis

2
TCP / IP를 통한 소켓 사용의 이점은 무엇입니까? 죄송합니다. 저는 Rails와 Unix를 처음
Jamie Buchanan

5
Unix 소켓은 TCP / IP 소켓보다 오버 헤드가 적습니다.
Tobias Cohen

1
감사합니다! Rails 외부 (mysql gem 사용) 외부에서이 문제가 발생했고이 솔루션이 작동했습니다. 루트 액세스 권한이 없으므로 소켓 파일에 대해 다른 위치를 사용하도록 gem을 수정할 수 없습니다. 이 트릭은 두통을 덜어주었습니다.
Sojoodi 2011

2
이 답변은 다른 방식으로 저를 도왔습니다. localhost 3306이 노출 된 상태에서 dockerized mysql 인스턴스에 대해 레일 애플리케이션을 실행하고 있습니다. 이 설정의 한 가지 부작용은 localhost를 통해 연결할 수 있지만 mysql이 동일한 시스템이 아닌 VM에서 실행되기 때문에 생각 TCP 만 연결할 수 있으므로 소켓 연결이 없다는 것입니다. 대신 Rails가 TCP를 사용하도록하는 것이 답입니다. 슬프게도 내가 찾은 더 나은 옵션이없는 것 같기 때문입니다.
Brian

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 TMPDIRand mysql_install_db --verbose --user=whoami` --basedir = "$ (brew --prefix mysql)"--datadir = / usr / local / var / mysql ....then I had to start the server --tmpdir = / tmp mysql.server start`
dmillion

서비스가 작동을 멈출 수 있습니다. 이것이 가장 먼저 확인해야 할 사항입니다.
Tass 2011

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 애플리케이션 용 OS X 버전 10.9.5에 XAMPP를 설치했기 때문에이 오류가 발생합니다. 여기에서 기본 소켓 위치 중 하나를 선택하십시오.

기본 레일 앱을 선택합니다.

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

Ubuntu의 경우 :

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

옵션 3 : 이러한 설정이 모두 작동하지 않으면 소켓 위치를 제거 할 수 있습니다.

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

도움이 되었기를 바랍니다.


이 명령에 socket: /var/run/mysqld/mysql.sock대한 좋은 설명 : 나를 위해 일했습니다
Yonela Nuba

6

MySQL 서버를 시작하면 "/tmp/mysql.sock"이 자동으로 생성됩니다. 따라서 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 OS X 및 Mac OS X Server에서 다릅니다.

Mac OS X에서 설치 유형별 MySQL Unix 소켓 위치

  • MySQL의 패키지 설치 프로그램 ------------------ / tmp / mysql.sock

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

  • Mac OS X Server에 번들로 제공되는 MySQL ------- / var / mysql / mysql.sock

따라서 사용중인 OS 및 설치 유형에 따라 올바른 위치를 가리 키도록 database.yml 을 변경하십시오.socket: /tmp/mysql.sock


2

Mac OS X에서 MySQL 소켓의 기본 위치는 /var/mysql/mysql.sock.


1

나는 똑같은 문제가 있었지만 어떤 대답도 내가해야 할 일을 단계적으로 제공하지 못했습니다. 이 오류는 소켓 파일이 아직 생성되지 않았기 때문에 발생합니다. 당신이해야 할 일은 :

  1. mysql 서버를 시작하면 /tmp/mysql.sock생성됩니다.mysql server start
  2. 완료되면 앱 디렉토리로 이동하여 config/database.yml파일을 편집하고 socket: /tmp/mysql.sock항목을 추가 / 편집하십시오.
  3. rake:dbmigrate다시 한 번 실행 하면 모든 것이 잘 작동합니다.

rake db:migrate*
Victor

0

문제는 프로덕션 환경 만 있다는 것입니다. 개발 또는 테스트 환경이 없습니다.

명령을 제공하기 위해 'RAILS_ENV = production'을 추가하여

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

작동했다


0

XAMPP를 통해 MYSQL을 실행하는 경우 :

  1. XAMPP mysql 구성 파일을 엽니 다 (OSX에서) :

    / 응용 프로그램 /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.