修復(fù)常見 MySQL 錯(cuò)誤的有用提示

yanding 2023-07-24 441

MySQL 是 Oracle 旗下廣泛使用的開源關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDMS)。多年來,它一直是基于網(wǎng)絡(luò)的應(yīng)用程序的標(biāo)準(zhǔn)選擇,并且與其他網(wǎng)絡(luò)平臺(tái)相比仍然很受歡迎。

MySQL 是針對(duì) Web 應(yīng)用程序設(shè)計(jì)和優(yōu)化的 – 它在 Facebook、Twitter、Wikipedia、YouTube 等主要 Web 應(yīng)用程序中發(fā)揮著關(guān)鍵作用。

MySQL 是否為您的數(shù)據(jù)庫提供支持?在這篇綜合文章中,我們將解釋如何解決 MySQL 數(shù)據(jù)庫服務(wù)器中的常見問題和錯(cuò)誤。我們將討論如何確定問題的原因以及如何解決它們。

1. 無法連接本地MySQL服務(wù)器

MySQL 中最常見的客戶端-服務(wù)器通信錯(cuò)誤之一是\ERROR 2002 (HY000): Cannot connect to the local MySQL server via socket '/var/run/mysqld/mysqld.sock'(2)”?!薄?/span>

修復(fù)常見 MySQL 錯(cuò)誤的有用提示

此錯(cuò)誤表明(mysqld)主機(jī)系統(tǒng)上沒有運(yùn)行 MySQL 服務(wù)器,或者您在嘗試連接到服務(wù)器時(shí)指定了不正確的 Unix 套接字文件名或 TCP/IP 端口。

mysqld通過使用 grep 命令檢查數(shù)據(jù)庫服務(wù)器主機(jī)上指定的進(jìn)程來驗(yàn)證服務(wù)器是否正在運(yùn)行,如圖所示。

$ ps 的 | mysqld | grep mysqld | grep -v mysqld mysqld

如果上述命令沒有顯示結(jié)果,則數(shù)據(jù)庫服務(wù)器未運(yùn)行。因此,客戶端無法連接。要啟動(dòng)服務(wù)器,請(qǐng)運(yùn)行以下 systemctl 命令。

$ sudo systemctl 啟動(dòng) mysql$ sudo systemctl start mysqld # RHEL / CentOS / Fedora

要驗(yàn)證 MySQL 服務(wù)的狀態(tài),請(qǐng)使用以下命令。

$ sudo systemctl status mysql #Debian/Ubuntu$ sudo systemctl status mysqld # RHEL / CentOS / Fedora

修復(fù)常見 MySQL 錯(cuò)誤的有用提示

從發(fā)出上述命令來看,MySQL服務(wù)失敗。在這種情況下,您可以嘗試重新啟動(dòng)并再次檢查其狀態(tài)。

$sudo systemctl 重新啟動(dòng) mysql$sudo systemctl 狀態(tài) mysql

修復(fù)常見 MySQL 錯(cuò)誤的有用提示

另外,如果服務(wù)器按照以下命令運(yùn)行,但仍然出現(xiàn)上述錯(cuò)誤,則還必須驗(yàn)證是否有任何防火墻或網(wǎng)關(guān)服務(wù)器阻止了 TCP/IP 端口......

$ ps 的 | mysqld | grep mysqld | grep -v mysqld mysqld

得到netstat命令如圖所示。

$ sudo netstat -tlpn | sudo netstat -tlpn grep “mysql”

2. 無法連接MySQL服務(wù)器

另一個(gè)常見的連接錯(cuò)誤是“(2003) Can't connect to MySQL server on 'server' (10061)”,表示網(wǎng)絡(luò)連接被拒絕。

此時(shí),首先檢查系統(tǒng)上是否有 MySQL 服務(wù)器正在運(yùn)行,如上所示。另請(qǐng)確保服務(wù)器已啟用網(wǎng)絡(luò)連接,并且您用于連接的網(wǎng)絡(luò)端口是服務(wù)器上配置的網(wǎng)絡(luò)端口。

嘗試連接 MySQL 服務(wù)器時(shí)可能遇到的其他常見錯(cuò)誤包括:

錯(cuò)誤 2003:無法連接到“host_name”上的 MySQL 服務(wù)器 (111)錯(cuò)誤 2002:無法通過套接字“/tmp/mysql.sock”連接到本地 MySQL 服務(wù)器(111)

這些錯(cuò)誤表明服務(wù)器可能正在運(yùn)行,但是您正在嘗試使用與服務(wù)器正在偵聽的端口、命名管道或 Unix 套接字文件不同的 TCP/IP 端口、命名管道或 Unix 套接字文件進(jìn)行連接。

