如何恢复Ubuntu LNMP服务器
小樊
43
2026-01-06 18:41:09
Ubuntu LNMP 服务器恢复操作指南
一、恢复前准备
- 明确恢复目标:仅恢复网站文件、数据库、Nginx 配置,还是做系统级灾难恢复(重装系统后全量还原)。
- 准备材料:最近一次可用的备份(数据库 .sql/.sql.gz、网站目录 .tar.gz 或 rsync 增量、Nginx 配置 /etc/nginx/、SSL 证书、必要的密钥与凭据)。
- 准备环境:一台可启动的 Ubuntu(与原系统版本尽量一致),网络连通,具备 sudo 权限;若系统无法进入,使用 Live USB 启动后再恢复。
- 安全与合规:备份可能包含数据库密码、API 密钥等敏感信息,建议加密存储并限制访问权限;恢复前先验证备份完整性与可读性。
二、标准恢复步骤
- 恢复网站文件
- 打包还原:tar -xzvf site-20260106.tar.gz -C /var/www/html
- 或增量同步:rsync -aAXv /backup/site/ /var/www/html/
- 完成后校正权限(示例):chown -R www-data:www-data /var/www/html && find /var/www/html -type d -exec chmod 755 {} ; && find /var/www/html -type f -exec chmod 644 {} ;
- 恢复数据库
- 准备空库(如需要):mysql -u root -p -e “CREATE DATABASE IF NOT EXISTS dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;”
- 导入备份:mysql -u dbuser -p dbname < backup_20260106.sql
- 如为压缩包:gunzip < backup_20260106.sql.gz | mysql -u dbuser -p dbname
- 恢复 Nginx 配置
- 配置与站点:rsync -aAXv /backup/nginx/ /etc/nginx/
- 语法检查与生效:nginx -t && systemctl reload nginx
- 验证与回滚预案
- 访问站点首页与关键接口,查看 Nginx 错误日志:tail -f /var/log/nginx/error.log
- 查看 PHP-FPM 日志(路径因版本而异,如 /var/log/php7.4-fpm.log 或 /var/log/php-fpm/error.log)
- 数据库连接与应用错误,查看 MySQL 错误日志:tail -f /var/log/mysql/error.log
- 建议先导入到临时库或备份当前库后再覆盖,便于快速回滚。
三、系统级灾难恢复
- 使用 Timeshift 还原系统
- 安装(如未安装):sudo apt install timeshift
- 在图形或命令行界面选择最近的快照点执行还原;若系统无法启动,可用 Live USB 启动后安装 Timeshift 并指向快照所在磁盘进行还原。
- 使用 Clonezilla 整盘恢复
- 制作 Clonezilla 启动盘 → 选择“device-device”或“device-image”模式 → 选择备份镜像与目标磁盘 → 执行恢复(会覆盖目标盘,务必核对磁盘标识)。
- 使用 dd 镜像恢复(高风险,谨慎操作)
- 备份:dd if=/dev/sda of=/mnt/backup/system_20260106.img bs=4M status=progress
- 恢复:dd if=/mnt/backup/system_20260106.img of=/dev/sda bs=4M status=progress
- 注意:目标盘容量需不小于源盘;操作会不可逆覆盖目标盘全部数据。
四、恢复后验证与常见问题处理
- 服务状态与健康检查
- 确认服务运行:systemctl status nginx php*-fpm mysql
- 端口与连通性:ss -tulnp | grep ‘:80|:443|:3306’;必要时测试远程访问与数据库端口连通性
- 防火墙与云安全组:ufw status 或云控制台安全组放行 80/443/3306(仅对可信来源开放)
- 日志定位
- Nginx:tail -f /var/log/nginx/error.log
- PHP-FPM:tail -f /var/log/php*-fpm.log 或 /var/log/php-fpm/error.log
- MySQL:tail -f /var/log/mysql/error.log
- 系统层面:dmesg、tail -f /var/log/syslog
- 常见故障速解
- 配置语法错误:nginx -t 修正后 reload
- 端口被占用:ss -tulnp | grep 80 找到占用进程并处理,或调整服务端口
- 数据库连接失败:核对 主机、端口、用户名、密码 与防火墙规则
- 权限问题:确保网站目录属主为 www-data,目录 755、文件 644
五、自动化与加固建议
- 自动化备份
- 使用 crontab 定时执行数据库与网站备份脚本,并同步到远程存储(如 SFTP/对象存储),保留多版本与异地副本。
- 示例(每日 2:00 数据库、3:00 Nginx、4:00 网站):
- 0 2 * * * /usr/local/bin/backup_mysql.sh
- 0 3 * * * /usr/local/bin/backup_nginx.sh
- 0 4 * * * /usr/local/bin/backup_website.sh
- 备份策略与演练
- 采用多层备份(本地 + 远程/云),对数据库使用 mysqldump 全量导出,对网站与配置使用 tar/rsync,对系统使用 Timeshift/Clonezilla/dd。
- 建议每季度进行一次恢复演练,验证备份可用性与恢复流程有效性。