MySQL錯誤ERROR 2003 (HY000) Can't connect to MySQL server .' (111)

来源:https://www.cnblogs.com/kerrycode/archive/2023/03/24/17251451.html
-Advertisement-
Play Games

在MySQL中,如果訪問/連接MySQL資料庫時遇到“ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx:xxx' (111)”這個錯誤,我們應該從哪些方面進行考慮和排查問題呢? 下圖是我總結整理的一個思維導圖, ...


在MySQL中,如果訪問/連接MySQL資料庫時遇到“ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx:xxx' (111)”這個錯誤,我們應該從哪些方面進行考慮和排查問題呢? 下圖是我總結整理的一個思維導圖,在遇到這個錯誤時的排查方向和排查思路。

下麵來演示/介紹一個比較特殊的案例,在伺服器上訪問當前主機的MySQL時遇到了“ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:7306' (111)”

$ mysql -h 127.0.0.1 -u test -p  --port=7306
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:7306' (111)
$ perror 111
OS error code 111:  Connection refused

其實訪問本地MySQL,根本不用檢查127.0.0.1這個IP是否能ping通,不過為了以防萬一,我們還是驗證一下

$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.046 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.073 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.071 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.072 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.071 ms
^C
--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4099ms
rtt min/avg/max/mdev = 0.046/0.066/0.073/0.013 ms

檢查MySQL實例狀態

然後我們檢查一下MySQL服務是否正常,MySQL實例是否Crash掉了。

方式1:

$ sudo systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-03-13 15:01:43 CST; 1 weeks 2 days ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 143115 (mysqld)
   Status: "Server is operational"
    Tasks: 47 (limit: 49256)
   Memory: 1.4G
   CGroup: /system.slice/mysqld.service
           └─143115 /opt/mysql/mysql8.0/bin/mysqld --defaults-file=/data/conf/my.cnf

Mar 13 15:01:40 yictmysqlu01 systemd[1]: Starting MySQL Server...
Mar 13 15:01:43 yictmysqlu01 systemd[1]: Started MySQL Server.

方式2:

ps -Af | grep mysqld | grep -v grep
mysql     143115       1  1 Mar13 ?        03:47:43 /opt/mysql/mysql8.0/bin/mysqld --defaults-file=/data/conf/my.cnf

如上所示,MySQL實例正常的,所以可以排除MySQL實例關閉或MySQL實例Crash的情況。

檢查MySQL的監聽埠

使用下麵命令檢查MySQL的監聽埠

$ netstat -lnp | grep mysql
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.9.203:7306      0.0.0.0:*               LISTEN      143115/mysqld       
tcp6       0      0 :::33060                :::*                    LISTEN      143115/mysqld       
unix  2      [ ACC ]     STREAM     LISTENING     3188552  143115/mysqld        /tmp/mysqlx.sock
unix  2      [ ACC ]     STREAM     LISTENING     3191315  143115/mysqld        /tmp/mysql.sock

如上所示,監聽埠為7306,訪問MySQL時指定的埠號也是7306,沒有什麼毛病。因此也可以排查這個因素。

檢查參數bind-address

檢查MySQL的配置文件中的bind-address參數

方式1:

$ grep bind_address my.cnf
bind_address=192.168.9.203

方式2:

mysql> SELECT VARIABLE_NAME, VARIABLE_VALUE
    -> FROM performance_schema.global_variables
    -> WHERE VARIABLE_NAME = 'bind_address';
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| bind_address  | 192.168.9.203   |
+---------------+----------------+
1 row in set (0.01 sec)

mysql>

bind-address的設置有以下三種情況:

bind-address=127.0.0.1  #只允許本機訪問。
bind-address=某個網卡的ip #例如bind-address=192.168.9.203,只能通過ip為192.168.9.203的網卡訪問。
bind-address=0.0.0.0    #此規則是系統預設配置,監聽所有網卡,即允許所有ip訪問。

這裡由於設定參數bind_address=192.168.9.203,所以當我們使用127.0.0.1訪問資料庫就會被拒絕,從而拋出上面的錯誤。

那麼這裡有一個問題,如果資料庫裡面創建了兩個賬號test@'127.0.0.1'和test@'localhost',那麼test@'localhost'是否也會遇到這個錯誤呢?你的答案是會還是不會呢? 正確答案是不會,因為localhost和127.0.0.1兩者是有所區別的(下麵部分內容來自參考資料[1]):

一、原理不同:

localhost的原理是不經網卡傳輸,不會受到網卡協議的限制。設置程式時本地服務用localhost,localhost不會解析成IP,也不會占用網卡、網路資源。 127.0.0.1的原理是經過網卡傳輸的,依賴網卡協議,並受到網卡相關協議的限制。使用IP訪問的時候,等於本機是通過網路再去訪問本機,會涉及到網路用戶的許可權。

