MySQL地狱……无法连接数据库/tmp/mysql.sock

更新:我已经停止正在运行的旧的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 

您正在尝试为服务器和客户端使用不同的套接字。 您的Rails正在尝试连接到/tmp/mysql.sock,MySQL正在侦听/var/mysql/mysql.sock。

通常MySQL配置存储在/etc/my.cnf中,但是在你的输出中我看到套接字路径是作为参数给出的。 所以真的取决于你的系统的细节。

无论如何,请查看/etc/my.cnf和您的database.yml,并确保mysql.sock出现在两个文件中的相同路径中。

不确定这是否能完全解决您的问题(您可能需要按照cababunga的建议修复套接字路径),但请尝试127.0.0.1绕过套接字连接并建立TCP连接。

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

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

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

请注意,它不是您需要更改的主机,它是实际的套接字。 是否有socket:您可以在配置中使用参数?

所以这就是你能做的……

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

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

socket: /var/mysql/mysql.sock

我主要通过OS X上的Python来解决这个问题并以类似的方式修复它,但我猜想Ruby会给你同样的问题。