Ruby on Rails 3 Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/tmp/mysql.sock' na OSX


84

Mam standardowe środowisko 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

Błąd jaki otrzymuję podczas uruchamiania rake db:migratebazy danych to:

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

config / database.yml ma

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

pewnie, że brakuje mi czegoś prostego.


1
Czy istnieje plik gniazda? Może jest obecny gdzie indziej (/var/lib/mysql/mysql.sock)?
— Eimantas

Nie, nie istnieją. Spróbuję go stworzyć.
— Jamie Buchanan

sedno tego problemu lub na poziomie systemu operacyjnego ..
— RGB,

Odpowiedzi:


211

Najpierw, aby znaleźć plik gniazda:

mysqladmin variables | grep socket

Dla mnie to daje:

| socket                                            | /tmp/mysql.sock                                                                                                        |

Następnie dodaj linię do config/database.yml:

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx
  socket: /tmp/mysql.sock

17
Jeśli masz hasło roota, zrób: "mysqladmin -pxxxx zmienne | gniazdo grep" gdzie xxxx to twoje hasło roota
— Abe Petrillo

Nie wiem, jak to działa; gdzie / jak wpisujesz pierwsze polecenie, które wymieniłeś? Kiedy mysqladmin: command not found
— wpisuję

2
Możesz wprowadzić polecenie w dowolnym folderze. Command not foundoznacza, że ​​nie masz zainstalowanego mysql.
— Magne,

2
Mimo że nie miałem hasła, nadal musiałem określić użytkownika jako root: mysqladmin -u główne zmienne | grep socket
— bkunzi01

1
@CodeBiker FYI: powłoki Linuksa zwykle nie wykonują niekwalifikowanych nazw programów z katalogu roboczego (chyba że jest to wyraźnie w PATH) - musisz być wyraźny, np ./program_name .... Oznacza to, że rzeczywisty wykonywany program jest zwykle niezależny od tego, skąd próbujesz go uruchomić.
— mwfearnley

87

Znalazłem to!

Zmień host: localhostw config / database.yml, host: 127.0.0.1aby szyny łączyć się przez TCP / IP zamiast lokalnego gniazda.

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

7
Lepiej byłoby znaleźć lokalizację pliku mysql.sock i dodać tę linię do config / database.yml: "socket: /path/to/mysql.sock"
— gparis

2
Jaka jest korzyść z używania gniazda przez TCP / IP? Przepraszam - jestem całkiem nowy w Railsach i Uniksie
— Jamie Buchanan

5
Gniazda uniksowe mają mniejszy narzut niż gniazda TCP / IP.
— Tobias Cohen

1
Dziękuję Ci! Natknąłem się na ten problem poza Railsami (używając mysql gem) i to rozwiązanie zadziałało. Nie mam uprawnień administratora, więc nie mogę zmodyfikować klejnotu, aby używał innej lokalizacji dla pliku gniazda. Ta sztuczka uratowała mi bóle głowy.
— Sojoodi

2
Ta odpowiedź pomogła mi w inny sposób. Uruchamiam aplikację railsową na zdokeryzowanej instancji mysql, z ujawnionym localhost 3306. Jednym z efektów ubocznych tej konfiguracji jest to, że nawet jeśli możesz łączyć się przez localhost, możesz łączyć się tylko przez myśl TCP, ponieważ mysql działa na maszynie wirtualnej, a nie na tej samej maszynie - więc nie ma połączenia przez gniazdo. Zamiast tego odpowiedzią jest nakazanie Railsom używania TCP, ponieważ niestety nie ma lepszej opcji, którą znalazłem.
— Brian

11

Twój serwer mysql może nie być uruchomiony. Poniżej wyjaśniono, jak uruchomić serwer. To jest fragment z pliku README, który jest dołączony do pobierania mysql.

Po instalacji możesz uruchomić MySQL, uruchamiając następujące polecenia w oknie terminala. Aby wykonać to zadanie, musisz mieć uprawnienia administratora.

Jeśli zainstalowałeś element startowy, użyj tego polecenia:

 shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
 (ENTER YOUR PASSWORD, IF NECESSARY)
 (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)

Jeśli nie używasz elementu startowego, wprowadź następującą sekwencję poleceń:

 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)

Ta odpowiedź pomogła mi rozwiązać ten problem na moim MAC ... nie wiem, dlaczego ten komentarz nie jest wyżej w rankingu. Po zainstalowaniu mysql w konsoli są wyświetlane notatki. Musiałem uruchomić następujące polecenia. unset TMPDIRand 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

Usługa może przestać działać, jest to zdecydowanie pierwsza rzecz do sprawdzenia.
— Tass

8

Oto opcje rozwiązania tego problemu:

Opcja 1: zmień hosta na 127.0.0.1

