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 79

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 to host: 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 на Mac OS X является /var/mysql/mysql.sock.

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

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

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

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

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

он работал

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

  1. открыть файл конфигурации XAMPP mysql (на OSX):

    / Applications / XAMPP / etc / my.cnf

  2. скопируйте путь сокета:

    socket = /Applications/XAMPP/xamppfiles/var/mysql / mysql.носок

  3. открыть файл конфигурации базы данных проекта rails: myproject/config / database.в формате YML

  4. добавьте конфигурацию сокета в конфигурация базы данных разработки:

-->

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. перезапустить сервер rails

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

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

Ans: $ sudo service mysql start

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

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

sudo service mysqld restart

это перезапустит сервис mysqld и создаст новый файл sock на требуемом месте.

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

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