Linux:这啥命令?这台服务器我说了算-备份与恢复——“删库一时爽,恢复火葬场?”

举报
yd_240046519 发表于 2026/11/10 07:37:04 2026/11/10
【摘要】 第十五章:备份与恢复——“删库一时爽,恢复火葬场?”服务器最吓人的提示,不一定是 ERROR,而是同事的一句:“昨天的数据还能找回来吗?”备份不是把文件复制一下就完事;能恢复,才算真备份。 本章所有练习都在个人目录中进行,不碰生产数据。 1. 先准备一份“珍贵家产”mkdir -p "$HOME/backup-lab/site" "$HOME/backup-lab/archives"pri...

第十五章:备份与恢复——“删库一时爽,恢复火葬场?”

服务器最吓人的提示,不一定是 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. 本章挑战

在刚才的实验目录中完成四件事:

  1. 修改 site/index.html,重新运行一键备份脚本。
  2. 用 ls -lh "$HOME/backup-lab/archives" 找到新归档。
  3. 把新归档解压到另一个全新目录,核对页面内容。
  4. 想一想:本机硬盘突然损坏,你的备份还在吗?

本章口诀:备份要留版本,校验要查内容,恢复要做演练,异地才敢放心。

下一章:《第十六章:Docker 容器——“在我电脑上明明能跑!”》

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。