亲测有效,解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ";

 最近租了一个阿里云云翼服务器,趁着本身仍是一个学生,享受一下优惠。我租的是阿里云Ubuntu16.04版本的服务器,在搭建mysql的时候,一开始是能够运行的,因为某次手抽,把mysql的套接字文件不当心删除了,而后不管怎么卸载重装,都出现了这个问题:mysql


root@iZufkfljcZ:~# mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  网上找了很久,搜到的所有是重复的文章并且也没讲明为何出现这个问题,找了一天才找到一篇讲解mysql.sock文件做用的文章,而后分析一下为何出现这个问题,如今讲之总结一下,以备后人查阅。
  我出现的问题是:找不到mysql.sock,若是你能够运行sql

find / -name mysql.sock
这条命令,而且能查到结果的话,只需将查到的结果作一个软链接到/tmp目录下便可解决(网上都是这么解决的)。
可是,我执行了这条语句以后,并无任何反应,没有找到mysql.sock文件。ubuntu

在这以前,须要明白mysql.sock这个文件有什么用?服务器

链接localhost一般经过一个Unix域套接字文件进行,通常是/tmp/mysql.sock。若是套接字文件被删除了,本地客户就不能链接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。socket

若是你由于丢失套接字文件而不能链接,你能够简单地经过重启服务器从新建立获得它。由于服务器在启动时从新建立它。学习

若是和我同样,重启服务器仍是没有任何变化,你能够先执行下面的语句:测试


# mysql -uroot -h 127.0.0.1 -p
不出意外,这句话应该是能够执行的,你如今不能用套接字创建链接由于它不见了,因此能够创建一个TCP/IP链接
若是套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一个或使用一个不一样的套接字文件,个人解决办法是从新指定一个不一样的套接字,或者说,我如今没有mysql.sock文件,因此我要想办法生成一个。
首先,更改my.cnf文件,个人服务器中的目录为/etc/my.cnf,若是没有的话能够用find去查找,ui

 

接下来就是保存退出,而后确保这个目录存在,而且将这个目录的权限修改一下阿里云


# chmod 777 /var/lib/mysql
准备步骤作好,而后就是mysql和mysqld服务重启.net

# service mysql restart
# service mysqld restart
我在重启mysqld服务的时候,重启失败了,显示以下:
root@iZufkfljcZ:~# service mysqld start
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalc
tl -xe" for details.
这个时候,提示能够输入systemctl status mysqld.service去查看具体的失败缘由,因而:

****************************************************************************************

root@iZufkfljcZ:~# systemctl status mysqld.service
● mysqld.service - LSB: start and stop MySQL
  Loaded: loaded (/etc/init.d/mysqld; bad; vendor preset: enabled)
  Active: failed(Result: exit-code) since 三 2017-12-20 10:38:30 CST; 45s ago
Docs: man:systemd-sysv-generator(8)
 Process: 2154 ExecStart=/etc/init.d/mysqld start (code=exited, status=1/FAILURE)


12月 20 10:38:29 iZufkfljcZ systemd[1]: Starting LSB: start and stop MySQL...
12月 20 10:38:29 iZufkfljcZ mysqld[2154]: Starting MySQL
12月 20 10:38:29 iZufkfljcZ mysqld_safe[2689]:Logging to '/var/log/mysql/error.log'.
12月 20 10:38:29 iZufkfljcZ mysqld_safe[2693]:Directory '/var/run/mysqld' for UNIX socket file don't exists.
12月 20 10:38:30 iZufkfljcZ mysqld[2154]: . * The server quit without updating PID file (/var/run/mysqld/mysqld.pid).
12月 20 10:38:30 iZufkfljcZ systemd[1]: mysqld.service: Control process exited, code=exited status=1
12月 20 10:38:30 iZufkfljcZ systemd[1]: Failed to start LSB: start and stop MySQL.
12月 20 10:38:30 iZufkfljcZ systemd[1]: mysqld.service: Unit entered failed state.
12月 20 10:38:30 iZufkfljcZ systemd[1]: mysqld.service: Failed with result 'exit-code'.


****************************************************************************************

根据提示可知,/var/run/mysqld目录不存在,也就是说mysqld服务重启须要这个目录,那就建一个吧:


root@iZufkfljcZ:~# mkdir /var/run/mysqld
root@iZufkfljcZ:~# chmod 777 /var/run/mysqld/
root@iZufkfljcZ:~# service mysqld start
root@iZufkfljcZ:~#
建完目录后,从新运行mysqld服务,发现重启成功了,那么咱们再来看看为何刚才要建这个目录呢?打开这个目录看看:

root@iZufkfljcZ# ls /var/run/mysqld
mysqld.pid mysqld.sock mysqld.sock.lock
发现了一个熟悉的东西,mysqld.sock,可是这个是否是咱们须要的东西呢?无论他,先用这个sock文件登下mysql看看行不行:

root@iZufkfljcZ:/var/run/mysqld# mysql -uroot -p -S /var/run/mysqld/mysqld.sock
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2017, 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>

这么一运行,发现好像能够了,那接下来好办了,咱们把以前改的配置改回来就好了,以前的目录应该是/tmp/mysql.sock,咱们能够创建一个软链接连上去就能够了,

root@iZufkfljcZ:~# ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
root@iZufkfljcZ:~# ls /tmp/
mysql.sock
这样,tmp目录下就有了my.cnf配置文件中须要的mysql.sock文件了,而后把my.cnf改回就好了,

到此为止,咱们的mysql应该已经彻底修复了,那么咱们再测试一下吧:


root@iZufkfljcZ:/var/run/mysqld# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2017, 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.

相关文章
相关标签/搜索