这就要说Linux平台环境下Mysql 主要有两种连接方式
(1)TCP/IP
(2)socket
一般情况下客户端在一台服务器上, 而MySQL实例在另一台服务器上,两台机器通过一个TCP/IP网络连接
对mysql.sock来说,其作用是程序与mysqlserver处于同一台机器,发起本地连接时可用
通过TCP/IP连接MySQL实例时,MySQL会先检查一张权限表,用来判断发起请求的客户端IP是否允许连接到MySQL实例。该表就是MySQL库下面的user表。
shell>mysql -u username -p password -P port -h IP
[root@tse2 bin]# mysql -u root -p 123456 -P 3306 -h 192.168.0.2
UNIX Socket连接方式其实不是一个网络协议,所以只能在MySQL客户端和数据库实例在同一台服务器上的情况下使用。
shell>mysql -u username -p password -S /mysql/tmp/mysql.sock
[root@tse2 bin]# mysql -u root -p 123456 -S /mysql/tmp/mysql.sock
mysql.sock的作用是server和client在同一台服务器,并且使用localhost进行链接的时候,就会使用socket来进行连接,也就是:为主机名为localhost建立的MySQL连接,该连接过程通过一个套接字文件mysql.socket实现的。所以该文件被删后,用localhost用户是连接不到MySQL服务器的。而mysql.sock是随每一次 mysql 启动生成的,已经根据Mysql配置文件(mysql.ini/mysql.cnf)重启mysql时重新生成了一次,信息已跟着变更
注意:mysql.sock是一个临时文件,启动mysql后才会生成。
报错的原因:而linux(默认)将其放在/tmp目录。
配置文件(mysql.ini/mysql.cnf)中指定套接字文件的路径,如socket=/mysql/tmp/mysql.sock
解决方法
查看 /tmp 目录下是否存在 以.sock结尾的文件,有的话进行删除
find /tmp -name mysql*.sock
然后重启mysql,查看mysql的配置文件,查看mysql配置文件my.cnf的文件的socket的配置路径(我的为/tmp/mysql-5.6.sock).是否存在
重新连接 mysql -uroot -p
还是报原来的错误,这是我们需要创建软链接,源文件必须为前文my.cnf中自己配置的socket文件的路径 ,目标文件则为报错时的mysql.sock文件目录,我的为/tmp/mysql.sock
sudo ln -s /tmp/mysql-5.6.sock /tmp/mysql.sock
这时重新使用命令就可链接上
引用链接博客
Tse先生 https://www.cnblogs.com/Sungeek/archive/2020/01/16/12200546.html
Trrrrinity https://blog.csdn.net/github_37216944/article/details/78843685