成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

排除MySQL中常見錯誤的實用招術

譯文
數據庫 MySQL
你的網站或Web應用軟件是否基于MySQL?我們在本文中將解釋如何排除MySQL數據庫服務器中的問題和常見錯誤。我們將描述如何查明問題的原因以及如何解決問題。

[[265643]]

【51CTO.com快譯】MySQL是Oracle擁有的一種廣泛使用的開源關系數據庫管理系統(RDMS)。多年來,它是基于Web的應用軟件的默認選擇,與其他數據庫引擎相比仍然大受歡迎。

MySQL是為Web應用軟件設計和優化的,它構成了基于Web的各大應用(比如Facebook、Twitter、Wikipedia和YouTube等)的必要部分。

你的網站或Web應用軟件是否基于MySQL?我們在本文中將解釋如何排除MySQL數據庫服務器中的問題和常見錯誤。我們將描述如何查明問題的原因以及如何解決問題。

1. 無法連接到本地MySQL服務器

MySQL中常見的客戶機到服務器連接錯誤之一是“ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)”。

圖1. 無法連接到本地MySQL服務器

該錯誤表示主機系統上沒有MySQL服務器(mysqld)在運行,或者嘗試連接到服務器時指定了錯誤的Unix套接字文件名或TCP/IP端口。

結合使用ps命令和grep命令,檢查數據庫服務器主機上名為mysqld的進程,以此確保服務器在運行,如圖所示。

  1. $ ps xa | grep mysqld | grep -v mysqld 

如果上述命令未顯示輸出,則表示數據庫服務器沒在運行。因此客戶機無法連接到它。要啟動服務器,運行下列systemctl命令。 

  1. $ sudo systemctl start mysql #Debian/Ubuntu  
  2. $ sudo systemctl start mysqld #RHEL/CentOS/Fedora  

要驗證MySQL服務狀態,請使用下列命令。 

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

圖2. 檢查MySQL狀態

可以從上述命令的輸出看出,MySQL服務失敗。這種情況下,你可以嘗試重新啟動,再次檢查狀態。 

  1. $ sudo systemctl restart mysql  
  2. $ sudo systemctl status mysql 

圖3. 重新啟動MySQL并驗證狀態

此外,如果服務器在運行,如下列命令所示,但你仍看到上述錯誤,還應驗證TCP/IP端口是否被防火墻阻止或任何端口在阻止服務。

  1. $ ps xa | grep mysqld | grep -v mysqld 

要找到服務器在偵聽的端口,使用netstat命令,如下所示。

  1. $ sudo netstat -tlpn | grep "mysql" 

2. 無法連接到MySQL服務器

另一個常遇到的連接錯誤是“(2003) Can’t connect to MySQL server on ‘server’ (10061)”,這意味著網絡連接被拒絕。

在這里,先檢查MySQL服務器是否在系統上運行,如上所示。還要確保服務器已啟用網絡連接,用于連接的網絡端口是服務器上配置的那個端口。

試圖連接到MySQL服務器時可能會遇到的其他常見錯誤有: 

  1. ERROR 2003: Can't connect to MySQL server on 'host_name' (111)  
  2. ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)  

這些錯誤表明服務器可能在運行,但你試圖使用有別于服務器在偵聽的TCP/IP端口、命名管道或Unix套接字文件來進行連接。

3. MySQL中訪問被拒絕錯誤

在MySQL中,用戶帳戶是根據用戶名和用戶連接到服務器所用的客戶機主機或主機來定義的。此外,帳戶還可能擁有身份驗證憑據,比如密碼。

雖然“訪問被拒絕”錯誤有許多不同的原因,但一個常見原因與服務器允許客戶機程序在連接時使用的MySQL帳戶有關。它表示連接中指定的用戶名沒有訪問數據庫的權限。

