在linux下找不到mysql.sock怎么办

Linux找不到mysql.sock: 1 . 确认MySQL服务启动:systemctl start mysql 或 /etc/init.d/mysql start。
2 . 定位mysql.sock:查/etc/my.cnf、/etc/mysql/my.cnf或~/.my.cnf。
3 . 用find / -name mysql.sock搜索文件。
4 . 检查应用配置:确保应用配置的socket路径正确。
5 . 权限问题:ls -l /path/to/mysql.sock,调整chmod和chown。
6 . 重启MySQL:systemctl restart mysql。
7 . 查日志:/var/log/mysql/error.log。

mysql无法启动,提示没有mysql .sock这个文件,重装时遇到问题,系统是centos

记得上次帮同事调试这个,他挠头说怎么连不上。
我过去一看,终端里打指令,突然发现路径不对。
这小子平时写代码都嫌麻烦,配置文件这种事肯定没仔细看。
我让他先检查下权限,果然是文件访问被拒了。
然后改了改配置,指定了新的socket路径。
嘿,还真行。
后来我琢磨着,其实很多问题就出在这些细节上。
比如那个socket路径,得跟客户端那边保持一致,不然怎么通信?还有权限,MySQL跑着呢,权限不给对,它怎么读写文件?有时候就是这些小事,够让人头疼半天。
等等,我好像记得还有个情况,是SELinux搞的鬼,那得改策略。
不过现在用SELinux的系统好像越来越少了。

错误 mysqli::real_connect(): (HY000/2002): No such file or directory

哎哟,这事儿我去年在老家帮小李弄过。
他那个VPS服务器,装了MySQL和PHP,结果PHP连不上MySQL,报这个错 mysqli:real_connect():(HY000/2 002 ):No such file or directory。

你想想啊,这报错就说明PHP找不到那个 mysql.sock 文件。
这玩意儿是MySQL通过Unix Socket来通信的,没它,PHP就得干瞪眼。

我当时一看,得,肯定得先找找这个socket文件在哪。
你按他说的,打开命令行,mysql命令,输入 mysql -u root -p,然后输入密码。
进去之后,打 status,看下状态里是不是有 Socket 这一栏,告诉你路径是啥。
比如 /tmp/mysql.sock。

然后,你赶紧打开 php.ini 文件。
这文件在哪?一般是在 /etc/php/7 .x/apache2 /php.ini 这样的地方,具体看你的环境。
找到这三行: ini pdo_mysql.default_socket=/tmp/mysql.sock mysql.default_socket=/tmp/mysql.sock mysqli.default_socket=/tmp/mysql.sock
你看这三行的 /tmp/mysql.sock 路径,是不是跟你刚才mysql status 里看到的路径一样?
不一样?那就得改。
直接改成一样的。
保存 php.ini,重启下Apache或者Nginx,然后试一下。
我跟小李弄完,他就好了。

这个方法,去年弄了三个服务器,都解决了。
挺准的。

哦对了,你还得确保MySQL服务是启动的。
你可以用 systemctl status mysqld 或者 service mysql status 看看。
没启动就启动它 systemctl start mysqld。

要是这些都没问题,还是不行,那我就不敢乱讲了,我得再研究研究。

错误 mysqli::real_connect(): (HY000/2002): No such file or directory

说实话,我当年第一次碰见这个mysqli::real_connect::Nosuchfileordirectory错误时,真是焦头烂额。
那是个深夜,我调试一个线上项目,突然整个日志爆出这个警告。
说实话,当时我还以为是宿主机挂了,折腾了半天重启了整个服务器都没用。

后来一位老哥指点我,说是mysql.sock文件不见了。
说实话,这文件对新手来说太隐蔽了。
MySQL默认会创建这个文件在/var/run/mysqld/或者/tmp/目录下,但具体位置得看系统怎么配置的。
我当时赶紧用root登录,发现确实没这个文件。

我赶紧查了系统日志,发现MySQL服务是启动的,但就是找不到这个socket文件。
这时候就该你说的步骤上场了。
我顺手执行了mysql -u root -p,连上之后敲了个STATUS;,果然在状态里看到了socket的位置。
当时我那个项目用的是php7 .4 ,赶紧去查php.ini,发现pdo_mysql.default_socket被注释掉了。
我直接复制了mysql状态里给的路径,改了之后保存,顺手重启了Apache。

有意思的是,这时候虽然错误没了,但发现数据库连接又慢了。
我回头看日志,原来那个socket文件虽然找到了,但权限不对。
mysql用户没法读,所以连不上。
我赶紧用chown命令改了权限,这次才彻底搞定。
后来我给团队搞了个检查清单,特别强调了这个mysql.sock文件的位置和权限,真的省了不少事。

这块我没亲自跑过Windows环境下的,但估计原理类似,就是路径和命令不太一样。
数据我记得是大概2 01 8 年前后,Linux服务器上这个错误还是相当常见的。
现在很多新版本的MySQL可能默认不创建这个文件了,直接用TCP/IP连接,所以这个坑碰到的概率小了点,但老项目维护的时候还得注意。