二、概念不同

localhost:也可以叫是local,正確的解釋是:本地伺服器的意思。它可以被配置為任意的IP地址可以通過hosts這個文件進行更改,不過通常情況下都指向:127.0.0.1 127.0.0.1:在windows系統的正確解釋是:本機地址的意思。127.0.0.1是保留地址之一,用來檢驗本機TCP/IP協議棧,可以Ping回送地址。如果回送地址Ping不通,就說明IP堆棧出了故障。如果通的話,表明網路出了問題。

三、指向不同

localhost是一個保留功能變數名稱(RFC 2606) ,為了避免同狹義定義主機名混淆而單獨列出。它不僅指向 127.0.0.1 這個IP地址,它同時還可以指向ipv6 的地址 。 127.0.0.1 是回送地址,指本地機,測試使用。回送地址(127.x.x.x)是本機回送地址(Loopback Address),即主機IP堆棧內部的IP地址,主要用於網路軟體測試以及本地機進程間通信,無論什麼程式,一旦使用回送地址發送數據,協議軟體立即返回,不進行任何網路傳輸。

具體原因如下:

mysql -h 127.0.0.1 訪問MySQL的時候,使用 TCP/IP 連接

mysql -h localhost 訪問MySQL的時候,它不會使用 TCP/IP 連接的,而使用Unix socket;此時,MySQL Server則認為該 client 是來自 “localhost”

參考資料

[1]

參考資料: https://www.termilk.com/181.html

掃描上面二維碼關註我 如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力! 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 應用程式級別代碼壞味道 1.1. 布爾盲點 1.1.1. 由於函數使用布爾值而導致的信息缺失 1.1.2. 解決方案是將布爾替換為枚舉類型 1.2. 組合爆炸 1.2.1. 不同的代碼使用不同的參數組合來執行同一件事情的產物 1.2.2. 解決方案使用泛型 1.3. 人為複雜性 1.3.1.  ...
  • 1 降壓 電容有容抗,可以承擔分壓的作用。容抗計算如下 Xc=1/(2πfc) 其中 f 為電流頻率 ,c 為電容大小。 計算電容分壓時不要忘記電容電壓相位差與電阻等普通元件相差π/2。 例如下圖,若要電容分壓210v,則需要電容分擔電壓大小為Vc=(220^2-10^2)^0.5=219.77v, ...
  • 本系列旨在交流 ESP32-S3 硬體開發環境的搭建,通過一些基本的示例來展示怎麼用 ESP-IDF (Espressif IoT Development Framework) 來安裝、配置環境,並編譯、下載固件至 BPI-Leaf-S3 開發板等步驟。如果有什麼沒提到或者有問題的,歡迎各位留言交流... ...
  • 存儲過程 特定功能的的SQL指令 進行封裝 編譯之後存儲在資料庫伺服器中客戶端通過名字調用這個SQL指令集 優點: 防止SQL 在網路中惡意修改 無需客戶端編寫 通過網路傳送 存儲過程 SQL存在邏輯關係 支持流程式控制制 分支 迴圈 ##基本語法 創建存儲過程 輸入參數 a 輸入參數b 都是 int ...
  • windows安裝redis及配置教程,附網盤資源 鏈接:https://pan.baidu.com/s/1KvcyY27_q7aI2hQ7QRsEGA?pwd=iidx 一、windows系統安裝及配置 解壓文件,準備開始配置、安裝服務。 1.1、註冊redis的windows服務 在該文件夾中打 ...
  • windows安裝mysql8免安裝版教程,附網盤資源 鏈接:https://pan.baidu.com/s/1_qagfA-i7CbeWG3urIAlgw?pwd=iidx 提取碼:iidx 一、前言 本次使用的mysql版本為mysql8.0.32,安裝的系統為windows系統。使用免安裝的方 ...
  • 本文分享自華為雲社區《選擇KV資料庫最重要的是什麼?》,作者:GaussDB 資料庫 。 經常有客戶提到KV資料庫,但卻偏偏“不要Redis”。比如有個做安全威脅分析平臺的客戶,他們明確表示自己對可靠性要求非常高,需要的不是開源Redis這種記憶體緩存庫,而是KV資料庫。 雖然最後我也沒問清楚他們業務 ...
  • 一、工具介紹 YCSB 於 2010 年開源,YCSB是雅虎開源的NoSQL測試工具,通常用來對noSQL資料庫進行性能,註意此工具僅支持varchar和text類型,且列的長度可以增加,預設是10列,可以根據自己的需要增加列長。運行一個壓力測試需要 6 步: 配置需要測試的資料庫 選擇合適的資料庫 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...