一、为什么需要备份策略

想象你的服务器突然硬盘损坏,或者误删了重要配置文件——没有备份的话,这些数据就像泼出去的水,再也找不回来了。备份的本质是给数据上保险,而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. 备份验证三原则

  1. 定期恢复测试:每季度实际恢复一次备份文件
  2. 监控备份状态:用邮件或Telegram机器人通知失败任务
  3. 加密敏感数据:比如用gpg --encrypt处理数据库备份

五、不同规模的策略选择

小型个人项目

  • 频率:每周全量 + 每日增量
  • 存储:本地硬盘 + 异地U盘轮换
  • 工具:bash脚本 + tar

企业级方案

  • 分布式存储:MinIO或AWS S3
  • 版本控制:用borgbackup支持去重和加密
  • 灾备演练:通过Ansible自动恢复测试

六、避坑指南

  1. 不要信任单一存储介质:SSD也可能突然报废
  2. 注意文件权限:备份后检查ls -l确认属主正确
  3. 日志是关键:记录每次备份的MD5校验值

七、终极建议

最好的备份策略要满足3-2-1原则

  • 3份拷贝
  • 2种不同介质
  • 1份异地保存

下次当你输入rm -rf之前,不妨先问自己:这个操作发生后,我还能睡安稳觉吗?