Ubuntu LNMP如何备份和恢复
小樊
33
2025-12-14 06:55:22
Ubuntu LNMP 备份与恢复实操指南
一 备份范围与策略
- 数据库:使用 mysqldump 对 MySQL/MariaDB 进行逻辑备份,建议按库或按表导出,并做压缩与保留多份历史。
- 网站文件:备份 /var/www/ 下的全部站点代码与资源。
- 配置与服务:备份 Nginx 配置(如 /etc/nginx/)、PHP-FPM 池配置(如 /etc/php/)、证书(如 /etc/letsencrypt/),以及必要的用户与权限、定时任务等。
- 系统与引导:使用 Timeshift(推荐)、Clonezilla 或 dd 做系统级镜像/快照,便于整机回滚。
- 存储与保留:备份应落盘到外置盘/对象存储,并保留至少7–30天的历史,定期做恢复演练验证可用性。
二 数据库备份与恢复
- 备份(示例)
- 单库:
mysqldump -u root -pyour_password --single-transaction --routines --triggers dbname > /backup/dbname_$(date +%F_%H-%M-%S).sql
- 全库:
mysqldump -u root -pyour_password --single-transaction --routines --triggers --all-databases > /backup/all_databases_$(date +%F_%H-%M-%S).sql
- 压缩:在上述命令后追加 | gzip > file.sql.gz;建议同时导出 mysql 系统库以保留用户与权限(谨慎覆盖目标库)。
- 恢复
- 未压缩:mysql -u root -pyour_password dbname < file.sql
- 压缩:gunzip < file.sql.gz | mysql -u root -pyour_password dbname
- 全库导入:mysql -u root -pyour_password < all_databases.sql
- 要点:生产环境优先使用 –single-transaction 减少锁表;恢复前确认目标库存在或按需新建;导入后校验表与数据量。
三 网站文件与配置备份与恢复
- 网站文件
- 打包备份:tar -czf /backup/www_$(date +%F).tar.gz -C /var/www .
- 增量/远程:rsync -aAXv --delete /var/www/ user@backup-host:/backup/www/
- 恢复:tar -xzf www_YYYY-MM-DD.tar.gz -C /var/www;或 rsync -aAXv user@backup-host:/backup/www/ /var/www/。
- Nginx 与 PHP 配置
- 备份:tar -czf /backup/nginx_$(date +%F).tar.gz /etc/nginx;tar -czf /backup/php_$(date +%F).tar.gz /etc/php;[ -d /etc/letsencrypt ] && tar -czf /backup/letsencrypt_$(date +%F).tar.gz /etc/letsencrypt。
- 恢复:tar -xzf nginx_YYYY-MM-DD.tar.gz -C /;tar -xzf php_YYYY-MM-DD.tar.gz -C /;证书同理。
- 生效与校验:配置变更后执行 systemctl reload nginx;检查站点与日志是否正常。
四 自动化备份与保留策略
- 示例脚本(可拆分或合并)
- 数据库:
#!/bin/bash
DB_USER=“root”; DB_PASS=“your_password”; DB_NAME=“dbname”
BACKUP_DIR=“/backup/mysql”; mkdir -p “$BACKUP_DIR”
mysqldump -u “$DB_USER” -p"$DB_PASS" --single-transaction --routines --triggers “$DB_NAME” | gzip > “$BACKUP_DIR/${DB_NAME}$(date +%F%H-%M-%S).sql.gz”
- 网站文件:
#!/bin/bash
tar -czf “/backup/www_$(date +%F).tar.gz” -C /var/www .
- 配置:
#!/bin/bash
tar -czf “/backup/nginx_$(date +%F).tar.gz” /etc/nginx
[ -d /etc/letsencrypt ] && tar -czf “/backup/letsencrypt_$(date +%F).tar.gz” /etc/letsencrypt
- 定时任务(crontab -e)
- 数据库:0 2 * * * /usr/local/bin/backup_mysql.sh
- 网站文件:0 3 * * * /usr/local/bin/backup_www.sh
- 配置:0 4 * * * /usr/local/bin/backup_nginx.sh
- 保留策略:在脚本中加入按时间删除旧备份,例如 find /backup -name “*.sql.gz” -mtime +7 -delete;对网站与配置保留 30 天。
- 安全:备份目录仅对 root 可读写;数据库密码建议使用 ~/.my.cnf 或凭据文件避免出现在命令行历史。
五 系统级备份与灾难恢复
- Timeshift(推荐)
- 安装:sudo apt install timeshift;选择 RSYNC 或 BTRFS 模式,选择备份位置(外置盘),按需设置计划任务;恢复可在系统内选择快照点,系统无法启动时用 Live USB 启动后运行 Timeshift 进行还原。
- Clonezilla
- 制作 Clonezilla 启动盘;备份时选择源盘与目标盘/镜像文件;恢复时进入恢复模式,选择镜像与目标磁盘写入。
- dd 镜像(谨慎)
- 备份:sudo dd if=/dev/sda of=/backup/system_$(date +%F).img bs=4M status=progress
- 恢复:sudo dd if=/backup/system_YYYY-MM-DD.img of=/dev/sda bs=4M status=progress
- 注意:dd 要求目标盘容量不小于源盘;镜像还原会覆盖整盘,务必先确认分区与引导配置;操作前做好完整备份与可启动介质准备。