日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

解决Can 't connect to local MySQL server throug

發布時間:2023/12/15 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决Can 't connect to local MySQL server throug 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近租了一個阿里云云翼服務器,趁著自己還是一個學生,享受一下優惠。我租的是阿里云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的學習任重而道遠啊!


    轉載于:https://blog.51cto.com/xiaocao13140/2126129

    總結

    以上是生活随笔為你收集整理的解决Can 't connect to local MySQL server throug的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。