Ubuntu LAMP故障排查指南
首先明確故障的具體表現(如無法訪問網站、頁面顯示500錯誤、MySQL無法連接等),記錄錯誤消息(如瀏覽器提示、命令行輸出),這有助于快速定位問題范圍(如Web服務、數據庫、PHP配置或權限問題)。
使用systemctl命令確認LAMP核心服務是否正常運行:
sudo systemctl status apache2 # 檢查Apache狀態
sudo systemctl status mysql # 檢查MySQL狀態
sudo systemctl status php7.x-fpm # 檢查PHP-FPM狀態(根據PHP版本調整,如php8.1-fpm)
若服務未運行,使用sudo systemctl start <服務名>啟動;若啟動失敗,需進一步查看對應日志(如Apache的error.log)。
日志是故障排查的關鍵,常見日志路徑及查看方式:
sudo tail -f /var/log/apache2/error.log(實時查看最新錯誤)sudo tail -n 50 /var/log/mysql/error.log(查看最近50條錯誤)/var/log/apache2/error.log;若使用PHP-FPM,檢查/var/log/php7.x-fpm.log(需提前開啟PHP錯誤日志功能)。ping www.baidu.com(若無法ping通,可能是服務器網絡故障或DNS問題);nslookup www.baidu.com(若解析失敗,修改/etc/resolv.conf添加可用DNS服務器,如nameserver 8.8.8.8);sudo netstat -tuln | grep -E '80|3306|9000'(檢查Apache(80端口)、MySQL(3306端口)、PHP-FPM(9000端口)是否正常監聽);telnet <服務器IP> 80(若無法連接,可能是防火墻或安全組阻止了端口)。sudo apachectl configtest(檢查/etc/apache2/apache2.conf及/etc/apache2/sites-available/下的虛擬主機配置是否有語法錯誤);sudo mysqld --validate-config(驗證/etc/mysql/my.cnf或/etc/my.cnf的配置合法性);php -m(檢查所需PHP模塊是否啟用,如mysqli、gd;若未啟用,編輯/etc/php/7.x/apache2/php.ini取消對應模塊前的注釋,如extension=mysqli.so)。Web服務器(如www-data用戶)需要對網站目錄和文件有正確的訪問權限:
sudo chown -R www-data:www-data /var/www/html # 將網站目錄所有者設為www-data
sudo chmod -R 755 /var/www/html # 設置目錄權限為755(可讀可執行),文件權限為644(可讀可寫)
使用netstat或ss命令檢查端口是否被其他進程占用:
sudo netstat -tulnp | grep ':80' # 檢查80端口是否被占用
sudo netstat -tulnp | grep ':3306' # 檢查3306端口是否被占用
若端口被占用,可通過kill -9 <進程ID>終止占用進程,或修改對應服務的端口(如修改Apache端口,在/etc/apache2/ports.conf中更改Listen 80為Listen 8080)。
/var/www/html下創建info.php文件,內容為<?php phpinfo(); ?>,訪問http://服務器IP/info.php(若能顯示PHP信息頁面,說明Apache和PHP集成正常);mysql -u root -p(輸入root密碼),執行SHOW DATABASES;(若能顯示數據庫列表,說明MySQL連接正常)。完成配置更改或修復后,重啟相關服務使更改生效:
sudo systemctl restart apache2
sudo systemctl restart mysql
sudo systemctl restart php7.x-fpm
sudo apt-get install -f修復依賴;df -h檢查磁盤空間(若/分區使用率超過80%,清理無用文件,如/var/log下的舊日志);sestatus檢查SELinux狀態,若為Enforcing,可能需要調整策略(如setenforce 0臨時關閉,或修改/etc/selinux/config永久關閉)。