备份云主机上的网页(通常指网站)是一项至关重要的运维任务,一个完整的网站备份通常包含两部分:网站文件 和数据库。
下面我将为您提供一个清晰、全面的备份方案,涵盖手动方法和自动化方案。
1、明确备份内容:
网站文件通常位于/var/www/html、/home/wwwroot 或/usr/share/nginx/html 等目录,包含 PHP、HTML、CSS、JavaScript、图片、上传的媒体文件等。
数据库如果网站是动态的(如 WordPress、Discuz、自定义PHP应用等),必须备份数据库(MySQL/MariaDB 或 PostgreSQL)。
2、登录云主机:使用 SSH 工具(如 PuTTY、Terminal、Xshell)登录到您的云服务器。
3、确认网站路径和数据库信息:查看您的 Web 服务器配置(如 Nginx 的sites-available 或 Apache 的httpd.conf)来确认网站根目录,数据库信息通常在网站配置文件中(如 WordPress 的wp-config.php)。
二、 手动备份方法(适用于所有环境)
这是最基础、最直接的方法,适合临时备份或一次性操作。
使用tar 命令将网站目录打包压缩。
切换到网站根目录的上一级,例如网站根目录是 /var/www/my_site cd /var/www 创建备份文件(包含当前日期,便于区分) tar -czpf /backup/my_site_files_$(date +%Y%m%d).tar.gz my_site/ 解释: -c: 创建归档 -z: 使用gzip压缩 -p: 保留文件权限 -f: 指定输出文件名 $(date +%Y%m%d): 生成当前日期,如 20231027
备份文件将保存在/backup/my_site_files_20231027.tar.gz(请确保/backup 目录存在或有其他存储路径)。
2. 备份数据库(以 MySQL/MariaDB 为例)
使用mysqldump 工具导出数据库。
导出单个数据库到 SQL 文件 mysqldump -u [数据库用户名] -p[数据库密码] [数据库名] > /backup/my_site_db_$(date +%Y%m%d).sql 示例(密码为 mypassword,数据库为 wordpress): mysqldump -u root -pmypassword wordpress > /backup/my_site_db_20231027.sql 重要安全提示:-p后紧跟密码(无空格)会暴露在历史命令中,更安全的方法是只使用 -p,之后在提示符下输入密码: mysqldump -u root -p wordpress > /backup/my_site_db_20231027.sql
云主机上的备份不是真正的备份! 一旦云主机故障或数据被误删,本地备份也会丢失。必须将备份文件转移到其他位置。
使用 SCP/SFTP 下载到本地电脑
# 在本地电脑的终端执行
scp username@your_server_ip:/backup/*.tar.gz /path/to/your/local/backup/
scp username@your_server_ip:/backup/*.sql /path/to/your/local/backup/使用云存储服务(推荐)
阿里云 OSS、腾讯云 COS、AWS S3、Backblaze B2 等。
* 通常提供命令行工具(如ossutil、s3cmd)或 API,可以编写脚本自动上传。
示例(使用 AWS CLI 上传到 S3)
aws s3 cp /backup/my_site_files_20231027.tar.gz s3://your-bucket-name/backups/
aws s3 cp /backup/my_site_db_20231027.sql s3://your-bucket-name/backups/手动备份繁琐且容易忘记,自动化是生产环境的最佳实践。
方案一:使用 Shell 脚本 + Cron 定时任务
1、创建备份脚本backup.sh:
#!/bin/bash
# 配置变量
BACKUP_DIR="/backup"
SITE_DIR="/var/www/my_site"
DB_USER="root"
DB_PASS="your_password"
DB_NAME="wordpress"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR
# 1. 备份网站文件
tar -czpf $BACKUP_DIR/site_files_$DATE.tar.gz $SITE_DIR
# 2. 备份数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_$DATE.sql
# 3. (可选)删除7天前的旧备份,避免磁盘占满
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
# 4. (可选)将备份同步到云存储
# /usr/local/bin/ossutil64 cp $BACKUP_DIR/site_files_$DATE.tar.gz oss://your-bucket/ --config-file /path/to/ossconfig
# /usr/local/bin/ossutil64 cp $BACKUP_DIR/db_$DATE.sql oss://your-bucket/ --config-file /path/to/ossconfig
echo "Backup completed at $(date)" >> /var/log/backup.log2、给脚本添加执行权限:
chmod +x /path/to/backup.sh3、设置 Cron 定时任务(例如每天凌晨2点执行):
# 编辑 crontab
crontab -e
# 添加一行
0 2 * * * /bin/bash /path/to/backup.sh方案二:使用可视化面板工具(适合新手)
如果您使用的是宝塔面板、cPanel/Plesk 等,它们内置了强大的备份功能。
以宝塔面板为例
1. 登录宝塔面板。
2. 进入“计划任务”模块。
3. 添加任务,类型选择“备份网站”和“备份数据库”。
4. 设置执行周期(如每日)。
5. 可以配置“保留份数”和“备份到云端”(支持FTP、阿里云OSS、腾讯云COS等)。
6. 一键备份和恢复非常方便。
磁盘快照这是最彻底、最快速的恢复方式,可以为系统盘和数据盘创建定期快照,当发生灾难性故障时,可以直接用快照回滚或创建新主机。
优点全盘备份,包含操作系统、应用、配置和所有数据。
缺点粒度较粗,通常无法只恢复单个文件;成本相对较高。
自定义镜像基于一个配置好的云主机系统盘创建镜像,可用于批量创建相同环境的主机。
1、3-2-1 备份原则:
* 至少保留3 份数据副本。
使用2 种不同的存储介质(例如云主机本地 + 对象存储)。
其中1 份存放在异地(例如另一家云服务商或物理隔离的位置)。
2、定期测试恢复:备份的有效性只能通过恢复来验证! 定期(例如每季度)在一个测试环境中尝试恢复备份,确保流程可行,数据完整。
3、加密敏感数据:如果备份内容包含敏感信息,考虑在备份时进行加密。
4、记录与监控:确保备份脚本有日志输出,并设置监控告警(如备份失败时发送邮件通知)。
一个完整的备份流程可以概括为以下步骤,您可以根据自身技术能力选择方案:
flowchart TD
A[开始备份网站] --> B{选择备份方式}
B --> C[手动备份]
B --> D[自动化脚本]
B --> E[可视化面板<br>(如宝塔)]
B --> F[云服务商快照]
C --> G[执行两个核心操作]
D --> G
E --> G
G --> H[备份网站文件]
G --> I[备份数据库]
H --> J[将备份文件转移至<br>安全的外部存储]
I --> J
J --> K[完成]
F --> L[创建磁盘快照<br>(全量备份)]
L --> K核心要点:无论采用哪种方法,关键在于自动化执行,并将备份文件转移到云主机之外的可靠存储中,最后务必定期验证恢复流程。 对于大多数个人站长和小型企业,“宝塔面板计划任务” 或“Shell脚本+Cron+对象存储” 是性价比和易用性最佳的方案。
文章摘自:https://idc.huochengrm.cn/zj/23237.html
评论
胡光济
回复备份云主机网站包括网站文件和数据库,可通过手动方法如使用tar和mysqldump,或自动化脚本结合Cron进行定期备份,可利用SCP/SFTP或云存储服务将备份文件转移至安全位置。
雷沛
回复备份云主机网站,需备份网站文件和数据库,可手动或自动化备份,建议使用Shell脚本+Cron+对象存储,确保数据安全。