目录
问题探索
报错 ERROR 2002 (HY000): Can't connect to local MySQL server
find / -type s命令查看所有的sock文件
locate命令查询所有的my.cnf
mysql --help | grep my.cnf查看my.cnf使用顺序
解决方案
方式一:配置/etc/my.cnf
方式二:启动mysql使用指定的my.cnf
#:~$ mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
根据上面的报错,意思是说mysql想使用/var/run/mysqld/mysqld.scok文件,但是无法连接,接下来我们去看看这个文件是否存在
#:~$ sudo find / -type s
/var/lib/samba/private/msg.sock/1290
...
/var/lib/samba/private/msg.sock/1353
/var/lib/lxd/unix.socket
/tmp/passenger.6xSWPfu/agents.s/core_api
...
/tmp/passenger.6xSWPfu/apps.s/ruby.xsuZhbYJEZihtVsr5naA7RtUfnDtqRS7KIE4Kc66Tdl5PLc4NjjX2nRJw3BFeZg
/run/acpid.socket
...
/run/udev/control
/opt/phpproject.cn/mysql/tmp/mysql.sock
/opt/redmine-4.1.1-0/mysql/tmp/mysql.sock
/opt/old-redmine-releases/redmine-4.1.1-0-old2/redmine-4.1.1-0/mysql/tmp/mysql.sock
可以看到,其中并没有 /var/run/mysqld/mysqld.sock
你也可以切换到该目录,同样印证socket文件所在目录并不存在。
:~$ cd /var/run/mysqld
-bash: cd: /var/run/mysqld: No such file or directory
既然这是一个不存在的文件,那么说明肯定有哪个配置文件指向了该位置,经过查询,发现一般这个sock文件时由mysql的my.cnf配置的,不过这个文件有多个位置
my.cnf是mysql的配置文件,存放的是sock的位置
yjl@fibocom:~$ locate my.cnf
/etc/mysql/my.cnf
/etc/mysql/my.cnf.fallback
/opt/phpproject.cn/mysql/my.cnf
/opt/redmine-4.1.1-0/mysql/my.cnf
/var/lib/dpkg/alternatives/my.cnf
那么这么多my.cnf,到底是哪个my.cnf指定了/var/run/mysqld/mysqld.sock呢?我们接下来继续分析
#:/$ mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
结果显示,mysql会首先读取/etc/my.cnf 然后才会读取 /etc/mysql/my.cnf 最后读取各个用户目录下的.my.cnf
/etc/my.cnf并不存在,那么当在界面输入mysql -uxxx -p时,就会首先去寻找/etc/mysql下的my.cnf
打开/etc/mysql/my.cnf,可以看到这个文件其实引入的是两个目录
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
而真正需要配置的文件在/etc/mysql/mysql.conf.d/mysqld.cnf。
我们如果想让mysql使用我们指定的my.cnf,要么在/etc/my.cnf,要么就要在使用命令时手动指定my.cnf
这部很简单,如果我想让mysql启动使用我希望的应用的my.cnf,那么直接复制甚至使用软链接或硬链接即可(第二个我没尝试,不过你可以试一下)
#$ sudo cp /opt/redmine-4.1.1-0/mysql/my.cnf my.cnf
或
#创建软链接
#:/etc/$sudo ln -s /opt/phpproject.cn/mysql/my.cnf my.cnf
这里有三点需要注意
1)my.cnf需要增加[mysqld]才可以的,当然,其他配置也是必不可少的,我没深入研究
2)my.cnf权限必须是644的,如果文件权限过大(全局可写),MySQL 会出现安全考虑不会读取该配置文件,而且读取自身的配置副本文件,我看了下,这两个配置都没什么问题。
3)必须重启mysql才可以生效
注意,--default-file与-u -p参数的位置,不能反过来
mysql --defaults-file=/opt/redmine-4.1.1-0/mysql/my.cnf -ubitnami -p
来源:
记一次Linux修改MySQL配置不生效的问题
https://stackoverflow.com/questions/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq
https://stackoverflow.com/questions/8020297/mysql-my-cnf-file-found-option-without-preceding-group