Can't Connect to MySQL Server on IP Address (10061) 錯誤的解決方案

HiJiangChuan發表於2021-11-19

Can't Connect to MySQL Server on IP Address (10061) 錯誤的解決方案

如果你打算從遠端連線 MySQL 伺服器的話,有可能會碰到 10061 錯誤,這個錯誤特別常見,通常的錯誤提示是「Driver Error, Can’t connect to MySQL server on ‘YOUR_IP_ADDRESS’ (10061)」

導致 10061 這個錯誤的情況有兩種

  • 登入賬號遠端訪問許可權問題
  • MySQL 配置檔案設定問題

本教程將詳細講解,如何針對這兩種情況進行配置,以修正 10061 錯誤。

特別提示:關於如何開啟 MySQL 遠端訪問功能,可看這篇《如何遠端連線 MySQL 資料庫,阿里雲騰訊雲外網連線教程》,如果想開啟伺服器可檢視這份教程,本篇教程只講開啟後,為什麼會出現 10061 錯誤。另外推薦一下卡拉雲,只要你能寫 SQL ,不會任何前端也可以用卡拉雲快速搭建屬於自己的後臺管理系統,詳見本文文末

一. 授權登入 MySQL 伺服器的賬號遠端訪問許可權

如果賬號沒有遠端訪問許可權或 host 配置錯誤,會導致 10061 錯誤。我們可以新建一個賬號用於遠端登入,也可以修改已有賬號的 host 配置,使它可以遠端訪問。

1. 新建用於遠端登入的 MySQL 賬號

MySQL 使用者賬號是否可以遠端登入,取決於賬號中的 host 配置。host 指定該賬號在哪些主機上可以登入,如果是本地使用者可用 localhost,如果是遠端使用者,需要指定遠端計算機的 IP,如果想任意主機均可登入,那麼可以使用萬用字元 %

本教程使用萬用字元 % 來作為賬號 host 的設定,你可以根據自己的情況將 % 改為指定主機 IP,這樣可以是 MySQL 遠端登入更加安全。

首先登入 MySQL Server

mysql -u root -p

然後新建一個用於遠端登入的 MySQL 賬號,這裡的「password」換成你的密碼,如果MySQL 設定為嚴格密碼的話,需要「數字+英文大小寫+符號」

CREATE USER 'kalacloud.com-remote'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

接著,根據自己的需要,給你用於遠端訪問的賬號賦予許可權。下面的例子是給賬號全域性許可權,包括建立(CREATE)、修改(ALTER)、刪除(DROP) 資料庫、表、使用者,任意表的插入(INSERT)、更新(UPDATE)、刪除(DELETE)操作許可權。可以使用 SELECT 查詢資料,使用 REFERENCES 建立外來鍵關係許可權,以及使用 RELOAD 許可權執行 FLUSH 操作的許可權。

當然,你也可以根據自己都需求,對賬號許可權進行調整。

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'kalacloud.com-remote'@'%' WITH GRANT OPTION;

最後,執行 FLUSH PRIVILEGES 命令,重新整理 MySQL 的系統許可權相關表,更新快取。

FLUSH PRIVILEGES;

擴充套件閱讀:最好用的 10 款 MySQL / MariaDB 管理工具橫向測評 - 免費和付費到底怎麼選?

2. 將已有賬號更改為可遠端登入的賬號

如果你不想新建賬號,只是想沿用已經有的MySQL 登入賬號,那麼我們也可以直接把它改為可遠端登入的賬號。

首先,我們檢視 MySQL 所有賬號

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

