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 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...