mysql -uroot -p 报错 ERROR 2002 (HY000): Can‘t connect to local MySQL server

目录

问题探索

报错 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


问题探索

报错 ERROR 2002 (HY000): Can't connect to local MySQL server

#:~$ 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文件,但是无法连接,接下来我们去看看这个文件是否存在

find / -type s命令查看所有的sock文件

#:~$ 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配置的,不过这个文件有多个位置

locate命令查询所有的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查看my.cnf使用顺序

#:/$ 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

方式一:配置/etc/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才可以生效

方式二:启动mysql使用指定的my.cnf

注意,--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

你可能感兴趣的:(mysql)