Moodle是一個(gè)開(kāi)源網(wǎng)絡(luò)課程平臺(tái),我們的網(wǎng)絡(luò)課程在這個(gè)平臺(tái)上運(yùn)行多年一直比較穩(wěn)定。平臺(tái)環(huán)境是Ubuntu14.04+Apache+ Mysql+PHP。但最近網(wǎng)絡(luò)課堂卻不能啟動(dòng)。
登錄網(wǎng)絡(luò)課程時(shí),有時(shí)平臺(tái)提示“讀取數(shù)據(jù)庫(kù)時(shí)發(fā)生錯(cuò)誤”,有時(shí)提示“表‘context’”不存在,有時(shí)出 現(xiàn)“Error: Database connection failed, It is possible that the database is overloaded or otherwise not running properly. The site administrator should also check that the database details have been correctly specified in config.php”。不同故障的提示均說(shuō)明Moodle課程數(shù)據(jù)庫(kù)連接出錯(cuò)。
1.根據(jù)系統(tǒng)提示,可能是數(shù)據(jù)表?yè)p壞或刪除或數(shù)據(jù)庫(kù)系統(tǒng)連接出錯(cuò)。用數(shù)據(jù)庫(kù)管理工具phpmyadmin連接數(shù)據(jù)庫(kù),輸入用戶名和密碼,密碼框出現(xiàn)重置現(xiàn)象,就是密碼變?yōu)榭眨瑳](méi)有任何提示,也沒(méi)有密碼錯(cuò)誤的提示。
根據(jù)經(jīng)驗(yàn),重啟網(wǎng)絡(luò)課程的服務(wù)器可能有用,但重啟網(wǎng)絡(luò)課程服務(wù)器后故障依舊。這樣,應(yīng)該重點(diǎn)檢查數(shù)據(jù)庫(kù)。
2.檢查數(shù)據(jù)庫(kù)連接情況
(1)檢查數(shù)據(jù)庫(kù)MySQL是否正常啟動(dòng)。
遠(yuǎn)程登錄網(wǎng)絡(luò)課程服務(wù)器,輸入命令mysql登錄 數(shù) 據(jù) 庫(kù),出 現(xiàn)“ERROR 2001(HY000):Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’(2)”提示。
輸入 mysql-u root -p,輸入數(shù)據(jù)密碼后,仍然出現(xiàn)一樣的提示,不能連接到本地MySQL數(shù)據(jù)庫(kù)服務(wù)器。
輸入命令/etc/init.d/mysql status查看數(shù)據(jù)庫(kù)狀態(tài),提示“ * MySQL is stopped.”。
既然數(shù)據(jù)庫(kù)服務(wù)已經(jīng)停止,輸入/etc/init.d/mysql start啟動(dòng)數(shù)據(jù)庫(kù),提示:“ERROR: The partition with /var/lib/mysql is too full!”,顯示 /var/lib/mysql所在分區(qū)太滿了。
用顯示磁盤相關(guān)信息的命令“df -h”查詢,顯示/dev/sda1已用100%,其掛載點(diǎn)為“/”根目錄。用命令“l(fā)s/”查看根目錄“/”下有哪些內(nèi)容,發(fā)現(xiàn)有一個(gè)“home”目錄,這是Linux中存放用戶數(shù)據(jù)的目錄。用“du -h /home”查看home目錄下的文件大小,home/moodledata目錄為21GB,而moodledata是moodle課程中用戶保存課程數(shù)據(jù)的地方,這說(shuō)明moodledata數(shù)據(jù)量過(guò)大從而造成磁盤空間不足。
(2)Moodle 服務(wù)器安裝了四塊300GB高速硬盤,RAID類型為 10,磁盤容量約600GB。但 命 令“df -h”顯示只有“/dev/sda1”一個(gè)磁盤設(shè)備,約28GB磁盤容量,說(shuō)明還有硬盤未被使用。目前要查清楚當(dāng)前磁盤使用狀況。
用“sudo vgdisplay”命令來(lái)查看磁盤使用情況,VG Size為473GB,說(shuō)明還有硬盤空間。
用命令“df -ahT”查看目前文件系統(tǒng)的使用情況及文件系統(tǒng)類型(如圖1),/dev/sda1是ext4,不見(jiàn)其他設(shè)備名。
用磁盤分區(qū)命令“Fdisk/dev/sda”查看磁盤情況(如圖2),顯示存在一個(gè)設(shè)備名為“/dev/sda6”的磁盤分區(qū),據(jù)此判斷磁盤“/dev/sda6”目前處于閑置狀態(tài)。
圖1 用命令“df -ahT”來(lái)查看目前文件系統(tǒng)的使用情況及文件系統(tǒng)類型
圖2 用磁盤分區(qū)命令“Fdisk /dev/sda”來(lái)查看磁盤情況
3.問(wèn)題原因
通過(guò)以上操作可分析得出結(jié)論:整個(gè)磁盤系統(tǒng)劃分了四個(gè)磁盤分區(qū),/dev/sda1為L(zhǎng)inux系統(tǒng)分區(qū),/dev/sda2為擴(kuò)展磁盤,其中“/dev/sda5”為L(zhǎng)inux swap分區(qū),“dev/sda6”為邏輯磁盤分區(qū)LVM,但這個(gè)磁盤分區(qū)未掛載任何目錄,以至于該磁盤處于空閑狀態(tài)。如果Moodle是默認(rèn)安裝,用戶目錄moodledata也將安裝在Linux系統(tǒng)分區(qū)中,隨著使用時(shí)間的延長(zhǎng),用戶數(shù)據(jù)逐漸占滿Linux磁盤分區(qū),最終造成Moodle課堂不能連接數(shù)據(jù)庫(kù)。
將/home下的所有內(nèi)容移動(dòng)到/dev/sda6中,空出/dev/sda1的空間,使數(shù)據(jù)庫(kù)不會(huì)因?yàn)榇疟P空間太滿而造成無(wú)法啟動(dòng)故障。
1.將/home及其下的所有內(nèi)容移動(dòng)到/dev/sda6分區(qū)中的方法如下:
首先在/mnt下面新建一個(gè)home文件夾 :sudo mkdir home。
將新建的/mnt/home掛載 到 /dev/sda6:mount /dev/sda6 /mnt/home。
將/home下的所有文件復(fù)制到/mnt/home下:cp-a/home/* /mnt/home/。
將/home下的所有東西刪除 :rm -rf /home/*。
將/dev/sda6卸載:sudo umount /dev/sda6。
手動(dòng)將/dev/sda6掛載到 /home下 : Mount /dev/sda6 /home。
用命令“df -lh”來(lái)檢查磁盤掛載情況,顯示文件系統(tǒng)/dev/sda6容量為467GB,已 用 23GB,可用 421GB,已用5%,掛載點(diǎn)為/home。
從提示中可以看出,磁盤/dev/sda6已經(jīng)掛載到/home。
試運(yùn)行Moodle看是否正常http://www.exuekt.com,登錄課堂后,一切正常。
2.設(shè)置開(kāi)機(jī)掛載
一般情況下,如果再次開(kāi)機(jī),就會(huì)發(fā)現(xiàn)之前已經(jīng)掛載的磁盤必須手動(dòng)再次掛載一次,為了開(kāi)機(jī)自動(dòng)掛載磁盤/dev/sda6,需要手動(dòng)配置一下 /etc/fstab文件。
用 命 令“sudo blkid”查看磁盤分區(qū)/dev/sda6的 UUID。 用 命 令“Vim /etc/fstab”在fstab中 增加/dev/sda6磁盤的掛載信息,將/dev/sda6的UUID和類型參如圖3格式寫(xiě)入fstab。
重啟Moodle網(wǎng)絡(luò)課程服務(wù)器,能正常登錄課程,沒(méi)有任何問(wèn)題,至此,問(wèn)題得到解決。
圖3 編輯“/etc/fstab”示例
因?yàn)榘惭bMoodle時(shí)是默認(rèn)安裝,造成Linux系統(tǒng)文件與數(shù)據(jù)庫(kù)管理系統(tǒng)和用戶目錄文件moodledata在同一磁盤分區(qū),隨著用戶數(shù)據(jù)的增加,該磁盤剩余空間逐漸減小,最終耗盡,造成MySQL數(shù)據(jù)庫(kù)不能啟動(dòng),從而影響網(wǎng)絡(luò)課程的使用。
安裝Moodle時(shí)不能用默認(rèn)安裝,最好對(duì)磁盤進(jìn)行分區(qū)處理,可以劃分為BOOT分區(qū),/根分區(qū),/var分區(qū),/tmp分區(qū),將剩余空間全部劃分為/usr或/home分區(qū),而且特別要注意將Moodle用戶目錄moodledata放在最大磁盤分區(qū)中,以避免本案例中可能出現(xiàn)的數(shù)據(jù)庫(kù)不能啟動(dòng)問(wèn)題的出現(xiàn)。
要設(shè)置Moodle課程的計(jì)劃任務(wù)cron及時(shí)備份課程,或者是手動(dòng)定時(shí)備份課程,以防止出現(xiàn)意外,造成數(shù)據(jù)丟失且不能恢復(fù)數(shù)據(jù)的重大損失。
(1) 如 何在Linux下操作數(shù)據(jù)庫(kù):
MySQL數(shù)據(jù)庫(kù)的啟動(dòng):
service mysql start或/etc/init.d/mysql start
MySQL數(shù)據(jù)庫(kù)的停止:service mysql stop或 /etc/init.d/mysql stop
MySQL數(shù)據(jù)庫(kù)的重啟:
service mysql restart或 /etc/init.d/mysql restart
MySQL數(shù)據(jù)庫(kù)的狀態(tài):service mysql status 或/etc/init.d/mysql status
(2)Linux下有關(guān)磁盤的操作
顯示文件及目錄:ls
顯示磁盤分區(qū)上的可使用的磁盤空間:df
查看文件和目錄磁盤使用的空間:du
顯示磁盤分區(qū)表:輸入fdisk命令后,輸入p,以顯示磁盤分區(qū)情況。
加載文件系統(tǒng)到指定的加載點(diǎn) :mount。
注意,如果重啟后掛載仍然要生效,必須修改fstab。