今天在搬瓦工上使用mysql 命令行,总报一个这样的错:Can’t connect to local MySQL server through socket ‘/xxxxx/mysql.sock’,一开始很郁闷,回来经过查找资料,解决了这个问题.
当在本地系统连接到mysql服务器的时候,mysql 客户端通过一个叫做"socket"的本地文件进行连接,而不是通过本地环回接口(loopback)127.0.0.1进行连接.这个文件,默认情况下,客户端会去/var/lib/mysql/mysql.sock去寻找,但是我在安装的时候,这个文件是在usr/local/mysql/mysql.sock.
通过mysql --help发现,有个--socket参数:-S, --socket=name The socket file to use for connection.这个可用用来指定socket文件位置,但是每次都要设定,太痛苦了
为了一劳永逸,我们可以更改mysql配置文件my.cnf,文件位置是这样规定的:
Table 5.2 Option Files Read on Unix and Unix-Like Systems
File Name | Purpose |
---|---|
/etc/my.cnf |
Global options |
/etc/mysql/my.cnf |
Global options |
|
Global options |
$MYSQL_HOME/my.cnf |
Server-specific options (server only) |
defaults-extra-file |
The file specified with --defaults-extra-file , if any |
~/.my.cnf |
User-specific options |
~/.mylogin.cnf |
User-specific login path options (clients only) |
[mysqld] datadir=/var/mysql/data/ socket=/usr/local/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log #pid-file=/var/run/mysqld/mysqld.pid pid-file=/var/mysql/data/www.chenhui.site.pid
我一开始总以为只要改socket="xxxx.sock"就可以了,可是不管用,弄了半天,又查资料,才知道,client在进行连接时,也要设定它使用的sock,我的配置文件中没有client的配置项,在官方手册中,是这样的
[client] port=3306 socket=/tmp/mysql.sock
于是,我在自己的配置文件中加上client项,并指定socket为自己安装时的目录:/usr/local/mysql/mysql.sock
然后kill mysqld的进程,重新启动mysqld_safe,再用mysql客户端连接,不再报错了,OK了.