造城中·📚30 篇造城日记·📝最近更新:2026年07月11日
💾

差一点全军覆没:数据备份的血泪教训

不小心删了PostgreSQL的WAL文件,数据库直接起不来。还好三天前手动备了一份。

水哥
2026-05-026 分钟阅读

那天下午,服务器上一片红色

Grafana 面板上,我所有的平台同时标红。不是宕机,是磁盘空间警告——每个平台的数据都堆在同一个盘上,还剩 8%。

心里咯噔一下。如果这块盘满了,50个平台一起瘫痪。

我的备份方案(故障之前)

说出来丢人——我根本没做自动备份。我以为云服务器自带快照就是备份,直到那次咨询了客服:快照是整机快照,恢复要整个机器回滚,不能只恢复数据库。

差一点全军覆没的时刻

那天下午我在清理日志,不小心执行了:

rm -rf /var/lib/postgresql/14/main/pg_wal/*

我删的不是日志,是 WAL 文件——PostgreSQL 的事务日志。数据库直接起不来了。

还好,三天前我手动执行了一次 pg_dump。虽然丢了最近两天的数据,但至少保住了主体。

那天之后我做的备份体系

1. 数据库自动备份

#!/bin/bash
# 每天凌晨3点执行
pg_dump -U postgres water_db | gzip > /backup/db_$(date +%Y%m%d).sql.gz

# 保留最近7天
find /backup -name "db_*.sql.gz" -mtime +7 -delete

2. 异地备份

# 备份文件同步到阿里云 OSS
rclone sync /backup oss:water-backup/ --include "db_*.sql.gz"

3. 备份验证

# 每周日自动恢复备份到测试库,验证完整性
gunzip -c /backup/db_$(date +%Y%m%d).sql.gz | psql water_db_test

写在最后

那次事故之后,我给自己定了三条铁律:

  1. 磁盘使用率不能超过80%
  2. 备份不能手动做,必须是 crontab
  3. 备份必须自动验证,不能"备份了就安心"

做独立开发,你不仅写代码,你也是自己的 DBA、SRE、运维工程师。一个备份失误,可能让你三个月的努力归零。

数据在,一切都可以重来。数据丢了,什么都没了。

相关文章