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
最新评论
感谢
能不能屏蔽掉刷流量的,统计工具显示全部都是
路过学习了
好像不太行啊 加载不出来啊
好文章
是否可以 实现 判断手机端跳转 而网址不变呢
你好
感谢分享,我也遇到这个了,根据你的提示,屏蔽掉了