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
- Перезапустить сервер рельсов
Наслаждайтесь:)
Ответ 12
У вас есть проблемы с этим: Не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock'
Ans: $sudo service mysql start
Ответ 13
На моей машине служба mysqld остановилась, почему она дала мне ту же проблему.
1: - Перейдите к терминалу и введите
sudo service mysqld restart
Это перезапустит службу mysqld и создаст новый файл-носок в нужном месте.