服务器定期备份策略,防止误删数据无法恢复
服务器上的数据一旦被误删,如果没有备份,往往只能依靠磁盘恢复工具碰运气。
一套可执行的定期备份策略,核心是把备份任务自动化、把备份文件放到不同位置、并且定期验证能恢复。
下文按零基础也能照做的顺序,讲清从准备到验证的完整流程。
先确认备份对象和存放位置
动手写命令前,先列清楚要备份什么。
常见三类:网站目录、数据库、配置文件。
- 网站目录:例如
/www/wwwroot/你的站点或/var/www/html - 数据库:MySQL 用
mysqldump,PostgreSQL 用pg_dump - 配置文件:
/etc/nginx/、/etc/mysql/等
备份文件不要和源数据放在同一块磁盘。本地备份只防误删,不防磁盘损坏,建议至少保留一份到另一台服务器或对象存储。
mkdir -p /backup/site /backup/db /backup/conf
df -h /backup # 确认备份盘剩余空间
用 tar 打包网站目录
网站目录文件多,直接复制效率低,用 tar 打包并压缩。
下面命令把网站目录打包到 /backup/site,文件名带日期,方便区分。
tar -czf /backup/site/site_$(date +%F).tar.gz /www/wwwroot/你的站点
ls -lh /backup/site/
执行后看到 site_2025-01-01.tar.gz 这类文件,且大小不为 0,说明打包成功。
如果提示 file changed as we read it,通常是有进程正在写文件,可以忽略,但最好在低峰期执行。
导出数据库并保留 SQL 文件
数据库不能直接复制文件,用 mysqldump 导出逻辑备份。
以下命令导出单个库,并压缩保存。
mysqldump -u root -p --single-transaction 你的库名 | gzip > /backup/db/db_$(date +%F).sql.gz
--single-transaction 适合 InnoDB 表,能在不锁表的情况下导出。
执行后会提示输入密码。
导出完成后用 zcat 检查文件头,确认不是空文件。
zcat /backup/db/db_$(date +%F).sql.gz | head -n 5
设置 crontab 自动执行
手动备份容易忘,用 crontab 定时。
执行 crontab -e,加入下面两行:每天凌晨 2 点备份网站,2 点 30 分备份数据库。
0 2 * * * tar -czf /backup/site/site_$(date +\%F).tar.gz /www/wwwroot/你的站点
30 2 * * * mysqldump -u root -p'你的密码' --single-transaction 你的库名 | gzip > /backup/db/db_$(date +\%F).sql.gz
注意 % 在 crontab 中需要转义为 \%。
保存后可以用 crontab -l 查看是否写入成功。
第二天检查 /backup 下是否出现新文件。
避坑:备份失败的常见原因
- 密码写错或包含特殊字符:命令行中密码含
$、!等符号时,建议用单引号包裹,或改用~/.my.cnf配置文件。 - 磁盘写满:备份文件会持续增长,建议加清理策略,例如只保留最近 7 天:
find /backup -name "*.gz" -mtime +7 -delete。 - 只备份不验证:备份文件损坏或为空时,恢复阶段才发现就晚了。每周至少抽查一次。
- 备份和源数据同盘:服务器磁盘故障时一起丢失,务必异地保存一份。
验证备份是否真的能恢复
备份的最终目的是恢复。
建议在测试目录解压并导入,确认文件完整。
mkdir -p /tmp/restore_test
tar -xzf /backup/site/site_$(date +%F).tar.gz -C /tmp/restore_test
ls /tmp/restore_test
数据库恢复测试可以导入到一个临时库:
mysql -u root -p -e "CREATE DATABASE test_restore;"
zcat /backup/db/db_$(date +%F).sql.gz | mysql -u root -p test_restore
能正常解压、导入无报错,说明备份可用。定期备份策略是否有效,不看备份文件数量,而看恢复测试是否通过。
常见疑问
备份文件保留多久合适? 取决于数据重要性和磁盘空间。
常见做法是本地保留 7 天,异地保留 30 天,具体以实际存储容量为准。
宝塔面板用户怎么操作? 宝塔后台有“计划任务”功能,可添加“备份网站”和“备份数据库”任务,设置执行周期和保留份数,效果与命令行一致。
误删后第一时间做什么? 立即停止对相关目录的写入,优先从最近备份恢复;
如果备份也不可用,再考虑专业数据恢复,且不要在原盘上继续操作。
按上述步骤配置后,你至少拥有网站和数据库的定时备份,并有恢复验证方法。
后续可根据数据量调整频率和保留策略,但“异地存一份、定期验一次”这两条不建议省。