MySQL允許創建使客戶機用戶能夠連接到服務器并訪問服務器管理的數據的帳戶。在這方面,如果你遇到訪問被拒絕錯誤,檢查是否允許用戶帳戶通過你所使用的客戶機程序連接到服務器。

可以通過運行SHOW GRANTS命令查看某個特定帳戶擁有的權限,如圖所示。 

  1. > SHOW GRANTS FOR 'tecmint'@'localhost'

可以在MySQL shell中使用下列命令,將特定數據庫上特定用戶的權限授予遠程IP地址。 

  1. grant all privileges on *.test_db to 'tecmint'@'192.168.0.100' 
  2. > flush privileges 

此外,訪問被拒絕錯誤也可能由連接到MySQL時遇到的問題引起,請參閱前面解釋的錯誤。

4. 與MySQL服務器的連接斷開

由于下列原因,你可能會遇到該錯誤:網絡連接不早暢、連接超時或BLOB值出現問題(值大于max_allowed_pa​​cket)。如果出現網絡連接問題,確保你有良好的網絡連接,訪問遠程數據庫服務器時尤為如此。

如果是連接超時問題,尤其是MySQL試圖與服務器初始連接時,加大connect_timeout參數的值。但是如果BLOB值大于max_allowed_pa​​cket,需要在/etc/my.cnf 中的[mysqld]或[client]部分下面為max_allowed_pa​​cket設置更高的值,如圖所示。 

  1. [mysqld]  
  2. connect_timeout=100  
  3. max_allowed_packet=500M  

如果你無法訪問MySQL配置文件,可以在MySQL shell中使用下列命令來設置該值。 

  1. SET GLOBAL connect_timeout=100;  
  2. SET GLOBAL max_allowed_packet=524288000;  

5. MySQL連接太多

如果MySQL客戶機遇到“太多連接”錯誤,表示所有可用連接被其他客戶機使用。連接數量(默認為151)由max_connections系統變量控制;可以通過在/etc/my.cnf配置文件中加大值、允許更多連接來解決問題。 

  1. [mysqld]  
  2. max_connections=1000  

6. 溢出內存MySQL

如果你使用MySQL客戶機程序運行查詢,遇到錯誤,意味著MySQL沒有足夠的內存來存儲整個查詢結果。

***步是確保查詢正確;如果正確,執行下列操作:

  • 如果你直接使用MySQL客戶機,用--quick參數選項符啟動它,禁用緩存結果;或者
  • 如果你使用MyODBC驅動程序,配置用戶界面(UI)有標志方面的高級選項卡。選中“Do not cache result”。

另一個很棒的工具是MySQL Tuner,這個實用的腳本會連接到運行中的MySQL服務器,在如何配置以獲得更高性能方面給出建議。 

  1. $ sudo apt-get install mysqltuner #Debian/Ubuntu  
  2. $ sudo yum install mysqltuner #RHEL/CentOS/Fedora  
  3. $ mysqltuner  

