Ubuntu上如何进行网站备份
导读:Ubuntu 网站备份实操指南 一 备份范围与策略 备份对象通常包括:网站文件(如 /var/www 或 /var/www/html)、数据库(MySQL/MariaDB 或 PostgreSQL)、以及关键配置(如 /etc/apach...
Ubuntu 网站备份实操指南
一 备份范围与策略
- 备份对象通常包括:网站文件(如 /var/www 或 /var/www/html)、数据库(MySQL/MariaDB 或 PostgreSQL)、以及关键配置(如 /etc/apache2 或 /etc/nginx)。
- 建议采用 3-2-1 备份原则:保留至少 3 个副本,存放在 2 种不同介质,其中 1 份为异地/离线。
- 先检查磁盘空间与目录大小,确保有足够余量:
- 查看磁盘与目录:
df -h、du -sh /var/www、du -sh /etc/apache2 - 创建本地备份目录:
sudo mkdir -p /var/web_backup
- 查看磁盘与目录:
二 手动备份步骤
- 网站文件打包
- 使用 tar 归档并压缩,保留权限:
sudo tar -cvpzf /var/web_backup/web-files_$(date +%F).tar.gz -C /var/www .
- 排除不需要的路径(使用相对路径):
sudo tar -cvpzf /var/web_backup/web-files_$(date +%F).tar.gz -C /var/www . --exclude=cache --exclude=.git
- 使用 tar 归档并压缩,保留权限:
- 数据库备份
- MySQL/MariaDB:
- 单库:
mysqldump -u root -p --single-transaction --routines --triggers dbname > /var/web_backup/dbname_$(date +%F).sql - 全部库:
mysqldump -u root -p --all-databases --single-transaction --routines --triggers > /var/web_backup/all-databases_$(date +%F).sql - 建议压缩:
gzip /var/web_backup/*.sql
- 单库:
- PostgreSQL:
- 单库:
pg_dump -U postgres dbname > /var/web_backup/dbname_$(date +%F).sql - 全部库:
pg_dumpall -U postgres > /var/web_backup/all-databases_$(date +%F).sql
- 单库:
- MySQL/MariaDB:
- 配置文件备份
- Apache:
sudo tar -cvpzf /var/web_backup/apache2-config_$(date +%F).tar.gz /etc/apache2 - Nginx:
sudo tar -cvpzf /var/web_backup/nginx-config_$(date +%F).tar.gz /etc/nginx
- Apache:
三 自动化与异地备份
- 本地定时备份脚本(示例)
- 保存为 /usr/local/bin/backup_site.sh,按需修改目录与数据库:
#!/usr/bin/env bash set -Eeuo pipefail BACKUP_DIR="/var/web_backup" WWW_DIR="/var/www" DB_USER="root" DB_PASS="YOUR_DB_PASS" DB_NAME="your_db" mkdir -p "$BACKUP_DIR" # 网站文件 tar -cvpzf "$BACKUP_DIR/web-files_$(date +%F).tar.gz" -C "$WWW_DIR" . # 数据库 mysqldump -u"$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers "$DB_NAME" \ | gzip > "$BACKUP_DIR/db_${ DB_NAME} _$(date +%F).sql.gz" # 配置文件 tar -cvpzf "$BACKUP_DIR/apache2-config_$(date +%F).tar.gz" /etc/apache2 # 清理 30 天前的备份 find "$BACKUP_DIR" -type f -mtime +30 -delete - 赋权并加入 cron(每天 02:00 执行):
sudo chmod +x /usr/local/bin/backup_site.shsudo crontab -e添加:0 2 * * * /usr/local/bin/backup_site.sh
- 保存为 /usr/local/bin/backup_site.sh,按需修改目录与数据库:
- 异地备份(备份服务器拉取)
- 在备份服务器生成 SSH 密钥并免密登录 Web 服务器:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_backupssh-copy-id -i ~/.ssh/id_rsa_backup.pub user@web-server
- 使用 rsync 拉取备份目录(先干跑验证):
- 干跑:
rsync -azP --dry-run --delete -e 'ssh -i ~/.ssh/id_rsa_backup' user@web-server:/var/web_backup/ /path/to/offsite/backups/ - 正式:
rsync -azP --delete -e 'ssh -i ~/.ssh/id_rsa_backup' user@web-server:/var/web_backup/ /path/to/offsite/backups/
- 干跑:
- 在备份服务器上定时执行(每天 03:00):
crontab -e添加:0 3 * * * rsync -azP --delete -e 'ssh -i ~/.ssh/id_rsa_backup' user@web-server:/var/web_backup/ /path/to/offsite/backups/
- 在备份服务器生成 SSH 密钥并免密登录 Web 服务器:
四 恢复与校验
- 恢复网站文件
sudo tar -xzvf /var/web_backup/web-files_2025-08-01.tar.gz -C /var/www
- 恢复数据库
- 未压缩:
mysql -u root -p dbname < /var/web_backup/dbname_2025-08-01.sql - 已压缩:
gunzip < /var/web_backup/dbname_2025-08-01.sql.gz | mysql -u root -p dbname
- 未压缩:
- 恢复配置
sudo tar -xzvf /var/web_backup/apache2-config_2025-08-01.tar.gz -C /
- 校验与演练
- 定期在测试环境恢复,核对文件权限、数据库一致性、站点可用性;保留 校验记录 与 恢复文档。
五 实用建议与排错
- 安全与权限:数据库备份命令中的密码尽量避免出现在命令行历史或脚本中,可使用 ~/.my.cnf 配置凭据,或在受控环境中执行;备份目录设置合适权限(如仅 root 可读写)。
- 一致性与锁:数据库使用
--single-transaction(InnoDB)避免全表锁;如含 MyISAM 表,可在低峰期执行。 - 排除清单:将缓存、日志、会话、构建产物等加入排除列表,减少体积与噪声。
- 监控与告警:对备份任务加日志与返回码检查,必要时接入通知(如邮件/企业微信/钉钉)。
- 保留策略:按容量与合规设定保留周期(如近 7 天每日、近 30 天每周、近 1 年每月),并定期清理过期备份。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上如何进行网站备份
本文地址: https://pptw.com/jishu/774714.html