3. 在 MySQL 中獲取拒絕錯(cuò)誤

在 MySQL 中,用戶帳戶是根據(jù)用戶名和用戶可以連接到服務(wù)器的客戶端主機(jī)來定義的。此外,帳戶還可能具有密碼等憑證。

雖然導(dǎo)致“拒絕訪問”錯(cuò)誤的原因有很多,但最常見的原因之一是服務(wù)器允許客戶端應(yīng)用程序在連接時(shí)使用的 MySQL 帳戶。表示在連接上指定的用戶名無權(quán)訪問數(shù)據(jù)庫。

MySQL 允許創(chuàng)建帳戶,使客戶用戶能夠連接到服務(wù)并訪問由服務(wù)管理的數(shù)據(jù)。在這種情況下,如果您遇到登錄被拒絕錯(cuò)誤,請(qǐng)檢查是否允許用戶帳戶通過您正在使用的業(yè)務(wù)協(xié)議連接到服務(wù)器,并可能檢查連接來源的主機(jī)。

SHOW GRANTS您可以使用所示命令查看給定帳戶的權(quán)限。

> 顯示 'howtoing'@'localhost' 的資助;

您可以使用 MySQL 堆棧中的以下命令向特定站點(diǎn)上的特定用戶授予遠(yuǎn)程 IP 地址的權(quán)限。

> 將 *.test_db 的所有權(quán)限授予 'howtoing'@'192.168.0.100';> 同花順特權(quán);

此外,連接到 MySQL 的問題也可能導(dǎo)致訪問被拒絕錯(cuò)誤,請(qǐng)參閱前面解釋的錯(cuò)誤。

4. 失去與 MySQL 服務(wù)器的連接

您可能會(huì)因以下原因之一遇到此錯(cuò)誤:網(wǎng)絡(luò)連接不良、連接超時(shí)或 BLOB 值大于 max_allowed_packet 的問題。如果存在網(wǎng)絡(luò)連接問題,請(qǐng)確保網(wǎng)絡(luò)連接良好,尤其是當(dāng)您要訪問遠(yuǎn)程數(shù)據(jù)庫服務(wù)器時(shí)。

如果是連接超時(shí)問題,特別是當(dāng)MySQL嘗試使用主連接到服務(wù)器時(shí),請(qǐng)?jiān)黾觕onnect_timeout參數(shù)的值。但是,對(duì)于大于 max_allowed_packet 的 BLOB 值,您必須在 /etc/my.cnf 配置文件的[mysqld]or[client] te. 字段中為 max_allowed_packet 設(shè)置更高的值,如下所示。

[mysqld]連接超時(shí)= 100最大允許數(shù)據(jù)包 = 500M

如果您沒有 MySQL 配置文件,則可以在 MySQL 驅(qū)動(dòng)程序中使用以下命令設(shè)置此值。

> 設(shè)置全局 connect_timeout=100;> 設(shè)置全局 max_allowed_packet=524288000;

5. MySQL連接過多

如果MySQL客戶端遇到“連接數(shù)太多”錯(cuò)誤,則意味著所有可用連接都被其他客戶端使用。連接數(shù)(默認(rèn)為151)由系統(tǒng)更改控制;可以通過增加其值來解決max_connections問題我在 /etc/my.cnf 配置文件中允許多個(gè)連接。

[mysqld]最大連接數(shù)=1000

6.退出內(nèi)存MySQL

如果您使用 MySQL 客戶端應(yīng)用程序運(yùn)行查詢并遇到相關(guān)錯(cuò)誤,則意味著 MySQL 沒有足夠的內(nèi)存來存儲(chǔ)整個(gè)查詢結(jié)果。

第一步是確保問題有效,如果有效,則執(zhí)行以下操作:


  • 如果您直接使用 MySQL 客戶端,請(qǐng)以--quick switch, 開頭以禁用緩存對(duì)象或

  • 使用 MyODBC 驅(qū)動(dòng)程序時(shí),配置用戶界面 (UI) 有一個(gè)標(biāo)準(zhǔn)標(biāo)志選項(xiàng)卡。請(qǐng)參閱“不保存結(jié)果”。


另一個(gè)很棒的工具是 MySQL Tuner——一個(gè)很好的腳本,可以連接到正在運(yùn)行的 MySQL 服務(wù)器,并提供有關(guān)如何配置它以獲得最佳性能的提示。

