MySQL连接问题...无法连接到数据库/tmp/mysql.sock。

6

更新:我已经停止运行旧版的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的问题...


我最近在Mac OS X Server上更新了MySQL,在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]

Edit2 指的是 mysql_config。

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

不想显得太蠢,但我必须问一下...你确定已经从命令行运行了 mysql.server start 命令吗? - Alex
永远不要高估我;-) 我会检查...好的。命令返回:-bash: mysql.server: command not found。我可以连接到“旧”数据库..并且有一个mysqld进程,所以我假设其中一个正在运行。 - Meltemi
3个回答

2
你正在尝试为服务器和客户端使用不同的套接字。你的Rails正试图连接到/tmp/mysql.sock,但MySQL正在监听/var/mysql/mysql.sock。
通常,MySQL配置存储在/etc/my.cnf中,但在你的ps输出中,我看到套接字路径被作为参数给出。因此,这真的取决于你系统的具体情况。
无论如何,请查看/etc/my.cnf和database.yml,并确保mysql.sock在两个文件中的路径相同。

那么,我该如何找到要使用的套接字?我能列出它们吗?我假设我想连接与新版本MySQL相关联的套接字。 - Meltemi
2
那个安装在 /usr/local/mysql 下的新版本呢?在我看来,你没有运行这个实例。 - cababunga
好的,这帮了很多。我想问题出在 OS X Server 的管理工具上,即使我以为它已经“死亡”,它们仍然让我的旧 mysql 继续运行。现在正在研究如何处理这个问题... - Meltemi
1
默认位置在10.5和10.6之间切换了.sock文件。要么将新文件链接到旧位置,要么适当修复(ruby|php|mysql)配置。 - Bruce Alderson
抱歉,我甚至找不到新的mysql.sock文件,因此无法为其创建符号链接。此特定服务器正在运行OS X 10.5.8(如果这有关系)。 - Meltemi
显示剩余3条评论

1

不确定这是否能完全解决你的问题(你可能需要像 cababunga 建议的那样修复套接字路径),但尝试使用 127.0.0.1 来绕过套接字连接并建立 TCP 连接。


请问您能否给我一个例子来说明您的意思?我并不是命令行的专家,只是知道一些基本操作...但也会遇到麻烦(显然),所以我不确定您所说的 127.0.0.1 是什么意思,因为我只知道它是本地主机的IP地址。 - Meltemi
@Meltemi 我的意思是在 yml 文件中指定 host: 127.0.0.1 - Pekka

1

Ruby MySQL模块中的real_connect函数实际上需要一堆参数:

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

你需要更改的是"socket"参数。在我的Mac OS X Python应用程序中,我必须将该socket参数设置为/var/mysql/mysql.sock

所以请注意,你需要更改的不是主机,而是实际的socket。你的配置文件中是否有可以使用的socket:参数?

这是你可以做的...

在OS X终端中的命令行中运行mysql_config --socket命令,它应该会返回你需要使用的"socket"的值(可能是/var/mysql/mysql.sock)。

然后在你的database.yml文件中,确保添加以下行:

socket: /var/mysql/mysql.sock

我大多数情况下都是通过Python在OS X上运行并以类似的方式进行修复,但我猜Ruby也会给你带来同样的问题。


谢谢帮忙!所以,mysql_config --socket返回了/tmp/mysql.sock。但是在我的/tmp目录中却没有“mysql.sock”?!? - Meltemi
当您进行检查时,MySQL是否正在运行?我认为除非MySQL在运行,否则该文件不会存在。您还可以尝试这个命令:mysql -e \"show variables like 'socket'\"并查找socket参数(如果需要,请不要忘记添加用户名/密码参数)。 - Brent Writes Code
好的。现在我已经成功停止了旧版MySQL,并使新版本运行!现在能够从mysql_config --socket(见上文)中获得一些反馈了。但是,它仍然指出套接字为 /tmp/mysql.sock,但在/tmp目录下没有这样的文件?所以不确定发生了什么事。 - Meltemi
1
只是出于好奇,你确定你运行的 mysql_config 命令是针对新数据库而不是旧数据库的吗?你可能需要在命令行上执行 which mysql_config 并进行双重检查。 - Brent Writes Code
我个人认为,我会在.yml文件中尝试socket: /tmp/mysql.socksocket: /var/mysql/mysql.sock这两种方式(分别尝试),看看哪一种可行。 - Brent Writes Code
似乎是新的mysql_config...我现在在想,也许新的mysql没有指向正确的数据文件?!? - Meltemi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接