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