/tmp/mysql.sock 找不到以及/var/lib/mysql/mysql.sock 找不到解决方法

在做MySQL多实例的实验中遇到的问题?
浏览了很多博客,知道原因是出在:服务找不到mysql.sock文件。

下面是整个过程:
使用的软件版本是:mysql-5.7.25-linux-glibc2.12-x86_64
解压文件之前已做如下操作:
#systemctl stop mariadb
]# rpm -qa | grep mariadb 已删除mariadb 相关软件
]# mv /etc/my.cnf /etc/my.cnf.bak
]# rm -rf /etc/my.cnf
解压后新建多实例的配置文件 vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = root

[mysqld1]
port=3307
datadir=/dataone
socket=/dataone/mysqld.sock
log-error=/dataone/mysqld.log
pid-file=/dataone/mysqld.pid

[mysqld2]
port=3308
datadir=/datatwo
socket=/datatwo/mysqld.sock
log-error=/datatwo/mysqld.log
pid-file=/datatwo/mysqld.pid

]# mkdir -p /dataone
]# mkdir -p /datatwo
]# useradd mysql
]# chown mysql:mysql /data*
]# mysql
报错: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

摸索过程:
——# find /-name mysql.sock 知道不到文件

——# mysql -uroot -h127.0.0.1 -p 失败
( Can’t connect to MySQL server on ‘127.0.0.1’ (111)

——vim /etc/my.cnf.bak 重新查看之前的配置文件
socket=/var/lib/mysql/mysql.sock 这里是sock文件的位置
根据错误的提示建立新的软连接:
]# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
]# mysql -u root -p
成功登录进去了!!!

哎!!又遇到了问题了!
这次是Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
同时又没有 /tmp/mysql.sock。

令人发愁,试了很多方法也无用,别的主机的套接字sock文件没法拷贝到问题主机上。
——# mysql -uroot -h127.0.0.1 -p 也失败
无奈之下只能把配置文件/etc/my.cnf/中里面的socket变量注释掉,使用默认变量。
在此之前可以先考虑把/var/lib/mysql 下面的文件都删除,之后重启重新生成。
]# vim /etc/my.cnf
##socket=/var/lib/mysql/mysql.sock 注释改行;
]# systemctl restart mysqld
启动成功了
]# cd /var/lib/mysql
]# ls
这时候又有mysql.sock了
之后再重新#socket=/var/lib/mysql/mysql.sock 把注释去掉。

重置密码在MySQL 学习三中提到!!不难!

鉴于多次出现该问题,还是要知其然自其所以然,多搜了点资料!总结如下:
Mysql有两种连接方式:MySQL客户可以两种不同的方式连接mysqld服务器:Unix套接字,它通过在文件系统中的一个文件(缺省“/tmp/mysqld.sock”)进行连接;或TCP/IP,它通过一个端口号连接。

(1)TCP/IP

(2)socket 作用: 发起本地连接

mysql.sock是随每一次 mysql server启动生成的,因此mysql服务连接不上的根本原因还是配置文件设置出问题了。
MySQL下mysql.sock丢失丢失的原因一般是因为配置文件不一致的原因,mysqld 错误启动,mysqld_safe 会清除一次mysql.sock 。

你可能感兴趣的:(错题集)