一、问题
MT7688开发板第二次开机的时候,MySQL无法启动,于是在OpenWrt执行mysql -u root -p
,出现ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
。根据网上方法,依次排除。
第一个,我移植的OpenWrt的MySQL没有status这个命令。
第二个,cd tmp/run
发现第一次初始化MySQL完成后产生的mysql.sock文件不见了。
第三个,
/etc/init.d/mysqld start
后重新产生了一个mysql.sock文件。
二、原因
1.偶尔会出现mysql的server和mysql的client默认的socke文件不在一个地方,我们用mysql时会出现一个找不到mysql.sock的情况。
linux系统一次不正常关机后,连接mysql的时候系统提示不能通过/tmp/mysql.sock文件进行连接,或者非正确关闭时,导致mysql.sock文件再次丢失,当你在次启动时出现如下错误,connect mysqld faild ,/tmp/mysql.sock can't find mysql.sock的丢失主要是因为更改了机器名,在没有正确关闭mysqld的情况下,去执行mysqld_safe,这样他就删除已经运行的mysql.sock了。正常情况下,mysqld_safe 应该告诉我们是已经有Mysqld运行了,而上边并没有这样提示,主要是更改机器名导致mysqld_safe判断是否已经运行,去找的是newhostname.pid文件,但已经运行的mysqld生成的是oldhostname.pid, 肯定找不到newhostname.pid,所以mysqld_safe收拾一下(清理了mysql.sock),然后去重启,但是ibdata需要lock,它lock不了,还是起不了,但是老的mysql.sock就消失。
2.因非正常关机出现:/tmp/mysql.sock 不见了,找不到了,如何连接上去的问题?(其他机器通过tcp可以的)。
连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。
如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。
三、解决方法
通过修改mysql.sock产生保存的位置。
Ubuntu中cd /work/openwrt-hiwooya-stable-master/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/root-ramips/etc
找到my.cnf
vim my.cnf
将socket的位置改到其他目录下重启OpenWrt后发现mysql.sock保存在了/usr目录下,这样下次启动就不会丢失了。
• 由 Leung 写于 2018 年 10 月 24 日
• 参考:Mysql ERROR 2002,mysql.sock问题
[偶尔遇到]找不到mysql.sock的出现原因及解决方案和mysql 默认mysql.sock位置默认问题探讨 不指定