Linux LAMP常见故障解决方法
systemctl status apache2(Apache)、systemctl status mysql(MySQL)、systemctl status php7.x-fpm(PHP-FPM,根据版本调整)确认服务是否运行。未运行则用systemctl start 服务名启动。sudo netstat -tulnp | grep ':80'(Apache)或:3306(MySQL),若端口被占用,用kill -9 进程ID终止占用进程,或修改服务端口(如修改Apache的Listen指令)。apachectl configtest(Apache)检查配置文件是否有语法错误;MySQL可通过重启服务(systemctl restart mysql)验证配置是否正确。sudo apt install libjpeg libjpeg-devel,CentOS/RHEL用sudo yum install libjpeg libjpeg-devel)。firewall-cmd --permanent --add-service=http和firewall-cmd --permanent --add-service=https开放端口,然后firewall-cmd --reload生效。setenforce 0)测试是否解决问题;永久修改则编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive,并重启系统。DocumentRoot指向正确的网站目录(如/var/www/html),且目录权限为755(chmod 755 /var/www/html),文件权限为644(chmod 644 /var/www/html/*.php)。mysqli或pdo_mysql)、用户权限不足、MySQL绑定地址限制(仅本地访问)。systemctl start mysql启动服务,若无法启动,查看错误日志(/var/log/mysql/error.log或/var/log/mysqld.log)定位原因。sudo apt install php-mysql,CentOS/RHEL用sudo yum install php-mysqlnd),安装后重启Apache(systemctl restart apache2)。mysql -u root -p登录MySQL,执行GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost'; FLUSH PRIVILEGES;授予用户权限(若为远程连接,将localhost改为%)。/etc/mysql/mysql.conf.d/mysqld.cnf(或/etc/my.cnf),将bind-address = 127.0.0.1改为bind-address = 0.0.0.0(允许远程访问),然后重启MySQL。sudo apt install libapache2-mod-php,CentOS/RHEL用sudo yum install php),安装后用a2enmod php7.x(Ubuntu/Debian)启用模块。/etc/apache2/mods-enabled/php7.x.conf或/etc/httpd/conf.d/php.conf)中添加AddType application/x-httpd-php .php,并确保DirectoryIndex包含index.php。chmod 644 *.php),目录权限为755(chmod 755 /var/www/html),所有者为Apache用户(如www-data或apache,用chown www-data:www-data /var/www/html/修改)。top(查看CPU/内存使用率)、htop(更直观的界面)、iotop(查看磁盘I/O)定位资源瓶颈;用free -h查看内存使用情况,df -h查看磁盘空间。EXPLAIN分析慢查询(如EXPLAIN SELECT * FROM table WHERE condition;),添加索引(如ALTER TABLE table ADD INDEX (column))优化查询性能;查看SHOW PROCESSLIST;终止长时间运行的查询。/etc/apache2/apache2.conf(或/etc/httpd/conf/httpd.conf),降低MaxClients(并发连接数,默认可能过高)和KeepAliveTimeout(保持连接时间,默认15秒,可改为5秒),减少资源消耗。firewall-cmd --permanent --remove-port=22/tcp关闭SSH端口,若需远程管理,建议用密钥认证)。SELINUX=permissive改为SELINUX=enforcing(/etc/selinux/config),并重启系统;用audit2allow工具分析日志,生成自定义策略。SELECT、INSERT,而非ALL PRIVILEGES);限制用户访问范围(如GRANT SELECT ON database.table TO 'user'@'localhost')。$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$id]););过滤用户输入(如用htmlspecialchars转义输出)。