[SELECT-DISTINCT-CONCAT

接下來,我們把 'kalacloud.com'@'localhost' 這個賬號改為可遠端登入的賬號。我們把這個賬號 host 改為任意主機(%)或者是固定主機 ip 。可以使用 RENAME USER 命令來實現:

RENAME USER 'kalacloud.com'@'localhost' TO 'kalacloud.com'@'%';

執行後,再檢視 MySQL 所有賬號列表

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

kalacloud-users-mysql

我們可以看到 'kalacloud.com'@'localhost' 已經變為 'kalacloud.com'@'%' 了。

特別提示:如果你使用的是 MySQL 8.0,使用這個賬號遠端登入可能會出現caching_sha2_password 報錯,這是因為 MySQL 8.0 預設認證方式改為 SHA2 了,如果不支援 SHA2 外掛認證方式,那麼就會報錯,比如使用 Workbench 和 Squel Pro 登入時,如下圖。

MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/lib/plugin/caching_sha2_password.so, 2): image not found

sequel-pro

我們可以把使用 caching_sha2_plugin 認證的'kalacloud'@'%'賬號改為使用密碼認證。

ALTER USER 'kalacloud.com'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

最後執行 FLUSH PRIVILEGES命令 重新整理 MySQL 系統許可權相關表,更新快取

FLUSH PRIVILEGES;

至此,MySQL 遠端登入賬號部分就配置完成了,如果還是報 10061 錯誤,那麼你還應該檢查 MySQL 配置檔案是否有問題。

擴充套件閱讀:MySQL Workbench 中文使用指南

二. 改 MySQL 配置檔案

在預設情況下,MySQL 資料庫僅監聽本地連線。如果想讓外網遠端連線到資料庫,我們需要修改配置檔案,讓 MySQL 可以監聽遠端固定 ip 或者監聽所有遠端 ip。

首先開啟 mysqld.cnf 配置檔案。

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到 bind - address 這一行,如下圖所示。

mysqld

預設情況下, bind - address 的值為 127.0.0.1 ,所以只能監聽本地連線。我們需要將這個值改為遠端連線 ip 可訪問,可使用萬用字元 ip 地址 *::0.0.0.0 ,當然也可以是單獨的固定 ip,這樣就僅允許指定 ip 連線,更加安全。

mysqld-bind-address

提示:在某些 MySQL 版本的配置檔案中,沒有 bind - address 這一行,這種情況下,在合適的位置加上就可以了。

提示:在某些 MySQL 版本的配置檔案中,沒有 bind - address 這一行,這種情況下,在合適的位置加上就可以了。

更改後,儲存並退出編輯器(使用 CTRL+X 儲存並退出 nano 編輯器。)

然後重啟 MySQL 服務,使剛剛編輯的 mysqld.cnf 檔案生效:

sudo systemctl restart mysql

擴充套件閱讀:如何在 MySQL / MariaDB 中查詢和刪除重複記錄?

三. 總結

到這裡,只要你跟著教程走,一定已經解決了 MySQL 10061 錯誤。

MySQL 除了遠端連線這類適合使用終端命令操作外,大多數對 MySQL / MariaDB 資料匯入匯出操作還是為了資料展示、分析、協同共享等產品和運營層面的應用場景。

比如後端工程師接到產品需求,協助匯出某類資料等場景,如果這類需求頻繁出現,推薦使用卡拉雲。

卡拉雲是新一代低程式碼開發工具,免安裝部署,可一鍵接入包括 MySQL 在內的常見資料庫及 API。不僅可以像命令列一樣靈活,還可根據自己的工作流,定製開發。無需繁瑣的前端開發,只需要簡單拖拽,即可快速搭建企業內部工具。數月的開發工作量,使用卡拉雲後可縮減至數天。

卡拉雲可快速接入的常見資料庫及 API

卡拉雲可快速接入的常見資料庫及 API

卡拉雲可根據公司工作流需求,輕鬆搭建資料看板,並且可分享給組內的小夥伴共享資料

僅需拖拽一鍵生成前端程式碼

僅需拖拽一鍵生成前端程式碼,簡單一行程式碼即可對映資料到指定元件中。

卡拉雲快速搭建企業內部工具

卡拉雲可直接新增匯出按鈕,匯出適用於各類分析軟體的資料格式,方便快捷。現在使用卡拉雲,搭建屬於自己的後臺管理工具。

有關 MySQL 教程,可繼續擴充學習:

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章