MySQL ад ... не могу подключиться к базе данных /tmp/mysql.sock - PullRequest
4 голосов
/ 23 ноября 2010

Обновление: Я ОСТАНОВИЛ старый процесс mysql, который работал и вызывал некоторую путаницу.Теперь я думаю, что у меня работает только более новая версия (5.1.40).НО, это указывает на неправильный файл данных.Он указывает на файл данных установки по умолчанию, и я бы хотел, чтобы он указывал на существующий файл данных в /var/mysql.Вот часть /etc/my.cnf

# The following options will be passed to all MySQL clients
[client]
#password   = your_password
port        = 3306
socket      = /var/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port        = 3306
socket      = /var/mysql/mysql.sock

, это указывает на более старый mysql.sock.Я не могу найти в дереве каталогов более новой установки MySQL?!?если это где-то неясно.

Кто-нибудь поможет?По сути, я установил более новую версию MySQL, и теперь мне нужно запустить эту новую версию с моими существующими данными.И разберитесь с этим mysql.sock ...


Я недавно обновил MySQL на Mac OS X Server, и у меня чертовски много времени подключается к нему из приложения rails.или последовательно из командной строки по этому вопросу.

Я уверен, что это очевидная ошибка с моей стороны, но у меня только умеренный опыт работы с командной строкой, поэтому я надеюсь, что кто-то может помочь ...

также связано то, что мое приложение rails больше не можетподключения.Не удается подключиться через /tmp/mysql.sock, но я не уверен, почему он там смотрит, потому что в / tmp нет mysql.sock, и я не знаю, что / где должно быть ....

Редактировать: добавить результаты из mysql_config --sockets

$ mysql_config --sockets
Usage: /usr/local/mysql/bin/mysql_config [OPTIONS]
Options:
        --cflags         [-I/usr/local/mysql/include  -g -Os -arch ppc -fno-common   -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT  -DDONT_DECLARE_CXA_PURE_VIRTUAL]
        --include        [-I/usr/local/mysql/include]
        --libs           [-arch ppc  -L/usr/local/mysql/lib -lmysqlclient -lz -lm     -lmygcc]
        --libs_r         [-arch ppc  -L/usr/local/mysql/lib -lmysqlclient_r -lz -lm     -lmygcc]
        --plugindir      [/usr/local/mysql/lib/plugin]
        --socket         [/tmp/mysql.sock]
        --port           [0]
        --version        [5.1.40]
        --libmysqld-libs [-arch ppc  -L/usr/local/mysql/lib -lmysqld -ldl  -lz -lm       -lmygcc]

Редактировать2 , которые mysql_config

$ which mysql_config
/usr/local/mysql/bin/mysql_config

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

Вы пытаетесь использовать разные сокеты для сервера и клиента. Ваш Rails пытается подключиться к /tmp/mysql.sock, MySQL прослушивает /var/mysql/mysql.sock.

Обычно конфигурация MySQL хранится в /etc/my.cnf, но в вашем ps выводе, который я вижу, путь к сокету задается в качестве параметра. Так что действительно зависит от особенностей вашей системы.

В любом случае, загляните в /etc/my.cnf и ваш database.yml и убедитесь, что mysql.sock отображается по одному пути в обоих файлах.

1 голос
/ 23 ноября 2010

Функция real_connect в модуле Ruby MySQL на самом деле принимает несколько параметров:

real_connect(host,user,password,db,port,socket,flags)

То, что вам нужно изменить, это параметр "socket".В моих приложениях Python в Mac OS X я должен установить для этого параметра сокета значение /var/mysql/mysql.sock.

Так что обратите внимание, что вам не нужно менять хост, это фактический сокет.Есть ли параметр socket:, который вы можете использовать в вашей конфигурации?

Итак, вот что вы можете сделать ...

Запустите команду mysql_config --socket в командной строке терминала в операционной системе.X и он должен вернуть вам значение «сокета», которое вам нужно использовать (вероятно, /var/mysql/mysql.sock).

Затем в вашем файле database.yml обязательно добавьте строку:

socket: /var/mysql/mysql.sock

Я в основном сталкивался с этим через Python на OS X и исправил его аналогичным образом, но я собираюсь предположить, что Ruby даст вам ту же проблему.

1 голос
/ 23 ноября 2010

Не уверен, что это полностью решит вашу проблему (вам может потребоваться исправить путь к сокету, как предложено cababunga), но попробуйте 127.0.0.1, чтобы обойти соединение с сокетом и установить TCP.

...