关于MAC下mysql配置环境时丢失mysql.sock而自身无法生成问题的解决方案

来源:互联网 发布:二代身份证相片 软件 编辑:程序博客网 时间:2024/04/30 21:27

本文纯属个人见解,如有错误,欢迎大家指出!

前天自己在mac下运行mysql时,在Termimal中出现错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' 

于是自行搜索了许多相关方案,花了很长时间最终解决问题,在空余时间将这些答案做了一些整理,加上自己的解决方案,以尽量简洁明了的方式为大家解决相同问题,关于用homebrew来安装mysql的暂不作讨论。


首先,mysql有两种连接方式,即TCP/IP及socket,而mysql.sock是为主机loaclhost建立mysql连接,因此缺失此文件就会导致mysql无法连接。

根据ERROR中的信息得知mysql.sock文件应位于tmp文件夹下(如显示位置,可自行前往相应文件夹),通过Finder进入/tmp下,发现并未找到mysql.sock或是只能找到mysql.sock的替身文件,打开替身文件发现原身已经损坏。

根据情况解决方案分为两种:


1、相应目录下无mysql.sock文件

一般来说,此类问题较容易解决,方案如下:
首先找到mysql的配置文件,/etc/my.cnf(或出现/etc/mysql/my.cnf)打开,

[mysqld]socket=/var/lib/mysql/mysql.sock

出现以上类似字样,说明mysql将mysql.sock文件定位于/var/lib/mysql/mysql.sock位置,我们在这里使用
ln -s /var/lib/mysqld/mysqld.sock /tmp/mysql.sock
对两个目录下的sock文件进行链接。
修改完成后,使用service mysqld restart重启mysql服务,再次输入mysql命令测试问题是否解决。

如果在/var/lib/mysql/下仍未找到sock文件,那么跳转方案2。

如果在/tmp下存在mysql.sock文件,那么将mysqld中的socket改成socket=/tmp/mysql.sock或直接将socket行删除即可。

若在[mysqld]字段中未发现socket字段,在/tmp下也没有发现sock文件,那么使用su进入root使用find / -name mysql.sock来搜索sock文件,找到mysql.sock原身将其复制到my.cnf中提到的位置,默认位置为/tmp/mysql.sock。


2、相应目录下有mysql.sock文件

在这种情况下出现此种问题的原因基本为两种:
一、mysql.sock为替身,而原身损坏
二、文件权限不足,使用 chmod -R 777 /tmp/mysql.sock解决

mysql.sock原身损坏的问题比较少见,首先找到my.cnf中提到的socket位置下的mysql原身,删除原身。
再通过以下代码彻底卸载mysql,重新安装。

sudo rm /usr/local/mysqlsudo rm -rf /usr/local/mysql*sudo rm -rf /Library/StartupItems/MySQLCOMsudo rm -rf /Library/PreferencePanes/My*vim /etc/hostconfig  (and removed the line MYSQLCOM=-YES-)rm -rf ~/Library/PreferencePanes/My*sudo rm -rf /Library/Receipts/mysql*sudo rm -rf /Library/Receipts/MySQL*sudo rm -rf /var/db/receipts/com.mysql.*

再次安装后若出现Termimal提示PID被占用的情况,则使用kill指令杀死相关进程。按方案1的操作将mysql.sock放到指定位置并赋予足够的权限,重启mysql服务,问题得到解决。

1 0
原创粉丝点击