Linux:这啥命令?这台服务器我说了算-备份与恢复——“删库一时爽,恢复火葬场?”
第十五章:备份与恢复——“删库一时爽,恢复火葬场?”
服务器最吓人的提示,不一定是 ERROR,而是同事的一句:“昨天的数据还能找回来吗?”
备份不是把文件复制一下就完事;能恢复,才算真备份。 本章所有练习都在个人目录中进行,不碰生产数据。
1. 先准备一份“珍贵家产”
mkdir -p "$HOME/backup-lab/site" "$HOME/backup-lab/archives"
printf 'Hello, Linux!\n' > "$HOME/backup-lab/site/index.html"
printf 'port=8080\n' > "$HOME/backup-lab/site/app.conf"
ls -l "$HOME/backup-lab/site"
现在假设 site 就是你的业务目录。今天我们要给它买份“后悔药”。
2. tar:把文件打包带走
使用 tar 创建压缩包:
tar -czf "$HOME/backup-lab/archives/site.tar.gz" \
-C "$HOME/backup-lab" site
参数速记:-c 创建、-z gzip 压缩、-f 指定文件;-C 切换打包起点。这样解压后得到的是 site/,而不是一长串绝对路径。
查看备份内容:
tar -tzf "$HOME/backup-lab/archives/site.tar.gz"
注意:打包成功 ≠ 恢复成功。下面才是真正的考试。
3. 校验:压缩包可别是个空心饼
检查归档能否正常读取:
tar -tzf "$HOME/backup-lab/archives/site.tar.gz" > /dev/null
生成校验值并验证文件是否被改动:
sha256sum "$HOME/backup-lab/archives/site.tar.gz" \
> "$HOME/backup-lab/archives/site.tar.gz.sha256"
sha256sum -c "$HOME/backup-lab/archives/site.tar.gz.sha256"
OK 说明文件与记录的校验值一致,但不能代替恢复演练。
4. 恢复:别拿生产目录当试验田
先建一个独立恢复目录:
mkdir -p "$HOME/backup-lab/restore"
tar -xzf "$HOME/backup-lab/archives/site.tar.gz" \
-C "$HOME/backup-lab/restore"
检查是否还原完整:
find "$HOME/backup-lab/restore" -type f
diff -r "$HOME/backup-lab/site" \
"$HOME/backup-lab/restore/site"
diff 没有输出,表示本次练习中的文件内容一致。恭喜,后悔药通过了试吃环节。
5. rsync:只搬需要更新的东西
当文件很多时,重复全量复制很浪费。rsync 适合做目录同步。
Ubuntu 若未安装:
sudo apt install rsync
先预演,再执行:
rsync -av --dry-run "$HOME/backup-lab/site/" \
"$HOME/backup-lab/site-copy/"
rsync -av "$HOME/backup-lab/site/" \
"$HOME/backup-lab/site-copy/"
结尾的 / 很关键:site/ 表示同步目录内容。改动前先用 --dry-run 看清结果。
特别警惕 --delete:它会把目标端多出来的文件删除。同步不是历史备份,误删也可能同步过去。重要数据应保存多个历史版本。
6. 一键备份脚本:让后悔药自动生产
创建脚本:
cat > "$HOME/backup-demo.sh" <<'SCRIPT'
#!/usr/bin/env bash
set -euo pipefail
src="$HOME/backup-lab/site"
dst="$HOME/backup-lab/archives"
mkdir -p "$dst"
archive="$dst/site-$(date +%F_%H%M%S).tar.gz"
tar -czf "$archive" -C "$(dirname "$src")" "$(basename "$src")"
tar -tzf "$archive" > /dev/null
echo "备份完成:$archive"
SCRIPT
bash "$HOME/backup-demo.sh"
它会生成带时间戳的备份,避免每次覆盖同一个文件。脚本使用 set -euo pipefail,遇到常见执行错误会及早退出。
想每天凌晨两点运行?在 crontab -e 中加入:
0 2 * * * /bin/bash "$HOME/backup-demo.sh" >> "$HOME/backup-demo.log" 2>&1
定时任务执行后记得检查日志、备份文件和恢复结果;“任务已配置”不等于“备份已成功”。
7. 真正上生产前,牢记三件事
- 3-2-1 原则:至少 3 份数据(含原件)、使用 2 种存储介质,其中 1 份在异地。备份全在同一块硬盘,硬盘一坏就集体下班。
- 数据库另有规矩:运行中的数据库不要随手复制数据目录;应使用
pg_dump、mysqldump等合适的备份方法,或经过验证的一致性快照。 - 定期恢复演练:备份应限制访问权限,异地副本按需加密,并明确最多能损失多久的数据、多久能恢复业务。
8. 本章挑战
在刚才的实验目录中完成四件事:
- 修改
site/index.html,重新运行一键备份脚本。 - 用
ls -lh "$HOME/backup-lab/archives"找到新归档。 - 把新归档解压到另一个全新目录,核对页面内容。
- 想一想:本机硬盘突然损坏,你的备份还在吗?
本章口诀:备份要留版本,校验要查内容,恢复要做演练,异地才敢放心。
下一章:《第十六章:Docker 容器——“在我电脑上明明能跑!”》
- 点赞
- 收藏
- 关注作者
评论(0)