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永久关闭)。