staging:
  adapter: mysql2
  host: 127.0.0.1
  username: root
  password: xxxx
  database: xxxx
  socket: your-location-socket

Opcja 2: Wygląda na to, że masz 2 połączenia z serwerem MySql. Aby znaleźć lokalizację pliku gniazda, wykonaj następujące czynności:

mysqladmin variables | grep socket

dla mnie daje:

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!

lub

mysql --help 

Otrzymuję ten błąd, ponieważ zainstalowałem XAMPP w moim OS X w wersji 10.9.5 dla aplikacji PHP. Wybierz tutaj jedną z domyślnych lokalizacji gniazda.

Wybieram dla domyślnych aplikacji railsowych:

socket: /tmp/mysql.sock

W przypadku moich aplikacji PHP instaluję XAMPP, więc ustawiam tutaj gniazdo:

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

INNE Lokalizacja gniazda w OS X

Dla MAMPP:

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

Instalator pakietów z MySQL:

socket: /tmp/mysql.sock

Dla MySQL w pakiecie z Mac OS X Server:

socket: /var/mysql/mysql.sock

W przypadku Ubuntu:

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

Opcja 3: Jeśli wszystkie te ustawienia nie działają, możesz usunąć lokalizację gniazda:

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

Mam nadzieję, że to ci pomoże.


Ładne wyjaśnienie tego polecenia: socket: /var/run/mysqld/mysql.sockzadziałało dla mnie
— Yonela Nuba

6

Plik „/tmp/mysql.sock” zostanie utworzony automatycznie po uruchomieniu serwera MySQL. Pamiętaj więc, aby to zrobić przed uruchomieniem serwera railsowego.


3

Przy mojej instalacji MAMP na OSX gniazdo MySQL znajduje się pod adresem /Applications/MAMP/tmp/mysql/mysql.sock. Kiedyś locate mysql.sockznajdowałem lokalizację mojego gniazda MySQL.

Więc mój config/database.ymlwygląd wygląda tak:

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx
  socket: /Applications/MAMP/tmp/mysql/mysql.sock

3

Jeśli korzystasz z Mac OSX,

Domyślna lokalizacja gniazda MySQL Unix różni się w systemach Mac OS X i Mac OS X Server w zależności od wybranego typu instalacji

Lokalizacje gniazd MySQL Unix w systemie Mac OS X według typu instalacji

  • Instalator pakietów z MySQL ------------------ / tmp / mysql.sock

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

  • MySQL w pakiecie z Mac OS X Server ------- / var / mysql / mysql.sock

Więc po prostu zmienić database.yml w socket: /tmp/mysql.sockpkt we właściwym miejscu w zależności od systemu operacyjnego i typu instalacji używasz


2

Domyślna lokalizacja gniazda MySQL w systemie Mac OS X to /var/mysql/mysql.sock.


1

Miałem ten sam problem, ale żadna z odpowiedzi nie wskazywała na krok po kroku tego, co musiałem zrobić. Ten błąd występuje, ponieważ plik gniazda nie został jeszcze utworzony. Wszystko co musisz zrobić to:

  1. Uruchom swój serwer mysql, aby /tmp/mysql.sockzostał utworzony, w tym celu uruchamiasz:mysql server start
  2. Gdy to zrobisz, przejdź do katalogu aplikacji, edytuj config/database.ymlplik i dodaj / edytuj socket: /tmp/mysql.sockwpis
  3. Uruchom rake:dbmigrateponownie i wszystko powinno działać dobrze

rake db:migrate*
— Victor

0

Odkryłem, że problem polega na tym, że mam tylko środowisko produkcyjne. Nie mam środowiska programistycznego ani testowego.

Dodając „RAILS_ENV = produkcja”, aby wydać polecenie

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

zadziałało


0

Jeśli używasz MYSQL przez XAMPP:

  1. Otwórz plik konfiguracyjny XAMPP mysql (na OSX):

    /Applications/XAMPP/etc/my.cnf

  2. Skopiuj ścieżkę gniazda:

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

  3. Otwórz plik konfiguracyjny bazy danych projektu railsów: myproject / config / database.yml

  4. Dodaj konfigurację gniazda do konfiguracji programistycznej bazy danych:

->

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. Zrestartuj serwer szynowy

Cieszyć się :)


0

Masz z tym problem: nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/var/run/mysqld/mysqld.sock'

Odp: $ sudo service mysql start


0

Na moim komputerze usługa mysqld przestała działać, dlatego powodowała ten sam problem.

1: - Przejdź do terminala i wpisz

sudo service mysqld restart

Spowoduje to ponowne uruchomienie usługi mysqld i utworzenie nowego pliku sock w wymaganej lokalizacji.


-1

Jeśli używasz MYSQL przez XAMPP lub LAMPP na Ubuntu lub innym Linuksie, spróbuj:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.