最近租了一个阿里云云翼服务器,趁着自己还是一个学生,享受一下优惠。我租的是阿里云Ubuntu16.04版本的服务器,在搭建mysql的时候,一开始是可以运行的,由于某次手抽,把mysql的套接字文件不小心删除了,然后无论怎么卸载重装,都出现了这个问题:

  1. root@iZufkfljcZ:~# mysql -uroot -p

  2. Enter password:

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

  网上找了好久,搜到的全部是重复的文章而且也没讲明为什么出现这个问题,找了一天才找到一篇讲解mysql.sock文件作用的文章,然后分析一下为什么出现这个问题,现在讲之总结一下,以备后人查阅。

  我出现的问题是:找不到mysql.sock,如果你可以运行

  1. find / -name mysql.sock

这条命令,并且能查到结果的话,只需将查到的结果做一个软连接到/tmp目录下即可解决(网上都是这么解决的)。

但是,我执行了这条语句之后,并没有任何反应,没有找到mysql.sock文件。

在这之前,需要明白mysql.sock这个文件有什么用?

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

如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。

如果和我一样,重启服务器还是没有任何变化,你可以先执行下面的语句:

  1. # mysql -uroot -h 127.0.0.1 -p

不出意外,这句话应该是可以执行的,你现在不能用套接字建立连接因为它不见了,所以可以建立一个TCP/IP连接
如果套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一个或使用一个不同的套接字文件,我的解决办法是重新指定一个不同的套接字,或者说,我现在没有mysql.sock文件,所以我要想办法生成一个。

首先,更改my.cnf文件,我的服务器中的目录为/etc/my.cnf,如果没有的话可以用find去查找,

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

  1. # chmod 777 /var/lib/mysql

准备步骤做好,然后就是mysql和mysqld服务重启

  1. # service mysql  restart

  2. # service mysqld restart

我在重启mysqld服务的时候,重启失败了,显示如下:

  1. root@iZufkfljcZ:~# service mysqld start

  2. Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalc

  3. 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服务重启需要这个目录,那就建一个吧:

  1. root@iZufkfljcZ:~# mkdir /var/run/mysqld

  2. root@iZufkfljcZ:~# chmod 777 /var/run/mysqld/

  3. root@iZufkfljcZ:~# service mysqld start

  4. root@iZufkfljcZ:~#

建完目录后,重新运行mysqld服务,发现重启成功了,那么我们再来看看为什么刚才要建这个目录呢?打开这个目录看看:

  1. root@iZufkfljcZ# ls /var/run/mysqld

  2. mysqld.pid  mysqld.sock  mysqld.sock.lock

发现了一个熟悉的东西,mysqld.sock,但是这个是不是我们需要的东西呢?不管他,先用这个sock文件登下mysql看看行不行:

  1. root@iZufkfljcZ:/var/run/mysqld# mysql -uroot -p -S /var/run/mysqld/mysqld.sock

  2. Enter password:

  3. Welcome to the MySQL monitor.  Commands end with ; or \g.

  4. Your MySQL connection id is 4

  5. Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)

  6. Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

  7. Oracle is a registered trademark of Oracle Corporation and/or its

  8. affiliates. Other names may be trademarks of their respective

  9. owners.

  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  11. mysql>

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

  1. root@iZufkfljcZ:~# ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

  2. root@iZufkfljcZ:~# ls /tmp/

  3. mysql.sock

这样,tmp目录下就有了my.cnf配置文件中需要的mysql.sock文件了,然后把my.cnf改回就行了,


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

  1. root@iZufkfljcZ:/var/run/mysqld# mysql -uroot -p

  2. Enter password:

  3. Welcome to the MySQL monitor.  Commands end with ; or \g.

  4. Your MySQL connection id is 5

  5. Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)

  6. Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

  7. Oracle is a registered trademark of Oracle Corporation and/or its

  8. affiliates. Other names may be trademarks of their respective

  9. owners.

  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  11. mysql>

  OK,搞定收工,用了快一天时间在解决这个问题上,感觉收获还是挺多的,Linux的学习任重而道远啊!

