Ubuntu 网站备份实操指南
一 备份范围与策略
df -h、du -sh /var/www、du -sh /etc/apache2sudo mkdir -p /var/web_backup二 手动备份步骤
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=.gitmysqldump -u root -p --single-transaction --routines --triggers dbname > /var/web_backup/dbname_$(date +%F).sqlmysqldump -u root -p --all-databases --single-transaction --routines --triggers > /var/web_backup/all-databases_$(date +%F).sqlgzip /var/web_backup/*.sqlpg_dump -U postgres dbname > /var/web_backup/dbname_$(date +%F).sqlpg_dumpall -U postgres > /var/web_backup/all-databases_$(date +%F).sqlsudo tar -cvpzf /var/web_backup/apache2-config_$(date +%F).tar.gz /etc/apache2sudo tar -cvpzf /var/web_backup/nginx-config_$(date +%F).tar.gz /etc/nginx三 自动化与异地备份
#!/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
sudo chmod +x /usr/local/bin/backup_site.shsudo crontab -e 添加:0 2 * * * /usr/local/bin/backup_site.shssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_backupssh-copy-id -i ~/.ssh/id_rsa_backup.pub user@web-serverrsync -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/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/wwwmysql -u root -p dbname < /var/web_backup/dbname_2025-08-01.sqlgunzip < /var/web_backup/dbname_2025-08-01.sql.gz | mysql -u root -p dbnamesudo tar -xzvf /var/web_backup/apache2-config_2025-08-01.tar.gz -C /五 实用建议与排错
--single-transaction(InnoDB)避免全表锁;如含 MyISAM 表,可在低峰期执行。