Ruby on Rails 3 Не удается подключиться к локальному серверу MySQL через сокет /tmp/mysql.sock в OSX - PullRequest
81 голосов
/ 31 марта 2011

У меня есть стандартная среда 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

уверен, что это что-то простое, что мне не хватает.

Ответы [ 14 ]

204 голосов
/ 20 июня 2011

Сначала найдите ваш файл сокета:

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
82 голосов
/ 31 марта 2011

Нашли!

Измените host: localhost в config / database.yml на host: 127.0.0.1, чтобы соединить рельсы по TCP / IP вместо локального сокета.

development:
  adapter: mysql2
  host: 127.0.0.1
  username: root
  password: xxxx
  database: xxxx
11 голосов
/ 19 января 2012

Ваш сервер MySQL может не работать.Ниже объясняется, как запустить сервер.Это выдержка из файла README, который поставляется вместе с загрузкой mysql.

После установки вы можете запустить 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)
6 голосов
/ 20 июня 2011

"/ tmp / mysql.sock" будет создан автоматически при запуске сервера MySQL. Поэтому не забудьте сделать это перед запуском сервера rails.

3 голосов
/ 22 сентября 2015

Варианты решения этой проблемы:

Опция 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.Чтобы найти местоположение файла вашего сокета, сделайте следующее:

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 

Я получаю эту ошибку, потому что я установил XAMPP вмоя версия OS X 10.9.5 для приложения PHP.Выберите здесь одно из расположений сокетов по умолчанию.

Я выбираю для приложений по умолчанию 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

Для MySQL в комплекте с Mac OS X Server:

socket: /var/mysql/mysql.sock

Для Ubuntu:

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

Опция 3: Если все эти настройки нене работает, вы можете удалить местоположение вашего сокета:

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

Надеюсь, это поможет вам.

3 голосов
/ 02 октября 2013

Если вы используете Mac OSX,

Расположение по умолчанию для сокета MySQL Unix отличается в Mac OS X и Mac OS X Server в зависимости от выбранного типа установки

Расположение сокетов MySQL Unix в Mac OS X по типу установки

  • Установщик пакетов из MySQL ----------------- / tmp / mysql.sock

  • Tarball от MySQL ------------------------------- / tmp / mysql.sock

  • MySQL в комплекте с Mac OS X Server ------- / var / mysql / mysql.sock

Так что просто измените ваш database.yml в socket: /tmp/mysql.sock, чтобы он указывал на правильное место в зависимости от того, какую ОС и тип установки вы используете

3 голосов
/ 11 апреля 2013

С моей установкой MAMP на OSX сокет 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
2 голосов
/ 31 марта 2011

Расположение по умолчанию для сокета MySQL в Mac OS X: /var/mysql/mysql.sock.

1 голос
/ 30 ноября 2016

У меня была та же проблема, но ни один из ответов не дал пошагового объяснения того, что мне нужно было сделать. Эта ошибка происходит, потому что ваш файл сокета еще не был создан. Все, что вам нужно сделать, это:

  1. Запустите ваш MySQL-сервер, и ваш /tem/mysql.sock будет создан, для этого вы запустите: mysql.server start
  2. Как только это будет сделано, перейдите к config/database.yml и добавьте socket: /tmp/mysql.sock
  3. Запустите rake:dbmigrate еще раз, и все должно работать нормально
0 голосов
/ 10 сентября 2018

Если вы используете MYSQL через XAMPP или LAMPP в Ubuntu или другом Linux, попробуйте:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...