$ sudo apt-get install mysqltuner #Debian/Ubuntu$ sudo yum install mysqltuner #RHEL/CentOS/Fedora$mysqltuner

有關(guān) MySQL 優(yōu)化和性能技巧,請(qǐng)閱讀我們的文章:15 個(gè)有用的 MySQL/MariaDB 部署設(shè)計(jì)和性能技巧。

7. MySQL 繼續(xù)擴(kuò)展

如果遇到此問題,您應(yīng)該嘗試確定問題是否是 MySQL 服務(wù)器已死機(jī),或者是否是客戶端出現(xiàn)問題。請(qǐng)注意,許多服務(wù)器崩潰是由損壞的數(shù)據(jù)文件或索引文件引起的。

您可以檢查服務(wù)器的狀態(tài)以驗(yàn)證它已啟動(dòng)并運(yùn)行了多長時(shí)間。

$ sudo systemctl status mysql #Debian/Ubuntu$ sudo systemctl status mysqld # RHEL / CentOS / Fedora

或者,運(yùn)行以下 mysqladmin 命令來查找 MySQL 服務(wù)器運(yùn)行時(shí)。

$sudo mysqladmin 版本 -p

修復(fù)常見 MySQL 錯(cuò)誤的有用提示

其他解決方案包括但不限于停止MySQL服務(wù)器并啟用調(diào)試,然后重新啟動(dòng)服務(wù)。您可以嘗試創(chuàng)建一個(gè)可用于復(fù)制問題的測(cè)試用例。此外,在執(zhí)行其他查詢時(shí),打開另一個(gè)終端窗口并運(yùn)行以下命令來顯示 MySQL 進(jìn)程統(tǒng)計(jì)信息:

$sudo mysqladmin -i 5 狀態(tài)或者$sudo mysqladmin -in 5 -r 狀態(tài)

雖然我們已經(jīng)研究了一些常見的 MySQL 問題和錯(cuò)誤,并提供了排查和解決問題的方法,但錯(cuò)誤診斷最重要的方面是理解它的含義(就導(dǎo)致它的原因而言)。

那么你怎么知道這一點(diǎn)呢?以下提示將指導(dǎo)您如何準(zhǔn)確找出導(dǎo)致問題的原因:


  1. 第一步也是最重要的一步是查看存儲(chǔ)在文件夾中的 MySQL 文檔/var/log/mysql/您可以使用命令行工具(例如 tail)來讀取日志文件。

  2. 如果MySQL服務(wù)無法啟動(dòng),請(qǐng)使用systemctl檢查其狀態(tài),或者使用systemd下的journetctl(帶-xe標(biāo)志)命令來檢查問題。

  3. 您還可以查看類似/var/log/messages或類似的配置日志文件來了解問題的原因。

  4. 嘗試使用 htop 等工具來檢查哪個(gè)程序占用了所有 CPU 或關(guān)閉計(jì)算機(jī),或者檢查內(nèi)存、磁盤空間、文件記錄或任何其他重要資源是否耗盡。

  5. 假設(shè)問題是一個(gè)逃逸進(jìn)程,你總是可以嘗試殺死它(使用pkill或kill工具),以便MySQL正常工作。

  6. 假設(shè) mysqld 服務(wù)器引起問題,您可以運(yùn)行命令:mysqladmin -u root pingmysqladmin -u root processlist來獲取它的任何響應(yīng)。

  7. 的一部分
  8. 如果問題出在您的客戶端應(yīng)用程序嘗試連接到 MySQL 服務(wù)器時(shí),請(qǐng)確定其無法正常工作的原因,并嘗試從中獲取任何結(jié)果以進(jìn)行故障排除。


您還可以閱讀以下有關(guān) MySQL 的文章:


  1. 初學(xué)者學(xué)習(xí) MySQL/MariaDB – 第 1 部分

  2. 如何在 CentOS 7 上使用 Netdata 監(jiān)控 MySQL/MariaDB 數(shù)據(jù)庫

  3. 如何將所有 MySQL 數(shù)據(jù)庫從舊服務(wù)器轉(zhuǎn)換為新服務(wù)器

  4. Mytop – 在 Linux 中監(jiān)控 MySQL/MariaDB 性能的有用工具

  5. Linux 的 12 個(gè) MySQL/MariaDB 安全最佳實(shí)踐


有關(guān)更多信息,請(qǐng)參閱 MySQL 常見問題和錯(cuò)誤參考手冊(cè),它提供了使用 MySQL 時(shí)可能遇到的常見問題和錯(cuò)誤消息的完整列表,包括上面討論的問題和其他問題。

言鼎科技

The End