CentOS LAMP故障排查指南
首先确认LAMP核心服务(Apache、MySQL/MariaDB、PHP-FPM)是否处于运行状态。使用以下命令查看服务状态:
sudo systemctl status httpd # Apache状态
sudo systemctl status mysqld # MySQL状态(若使用MariaDB则为mariadb)
sudo systemctl status php-fpm # PHP-FPM状态(若使用PHP-FPM)
若服务未启动,可通过sudo systemctl start <服务名>启动对应服务;若需开机自启,执行sudo systemctl enable <服务名>。
日志是故障排查的关键依据,LAMP各组件的错误日志位置如下:
/var/log/httpd/error_log(CentOS默认路径)/var/log/mysqld.log(MySQL)或/var/log/mysql/error.log(MariaDB)/var/log/php-fpm/error.log(默认路径,需根据php.ini或php-fpm.conf确认)
使用tail -f <日志路径>实时查看最新错误信息,或通过grep 'error' <日志路径>筛选关键错误。配置文件语法错误会导致服务无法启动,需逐一检查:
apachectl configtest命令检测httpd.conf及包含的虚拟主机配置文件语法,若输出“Syntax OK”则表示配置正确。--validate-config参数(如sudo systemctl restart mysqld --validate-config),或在配置文件中设置skip-log-bin临时跳过二进制日志验证(仅用于调试)。php.ini中的关键配置(如memory_limit、upload_max_filesize),确保路径和数值合法。LAMP常用端口及检查方法:
/var/run/php-fpm/php-fpm.sock)或9000端口通信。
使用以下命令查看端口占用:sudo netstat -tulnp | grep -E '80|443|3306|9000' # 查看端口及占用进程
sudo lsof -i :80 # 查看80端口具体进程
若端口被占用,可通过kill -9 <PID>终止占用进程(确认进程无用后),或修改服务配置文件更换端口。
Apache和MySQL需要访问特定目录和文件,权限错误会导致“403 Forbidden”或“无法连接数据库”等问题:
/var/www/html):文件权限设为644(sudo chmod 644 /var/www/html/*),目录权限设为755(sudo chmod 755 /var/www/html)。apache,需将Web目录所有者改为apache(sudo chown -R apache:apache /var/www/html)。/tmp/mysql.sock(或自定义路径)存在且权限正确(sudo chmod 777 /tmp/mysql.sock,测试后恢复安全权限)。Enforcing模式,可能阻止服务访问文件或端口。临时设置为Permissive模式测试(sudo setenforce 0),若问题解决,可编辑/etc/selinux/config将SELINUX=enforcing改为SELINUX=permissive,并重启系统。firewalld开放必要端口(HTTP、HTTPS、MySQL):sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp # 若使用MySQL
sudo firewall-cmd --reload
若使用iptables,添加规则:sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT,并保存规则(sudo service iptables save)。确保服务器能访问外部网络及内部服务:
ping www.baidu.com(检查网络连通性);traceroute www.baidu.com(检查数据包路径);telnet <服务器IP> 80或nc -zv <服务器IP> 80(检查HTTP端口是否开放)。系统资源不足(如内存耗尽、磁盘空间满)会导致服务崩溃或响应缓慢:
df -h(检查/根分区及/var分区,避免空间耗尽);top(按M排序内存占用,按P排序CPU占用),或htop(更直观的交互式工具);sudo systemctl restart httpd)或系统缓存(sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches)。/etc/httpd/conf/httpd.conf中Listen指令是否正确(如Listen 80),或端口被其他服务(如Nginx)占用;/etc/my.cnf中bind-address是否设为0.0.0.0(允许远程连接),或密码是否正确;LoadModule php_module modules/libphp.so),且AddType application/x-httpd-php .php指令存在;/etc/php-fpm.conf或/etc/php/7.x/fpm/pool.d/www.conf中的listen指令(如listen = /var/run/php-fpm/php-fpm.sock),并与Apache的php-fpm配置一致(如SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost")。