一、为什么需要备份策略
想象你的服务器突然硬盘损坏,或者误删了重要配置文件——没有备份的话,这些数据就像泼出去的水,再也找不回来了。备份的本质是给数据上保险,而Linux系统备份的核心逻辑很简单:定期、多份、异地。
举个真实案例:某开发团队用crontab每天自动备份数据库,但所有备份都放在同一块硬盘。结果硬盘故障时,连带备份一起丢失。这就是典型的"把鸡蛋放在一个篮子里"。
二、基础备份工具实战
技术栈:Bash Shell + tar
1. 文件级备份
最简单的方案是用tar打包关键目录,例如:
#!/bin/bash
# 备份/var/www和/etc目录,按日期命名
backup_dir="/backups"
timestamp=$(date +"%Y%m%d_%H%M%S")
tar -czvf "$backup_dir/system_$timestamp.tar.gz" /var/www /etc
# 保留最近7天备份,自动清理旧文件
find "$backup_dir" -name "*.tar.gz" -mtime +7 -delete
关键参数说明:
-czvf:压缩(c)、gzip压缩(z)、显示进度(v)、指定文件名(f)find -mtime +7:查找修改时间超过7天的文件
2. 增量备份技巧
全量备份耗资源,可以用rsync做增量:
rsync -avz --delete --link-dest=/backups/last_full /var/www /backups/incremental_$(date +%F)
--link-dest参数会硬链接未修改的文件,节省空间。
三、数据库备份方案
技术栈:MySQL + mysqldump
1. 基础备份命令
mysqldump -u root -p --all-databases > /backups/mysql_full_$(date +%F).sql
安全建议:
- 不要在命令行直接写密码,改用
~/.my.cnf配置文件 - 大型数据库加上
--single-transaction避免锁表
2. 二进制日志备份
配合mysqlbinlog实现时间点恢复:
# 实时抓取binlog到备份目录
mysqlbinlog --read-from-remote-server --host=localhost --raw --stop-never binlog.000123
四、进阶:自动化与验证
1. 使用systemd定时器
比crontab更现代的方案:
# /etc/systemd/system/backup.service
[Unit]
Description=Daily backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup_script.sh
# /etc/systemd/system/backup.timer
[Timer]
OnCalendar=daily
Persistent=true
2. 备份验证三原则
- 定期恢复测试:每季度实际恢复一次备份文件
- 监控备份状态:用邮件或Telegram机器人通知失败任务
- 加密敏感数据:比如用
gpg --encrypt处理数据库备份
五、不同规模的策略选择
小型个人项目
- 频率:每周全量 + 每日增量
- 存储:本地硬盘 + 异地U盘轮换
- 工具:bash脚本 + tar
企业级方案
- 分布式存储:MinIO或AWS S3
- 版本控制:用
borgbackup支持去重和加密 - 灾备演练:通过Ansible自动恢复测试
六、避坑指南
- 不要信任单一存储介质:SSD也可能突然报废
- 注意文件权限:备份后检查
ls -l确认属主正确 - 日志是关键:记录每次备份的MD5校验值
七、终极建议
最好的备份策略要满足3-2-1原则:
- 3份拷贝
- 2种不同介质
- 1份异地保存
下次当你输入rm -rf之前,不妨先问自己:这个操作发生后,我还能睡安稳觉吗?
评论