欢迎光临
我们一直在努力

彻底解决mysql.sock经常丢失的问题

php利用socket来链接mysql数据库默认的套接字地址是/tmp/mysql.sock,而在centos下面的cron机制会定期删除tmp目录下面没有改动的文件,故而很多人会因/tmp/mysql.sock时常性的丢失而烦恼。

  • 错误1,ssh无法直接登录mysql,报无法链接/tmp/mysql.sock
[root@localhost ~]# /usr/local/mysql/bin/mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

最简单的解决方式是查看mysql的配置文件vi /etc/my.cnf,查看socket的配置项。

[root@localhost ~]# vi /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks

然后直接建立软链接

[root@localhost ~]# ln -s /data/mysql/mysql.sock /tmp/mysql.sock

再次登录,一切正常。

[root@localhost ~]# /usr/local/mysql/bin/mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 868
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

问题到这里是解决了,但是我们开始就说过cron机制会定期清理tmp目录没有变动的文件(有资料显示说是240小时清理一次),也就是说这个mysql.sock还会被清理掉,那有什么办法解决这一问题吗,答案当然是有的,我们只要在my.cnf配置中添加以下配置项就可以。

[client]
socket=/data/mysql/mysql.sock
#有资料显示,配置中socket的参数一定要和上面的[mysqld]配置中一样。

然后重启数据库,就完美解决了。

[root@localhost ~]# service mysql restart
Shutting down MySQL............ SUCCESS! 
Starting MySQL.. SUCCESS! 

另类解决方法,在登录的时候直接设置登录地址127.0.0.1(不推荐

[root@localhost ~]# /usr/local/mysql/bin/mysql -u root -h 127.0.0.1 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1090
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  • 错误2,php程序无法通过localhost来链接数据库,只能通过127.0.0.1来链接数据库。
mysqli::real_connect(): (HY000/2002): No such file or directory

对于以上这个错误,phpmyadmin登录不上的问题,我原来写过一文章,phpmyadmin-无法登录 MySQL 服务器的错误 详细介绍了把localhost改成127.0.0.1的方法,在这里并不推荐,原因是原来一直认为127.0.0.1要比localhost的链接速度快,但经过测试正好相反,127.0.0.1大约要比localhost慢三分之一。

php默认情况下链接mysql数据库的套接字地址也是/tmp/mysql.sock,上面报错找不到文件,相信一定也是找不到套接字地址,如果大家不确定,可以用phpinfo()函数来查看一下sock的地址是不是我们所说的默认的这个地址,解决php的这一问题,我们只需要配置php的socket的链接地址就可以了,首先我们先查看php的配置文件php.ini所在位置。

[root@VM_0_7_centos ~]# php --ini
Configuration File (php.ini) Path: /usr/local/php/lib
Loaded Configuration File:         /usr/local/php/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

修改配置内容 vi /usr/local/php/lib/php.ini,把pdo_mysql.default_socket,mysqli.default_socket二个的值改为my.cnf中socket的配置地址,如果是php5还要配置mysql.default_socket,然后重启php就可以了。

pdo_mysql.default_socket=/data/mysql/mysql.sock
mysqli.default_socket = /data/mysql/mysql.sock

赞(0) 打赏
原创文章转载请注明出处:爱编程 » 彻底解决mysql.sock经常丢失的问题
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

爱编程、一个运维兼程序员的博客!

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