Ruby on Rails 3 не может подключиться к локальному серверу MySQL через socket '/tmp/mysql.носок-на 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)
конфигурация / база данных.в формате YML имеет
development:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
конечно, это что-то простое, что мне не хватает.
14 ответов:
во-первых, чтобы найти файл сокета:
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
нашли его!
изменить
host: localhost
в базе данных конфигурации/.yml tohost: 127.0.0.1
чтобы рельсы подключались через TCP / IP вместо локального сокета.development: adapter: mysql2 host: 127.0.0.1 username: root password: xxxx database: xxxx
ваш сервер 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)
" /tmp / mysql.носок" будет создан автоматически при запуске сервера MySQL. Поэтому не забудьте сделать это перед запуском сервера rails.
С моей установкой 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
Если вы находитесь на Mac OSX,
расположение по умолчанию для сокета MySQL Unix отличается на Mac OS X и Mac OS X Server в зависимости от выбранного типа установки
расположение сокетов MySQL Unix на Mac OS X по типу установки
- установщик пакетов из MySQL ------------------/tmp / mysql.носок
- Тарбол из MySQL ------------------------------- /tmp / mysql.носок
- MySQL в комплекте с Mac OS X Server - - - - - - - /var/mysql/mysql.носок
Так что просто измените свой
вот варианты решения этой проблемы:
Вариант 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
Я надеюсь, что это поможет вам.
у меня была та же проблема, но ни один из ответов не дал шаг за шагом того, что мне нужно было сделать. Эта ошибка происходит потому, что ваш файл сокета еще не создан. Все, что вам нужно сделать, это:
- запустите сервер mysql, так что ваш
/tem/mysql.sock
создается, для этого запустите:mysql.server start
- как только это будет сделано, перейдите в свой
config/database.yml
и добавитьsocket: /tmp/mysql.sock
- выполнить
rake:dbmigrate
еще раз и все должно тренироваться отлично
Я обнаружил, что проблема в том, что у меня есть только производственная среда. У меня нет среды разработки или тестирования.
добавив 'RAILS_ENV=production', чтобы дать команду
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
он работал
Если вы используете MYSQL через XAMPP:
открыть файл конфигурации XAMPP mysql (на OSX):
/ Applications / XAMPP / etc / my.cnf
скопируйте путь сокета:
socket = /Applications/XAMPP/xamppfiles/var/mysql / mysql.носок
открыть файл конфигурации базы данных проекта rails: myproject/config / 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
- перезапустить сервер rails
наслаждайтесь :)
У вас есть проблема с таким образом: не удается подключиться к локальному серверу MySQL через socket '/var/run/mysqld/mysqld.носок'
Ans: $ sudo service mysql start