设为首页 收藏本站
查看: 584|回复: 0

[经验分享] 解决Can 't connect to local MySQL server throug-Jarvis

[复制链接]

尚未签到

发表于 2018-10-5 12:22:27 | 显示全部楼层 |阅读模式
  最近租了一个阿里云云翼服务器,趁着自己还是一个学生,享受一下优惠。我租的是阿里云Ubuntu16.04版本的服务器,在搭建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,如果你可以运行

  •   find / -name mysql.sock
  这条命令,并且能查到结果的话,只需将查到的结果做一个软连接到/tmp目录下即可解决(网上都是这么解决的)。
  但是,我执行了这条语句之后,并没有任何反应,没有找到mysql.sock文件。
  在这之前,需要明白mysql.sock这个文件有什么用?
  连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。
  如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。
  如果和我一样,重启服务器还是没有任何变化,你可以先执行下面的语句:

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

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

  •   # chmod 777 /var/lib/mysql
  准备步骤做好,然后就是mysql和mysqld服务重启

  •   # 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.

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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-612658-1-1.html 上篇帖子: 高效查看MySQL帮助文档的方法 下篇帖子: mysql查看表索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表