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

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

Во-первых, чтобы найти файл сокета:

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

Ответ 2

Нашел его!

Измените 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

Ответ 3

Возможно, ваш сервер 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)

Если вы не используете Startup Item, введите следующую последовательность команд:

 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)

Ответ 4

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

Ответ 5

С моей установкой 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

Ответ 6

Если вы находитесь на Mac OSX,

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

MySQL Unix Socket Locations в Mac OS X по типу установки

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

  • Tarball из MySQL -------------------------------/tmp/mysql.sock

  • MySQL, связанный с сервером Mac OS X -------/var/mysql/mysql.sock

Итак, просто измените database.yml < на то, чтобы указать нужное место в зависимости от того, какую ОС и тип установки вы используете

Ответ 7

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

Ответ 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: Кажется, у вас есть 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 в своей ОС 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:

socket: /var/mysql/mysql.sock

Для Ubuntu:

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

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

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

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

Ответ 9

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

  • Запустите ваш mysql-сервер, поэтому ваш /tem/mysql.sock создан, чтобы сделать это: mysql.server start
  • Как только это будет сделано, перейдите к config/database.yml и добавьте socket: /tmp/mysql.sock
  • Запустите rake:dbmigrate еще раз, и все должно нормально работать.

Ответ 10

Я обнаружил, что проблема в том, что у меня есть только производственная среда. У меня нет среды разработки или тестирования.

Добавив 'RAILS_ENV = production', чтобы дать команду

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

он работал

Ответ 11

Если вы используете MYSQL через XAMPP:

  • Откройте файл конфигурации XAMPP mysql (в OSX):

    /Applications/XAMPP/etc/my.cnf

  • Скопируйте путь сокета:

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

  • Открыть файл конфигурации базы данных проекта rails: MyProject/конфигурации/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
  1. Перезапустить сервер рельсов

Наслаждайтесь:)

Ответ 12

У вас есть проблемы с этим: Не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock'

Ans: $sudo service mysql start

Ответ 13

На моей машине служба mysqld остановилась, почему она дала мне ту же проблему.

1: - Перейдите к терминалу и введите

sudo service mysqld restart

Это перезапустит службу mysqld и создаст новый файл-носок в нужном месте.