互聯網上的很大一部分內容都存儲在數據庫中,MySQL是一種流行的選擇。但是,如果我們的動態內容突然無法加載,或者當我們返回我的網站時,會看到一個幾乎空白的白頁,上面有消息“建立數據庫連接時出錯”。那么我們應該如何解決云服務器上MySQL數據庫的常見問題?
下面內容是在幫助大家對云服務器上的MySQL數據庫進行故障排除,按照此處列出的步驟,大家將有望恢復數據庫功能。
一、檢查服務是否正在運行
如果我們的網站無法連接到您的數據庫,則該服務可能根本沒有在監聽。檢查我們的MySQL狀態,在Ubuntu和Debian系統上,這可以使用以下命令完成。
sudo服務mysql狀態
CentOS和其他Red Hat變體也使用MySQL,但它被命名為MariaDB,因此請改用此命令。
sudo服務mariadb狀態
CentOS和Debian上的狀態檢查輸出將顯示與下面 CentOS示例類似的內容,Debian輸出幾乎相同,只是服務名稱不同。
mariadb.service - MariaDB 數據庫服務器
已加載:已加載(/usr/lib/systemd/system/mariadb.service;已啟用)
活動:活動(運行)自周三 2015-08-05 11:53:38 EEST;3小時23分鐘前
主PID:2451 (mysqld_safe)
C組:/system.slice/mariadb.service
├─2451 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─2609 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql...
打印輸出相當冗長,但重要的部分通常是彩色的,以便更好地突出。綠色的“活動(運行)”表示服務應該正常運行,如果相反,它表示“活動(退出)”或“非活動(死)”,則該進程已停止或終止。
Ubuntu將相同的信息壓縮到一行,就像下面的示例輸出一樣。
mysql 啟動/運行,進程5897
如果我們的服務狀態不是“正在運行”,請嘗試使用與以前相同的服務命令重新啟動進程,但使用“重新啟動”而不是“狀態”。
sudo服務mysql重新啟動
sudo服務mariadb重新啟動
如果數據庫服務重新啟動而沒有遇到錯誤,我們可以嘗試使用以下命令連接到它,出現提示時輸入根密碼。
mysql -u root -p
如果我們看到“歡迎使用 MySQL/MariaDB 監視器”,則連接成功并且數據庫服務正在運行。相反,如果我們收到如下例所示的錯誤,可能輸入了錯誤的root用戶密碼。再試一次,或者如果我們不確定root 密碼,只需將root替換為其他用戶名,即可使用我們有權訪問的另一個用戶帳戶登錄。
錯誤1045 (28000):用戶 'root'@'localhost' 的訪問被拒絕(使用密碼:YES)
如果我們的數據庫設置在與Web主機不同的服務器上,請確保兩臺服務器可以相互訪問。我們可以使用正確的安裝用戶名使用下面的命令從我們的Web服務器測試數據庫連接。
mysql -u <用戶名> -p -h <數據庫服務器私有IP>
二、檢查配置
當 MySQL正在運行但您的網站仍未正常加載時,或者當我們嘗試手動連接到數據庫時收到如下錯誤消息,您應該查看服務配置。
錯誤 2002:無法通過套接字“/tmp/mysql.sock”連接到本地 MySQL 服務器 (111)
在Debian和Ubuntu服務器上,MySQL的配置文件通常保存在 /etc/mysql/。也可以將特定于用戶的設置存儲在 /home//.my.cnf 中,這將覆蓋全局配置。檢查是否設置了任何用戶級別覆蓋。通常建議為不同的Web應用程序使用單獨的用戶名,因此至少檢查那些與我們的頁面加載問題相關的用戶名。我們可以使用以下兩個命令中的第一個打開全局配置文件,并通過將 替換為數據庫用戶名來使用后者打開特定于用戶的配置文件。
須藤納米 /etc/mysql/my.cnf
sudo nano /home/<用戶>/.my.cnf
通過向下滾動到 [client] 和 [mysqld_safe] 設置,我們會發現類似于此處示例的內容。
[mysqld]
#
# * 基本設置
#
用戶 = mysql
pid-file = /var/run/mysqld/mysqld.pid
套接字=/var/run/mysqld/mysqld.sock
端口= 3306
basedir = /usr
數據目錄 = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
跳過外部鎖定
#
# 而不是跳過網絡現在默認是只聽
# localhost 哪個更兼容并且安全性更高。
綁定地址 = 127.0.0.1
對于 CentOS 和其他 Red Hat,主要配置文件存儲在略有不同的位置,打開它進行檢查
sudo vi /etc/my.cnf
[mysqld]
數據目錄=/var/lib/mysql
套接字=/var/lib/mysql/mysql.sock
這里需要密切注意的行是“socket”、“datadir”和“bind-address”。上例中的參數采用默認值,在大多數情況下,我們的配置看起來是一樣的。確保設置指向正確的目錄,以便 MySQL 可以實際找到所需的文件。檢查“datadir”的最簡單方法是使用下面的命令
sudo ls -l /var/lib/mysql/
輸出將列出該目錄中的所有文件,它應該至少包含以下內容以及您創建的任何數據庫。
drwx------ 2 mysql root 4096 Aug 5 12:23 mysql
drwx------ 2 mysql mysql 4096 Aug 5 12:29 performance_schema
如果數據目錄或套接字已被移動并且 MySQL 不知道它們在哪里,請修復配置文件以指向正確的目錄。您可以使用以下命令搜索文件夾。
sudo find / -name performance_schema && sudo find / -name mysql.sock
我們需要檢查的第三個參數是綁定地址,只有當我們的數據庫需要遠程訪問時才真正相關。在Debian和Ubuntu安裝中,綁定默認設置為環回地址,這可以防止從本地主機外部調用數據庫。CentOS 沒有相同的參數,除非手動設置。對于我們的Web服務位于與數據庫不同的服務器上的任何設置,此綁定地址應設置為服務器自己的私有IP。
三、檢查錯誤日志
如果配置看起來正確并且服務正在運行,但您的網站仍未按預期加載,請嘗試檢查日志中是否有任何提示可能是什么原因。
Debian和Ubuntu服務器將錯誤日志存儲到 /var/log/mysql/error.log。我們可以使用“less”來閱讀日志,但這可能不是很方便,因為日志中包含的不僅僅是嚴重錯誤。相反,使用“grep”搜索日志。
sudo grep -i 錯誤 /var/log/mysql/error.log
如果我們在最近的日志中找不到任何內容,請同時檢查存檔的日志。為此,請使用“zgrep”和與常規“grep”相同的命令
須藤 zgrep -i 錯誤 /var/log/mysql/error.log.1.gz
由于CentOS下的數據庫命名為MariaDB而不是MySQL,所以日志也以不同的名稱保存。您可以使用以下命令搜索日志。
sudo grep -i 錯誤 /var/log/mariadb/mariadb.log
Debian 系統還將 MySQL 事件報告到 /var/log/syslog,以過濾掉其他所有內容,使用“grep”和兩個由 .* 分隔的關鍵字來表達“和”,就像下面的命令一樣。
sudo grep -i -E 'mysql.*error' /var/log/syslog
如果我們找不到任何有用的東西,請嘗試不同的關鍵字,例如“開始”以查看服務上次重新啟動的時間,或“失敗”以查找可能不會報告為錯誤的任何不太重要的問題。
以上是解決云服務器上MySQL數據庫的常見問題。希望能幫助到大家參考!
-
數據庫
+關注
關注
7文章
3794瀏覽量
64362 -
MySQL
+關注
關注
1文章
804瀏覽量
26531 -
云服務器
+關注
關注
0文章
566瀏覽量
13358
發布評論請先 登錄
相關推薦
評論