转载于:https://blog.51cto.com/xiaocao13140/2126129

解决Can 't connect to local MySQL server throug相关推荐

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

    1.遇到了这个报错: 2. 网上查到这样一篇博客, 感谢作者, : 亲测有效,解决Can 't connect to local MySQL server through socket '/tmp/m ...

  2. 解决Can not connect to local MySQL server through socket tmpmysql.sock (2)

    转载路径:https://blog.csdn.net/guanripeng/article/details/79626250 连接mysql报错: [root@iZwz9di9z56eqb94oj0a ...

  3. mysql socket错误_解决Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’错误...

    晚上清理mysql日志,强制重启了下mysql,然后mysql就登陆不上了... 以下方法来自网络,可以使用,已试. 刚安装完mysql,进行运行测试,报Can't connect to local ...

  4. mysql socket错误处理_解决Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’错误...

    晚上清理mysql日志,强制重启了下mysql,然后mysql就登陆不上了... 以下方法来自网络,可以使用,已试. 刚安装完mysql,进行运行测试,报Can't connect to local ...

  5. MySQL笔记-解决Can't connect to local MySQL server through socket '/xx/xx/mysql.sock' (111)及(2)

    前几天才源码安装的MySQL,过几天,登进去一看,都运行不了了.这里记录下解决办法: 首先拷贝一个my.cnf到/etc/目录下.搜索下linux上有几个mysql.socket 这里有2个mysql ...

  6. Can't connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘ (2)解决思路

    首先说明一下mysql.sock文件的作用: 连接mysql有两种方式,第一种是TCP/IP,第二种就是直接使用unix domain socket,它比TCP/IP块. mysql.sock是在my ...

  7. Can’t connect to local MySQL server through socket的解决方法

    Can't connect to local MySQL server through socket的解决方法 参考文章: (1)Can't connect to local MySQL server ...

  8. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)解决方法

    登陆mysql的时候,出现了这个问题: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' ( ...

  9. Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'的解决

    Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'的解决 原因是目录 的访问权限问题,ub ...

最新文章

  1. JavaScript语言基础5
  2. Linux jobs等前后台运行命令详解
  3. GridView导出Excel研究
  4. lucene 简单示例
  5. PIE 支持项目介绍
  6. 210322阶段三QT事件循环及opencv图像处理
  7. 万云:区块链可帮助公证行业创新改革,为互联网公证打下基础
  8. 损失函数——交叉熵损失函数
  9. mysql开启中继日志,MySQL复制应用中继日志解析
  10. python中字典的用法_Python中字典的详细用法
  11. python实现文件管理系统_Python - 文件管理系统
  12. redis 下载源地址
  13. MTK手机烧录与调试
  14. App Store与苹果签名
  15. 小米手机怎么开启开发者模式
  16. 根据Landset 8计算植被覆盖度
  17. c++ 模板----成员函数模板
  18. 未来量子计算机运算速度,中国科学家实现 “量子霸权”,计算速度比超级计算机快100万亿倍...
  19. 基于 ESO-PLL 的永磁同步电机无位置传感器控制
  20. QQ邮箱获取邮件客户端授权码

热门文章

  1. 多源信息融合_华测导航王超:基于RTK的GNSS与多源融合定位技术和挑战
  2. [Java]Thinking in Java 练习2.12
  3. python多线程理解
  4. eclipse3.4+对的处理插件(附SVN插件安装实例)
  5. 【CSS 】动画animation
  6. Quartz(任务调度)- job串行避免死锁
  7. 神奇的计算器dc和bc
  8. JAVA 的普通加法运算
  9. 第 11 章 使用 ViewPager
  10. C/C++新建注册表项实例