想了解MySQL優化和性能調優技巧,請閱讀我們的文章:《15個實用的MySQL/MariaDB性能調整和優化技巧》(https://www.tecmint.com/mysql-mariadb-performance-tuning-and-optimization/)。

7. MySQL不斷崩潰

如果你遇到該問題,應該試著查明問題根源是MySQL服務器已死還是客戶機存在問題。請注意,許多服務器崩潰是由損壞的數據文件或索引文件引起的。

你可以檢查服務器狀態以確定啟動并運行了多久。 

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

或者,運行下列mysqladmin命令以查找MySQL服務器的正常運行時間。 

  1. $ sudo mysqladmin version -p 

圖4. 查找MySQL服務器的正常運行時間

其他解決方案包括但不限于停止MySQL服務器并啟用調試,然后再次啟動服務。可以嘗試創建一個測試用例以便重現問題。此外,打開另一個終端窗口,并運行下列命令,在運行其他查詢時顯示MySQL進程的統計信息: 

  1. $ sudo mysqladmin -i 5 status 

或者 

  1. $ sudo mysqladmin -i 5 -r status 

結論:查明導致問題或錯誤的原因

雖然我們已查看了一些常見的MySQL問題和錯誤,還提供了排除和解決問題的方法,但診斷錯誤時最重要的是明白其含義(就是什么在導致錯誤)。

那么如何查明呢?下面幾點將指導你如何確定導致問題的原因:

  • ***步也是最重要的步驟是查看存儲在目錄/var/log/mysql/中的MySQL日志。可以使用tail等命令行實用程序來讀取日志文件。
  • 如果MySQL服務無法啟動,使用systemctl檢查其狀態,或使用systemd下的journetctl(帶-xe標志)命令來檢查問題。
  • 還可以檢查系統日志文件,比如/var/log/messages或類似文件,查找導致問題的原因。
  • 嘗試使用Mytop、glances、top、ps或htop等工具,檢查哪個程序在占用所有CPU或鎖定機器,或者檢查是否耗盡了內存、磁盤空間、文件描述符或其他一些重要資源。
  • 假設問題出在某個失控的進程,你總是可以嘗試終止它(使用pkill或kill實用程序),以便MySQL正常工作。
  • 假設mysqld服務器導致問題,可以運行命令:mysqladmin -u root ping或mysqladmin -u root processlist,獲取來自它的任何響應。
  • 如果試圖連接到MySQL服務器時問題出在客戶機程序,檢查為什么它未正常工作,嘗試從中獲得任何輸出以用于排除故障。

原文標題:Useful Tips to Troubleshoot Common Errors in MySQL,作者:Aaron Kili

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2019-06-21 10:13:26

JavaScript錯誤開發

2022-03-17 08:34:47

TypeScript項目類型

2009-08-27 11:12:04

C# foreach

2010-07-27 13:13:33

Flex數據綁定

2021-12-27 08:58:28

低代碼開發數據安全

2022-10-10 09:00:35

ReactJSX組件

2020-11-05 18:53:15

JavaScript開發前端

2010-04-19 13:56:19

Oracle數據庫服務

2011-04-02 10:47:51

2009-04-13 09:26:00

IP地址網絡管理故障

2011-07-22 17:37:18

MySQL數據庫

2016-12-21 15:35:55

微信小程序排除

2024-07-04 09:05:30

2013-10-23 14:34:15

2020-07-09 11:35:05

SD-WAN網絡架構網絡技術

2010-08-16 13:51:22

DIV+CSS

2022-04-28 09:05:41

網絡爬蟲Python

2019-09-18 09:56:41

MySQLSQL函數

2011-04-28 10:20:55

噴墨打印機

2011-05-03 11:21:24

噴墨打印機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色免费看| 精品国产乱码久久久久久蜜退臀 | 一级毛片中国 | 欧美一级网站 | 日本网站免费观看 | 九九久久久 | 午夜成人免费视频 | 日韩精品区 | 久久久久国产一区二区三区 | 欧美精产国品一二三区 | 免费a大片 | 亚洲一区二区中文字幕在线观看 | 夜夜摸夜夜操 | 欧美 日韩 国产 在线 | 国产精品久久久久久久久久久免费看 | 久久99国产精品 | 中文字幕一区在线观看视频 | 涩涩视频网 | 色婷婷狠狠 | 日日艹夜夜艹 | 五月免费视频 | 91av小视频| 人人做人人澡人人爽欧美 | 日韩在线欧美 | 99精品欧美一区二区蜜桃免费 | 亚洲一一在线 | 国产高清视频在线 | 天天综合天天 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 国产精品视频免费 | 国产成人免费视频网站高清观看视频 | 91小视频在线 | 精品亚洲一区二区 | 手机看片1 | 99免费看 | 成人久久视频 | 成人片免费看 | 久久影音先锋 | 免费视频二区 | 中文字幕第十一页 | 精品一区二区电影 |