问题
Update: I've STOPPED the older mysql process which was running and causing some confusion. Now I think I have only the newer (5.1.40) version running. BUT, it's pointing to the wrong data file. It's pointing to a default install data file and I'd like it to point to the existing data file in /var/mysql
. Here's a portion of /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
this is pointing to the older mysql.sock. I can't seem to find in the directory tree of the newer MySQL install?!? unless it's somewhere obscure.
Anyone help? Basically I installed a newer MySQL and now need to get this new version to launch with my existing data. And sort out this mysql.sock thing....
I've recently updated MySQL on Mac OS X Server and am having a hell of a time connecting to it from a rails app. or consistently from the command-line for that matter.
i'm sure this is an obvious error on my part but I only have moderate command-line experience so hoping someone can help...
also related is my rails app no longer can connect. Failing to connect via /tmp/mysql.sock
but I'm not sure why it's looking there because there is no mysql.sock in /tmp and I don't know what/where it should be....
Edit: adding results from 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 which mysql_config
$ which mysql_config
/usr/local/mysql/bin/mysql_config
回答1:
You are trying to use different sockets for the server and client. Your Rails is trying to connect to /tmp/mysql.sock, by MySQL is listening on /var/mysql/mysql.sock.
Normally MySQL configuration is stored in /etc/my.cnf, but in your ps
your output I see socket path is given as a parameter. So really depends on your system's specifics.
Anyway, look in /etc/my.cnf and your database.yml and make sure mysql.sock appears at the same path in both files.
回答2:
Not sure whether this will completely solve your problem (you may need to fix the socket path as suggested by cababunga), but try 127.0.0.1
to bypass the socket connection and establish a TCP one.
回答3:
The function real_connect
in the Ruby MySQL module actually takes a bunch of parameters:
real_connect(host,user,password,db,port,socket,flags)
The one you need to change is the "socket" parameter. On my Python apps on Mac OS X, I have to set that socket parameter to be /var/mysql/mysql.sock
.
So notice, it's not the host you need to change, it's the actual socket. Is there a socket:
parameter you can use in your config?
So here's what you can do...
Run the command mysql_config --socket
on your command line in a terminal in OS X and it should return you the value of the "socket" you need to use (probably /var/mysql/mysql.sock
).
Then in your database.yml file, make sure you add the line:
socket: /var/mysql/mysql.sock
I've mostly run into this via Python on OS X and fixed it in a similar fashion, but I'm going to guess that Ruby will give you the same issue.
来源:https://stackoverflow.com/questions/4251009/mysql-hell-cant-connect-to-database-tmp-mysql-sock