温馨提示×

Ubuntu上如何进行网站备份

小樊
41
2025-12-18 07:05:19
栏目: 云计算

Ubuntu 网站备份实操指南

一 备份范围与策略

  • 备份对象通常包括:网站文件(如 /var/www/var/www/html)、数据库(MySQL/MariaDBPostgreSQL)、以及关键配置(如 /etc/apache2/etc/nginx)。
  • 建议采用 3-2-1 备份原则:保留至少 3 个副本,存放在 2 种不同介质,其中 1 份为异地/离线。
  • 先检查磁盘空间与目录大小,确保有足够余量:
    • 查看磁盘与目录:df -hdu -sh /var/wwwdu -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
  • 数据库备份
    • 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
  • 配置文件备份
    • 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

三 自动化与异地备份

  • 本地定时备份脚本(示例)
    • 保存为 /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.sh
      • sudo crontab -e 添加:0 2 * * * /usr/local/bin/backup_site.sh
  • 异地备份(备份服务器拉取)
    • 在备份服务器生成 SSH 密钥并免密登录 Web 服务器:
      • ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_backup
      • ssh-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/

四 恢复与校验

  • 恢复网站文件
    • 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 年每月),并定期清理过期备份。

0