news 2026/9/27 8:45:20

基于 Shell 的本地数据库一键备份与恢复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 Shell 的本地数据库一键备份与恢复

基于 Shell 的本地数据库一键备份与恢复

在日常全栈开发与生产运维中,数据库数据的安全性是悬在所有工程师头顶的达摩克利斯之剑:

  • 本地执行测试脚本时不小心DROP掉了一张重要的数据表;
  • 生产环境执行版本升级前,需要对当前线上数据库做一次秒级的快照备份;
  • 需要快速将生产环境的脱敏数据一键同步到本地开发环境进行复杂 Bug 复现。

很多团队依赖庞大复杂的第三方备份 SaaS 工具,配置繁琐且存在网络权限暴露的风险。

用不到 30 行纯净严谨的 Bash Shell 脚本,配合 Docker 原生命令,我们可以打造一套秒级备份、自动 gzip 压缩、支持一键全量恢复的极简数据库容灾工具。

极简备份脚本实现(scripts/db-backup.sh)

#!/bin/bash set -euo pipefail # 基础配置 CONTAINER_NAME="star-postgres" DB_USER="star_dev" DB_NAME="star_app" BACKUP_DIR="./.backups/db" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_FILE="${BACKUP_DIR}/backup_${DB_NAME}_${TIMESTAMP}.sql.gz" mkdir -p "${BACKUP_DIR}" echo "📦 正在执行数据库 [${DB_NAME}] 全量快照备份..." # 1. 导出数据并实时通过 gzip 压缩 docker exec "${CONTAINER_NAME}" pg_dump -U "${DB_USER}" "${DB_NAME}" | gzip > "${BACKUP_FILE}" FILE_SIZE=$(ls -lh "${BACKUP_FILE}" | awk '{print $5}') echo "✅ 备份成功!备份文件: ${BACKUP_FILE} (体积: ${FILE_SIZE})" # 2. 自动清理机制:本地仅保留最近 10 次历史备份,防止撑爆磁盘 echo "🧹 正在清理超过 10 个的陈旧备份快照..." ls -t "${BACKUP_DIR}"/backup_*.sql.gz | tail -n +11 | xargs -I {} rm -- "{}" 2>/dev/null || true echo "✨ 备份收尾完毕!"

极简一键恢复脚本实现(scripts/db-restore.sh)

当发生误操作或需要回滚到特定快照时,执行一键恢复:

#!/bin/bash set -euo pipefail CONTAINER_NAME="star-postgres" DB_USER="star_dev" DB_NAME="star_app" BACKUP_DIR="./.backups/db" # 检查是否存在备份文件 LATEST_BACKUP=$(ls -t "${BACKUP_DIR}"/backup_*.sql.gz 2>/dev/null | head -n 1 || true) if [ -z "${LATEST_BACKUP}" ]; then echo "❌ 错误: 未在 ${BACKUP_DIR} 中找到任何可用的备份文件!" exit 1 fi TARGET_FILE="${1:-$LATEST_BACKUP}" echo "⚠️ [高危警告] 即将使用快照 [${TARGET_FILE}] 覆盖当前数据库 [${DB_NAME}]!" read -p "确认继续执行覆盖恢复吗?(y/N): " confirm if [[ ! "$confirm" =~ ^[yY]$ ]]; then echo "操作已取消。" exit 0 fi echo "🔄 正在执行解压与全量数据库恢复..." # 1. 终止已有活动连接,防止锁冲突 docker exec "${CONTAINER_NAME}" psql -U "${DB_USER}" -d postgres -c \ "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${DB_NAME}' AND pid <> pg_backend_pid();" > /dev/null # 2. 重建干净数据库并导入 docker exec "${CONTAINER_NAME}" psql -U "${DB_USER}" -d postgres -c "DROP DATABASE IF EXISTS ${DB_NAME};" > /dev/null docker exec "${CONTAINER_NAME}" psql -U "${DB_USER}" -d postgres -c "CREATE DATABASE ${DB_NAME};" > /dev/null gunzip -c "${TARGET_FILE}" | docker exec -i "${CONTAINER_NAME}" psql -U "${DB_USER}" -d "${DB_NAME}" > /dev/null echo "🎉 数据库恢复成功!数据已完全还原至快照时间点。"

生产集成与定时任务(Crontab)

在生产服务器上,只需在crontab -e中配置一行定时任务:

# 每天凌晨 03:00 自动执行一次数据库冷备 0 3 * * * /bin/bash /opt/star-app/scripts/db-backup.sh >> /var/log/db_backup.log 2>&1

配合rclone或云厂商 CLI,可顺手将压缩包同步至跨区域的云存储冷归档中,每月存储成本不到 1 块钱。

总结

真正的安全感,来自于底层的极简与可控。

不到 30 行纯粹的 Shell 脚本,把数据库备份与灾难恢复做到极致轻量、透明可靠。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 8:45:18

手机网站指向什么意思新手入门

搞懂手机网站指向多少钱?新手避坑指南 自己不会代码想做网站,是不是被各种“指向”、“解析”、“服务器”术语绕晕了?别急,很多老板问“手机网站指向多少钱”,其实这是个误区。指向本身不花钱,但背后的部署和带宽成本才是大头。今天就把这层窗户纸捅破,带你从0到1搞懂这事,顺便聊聊怎么用最少的钱把站做漂亮。…

作者头像 李华
网站建设 2026/9/27 8:45:14

网站建设用哪种语言好?揭秘最佳实践与真实报价

网站建设用哪种语言好?揭秘最佳实践与真实报价 刚拿到服务器后台,看着满屏的英文报错和配置项,是不是瞬间头皮发麻?域名解析、SSL证书、端口映射,这些名词听着就让人头大。其实,很多老板和转行的设计师都卡在这一步,以为搞定了代码就万事大吉,结果上线后才发现, 域名服务器搞不懂 才是真正的大坑。…

作者头像 李华
网站建设 2026/9/27 8:44:57

新手入门企业手机网站建设提升用户体验的三个点避坑指南

新手入门企业手机网站建设提升用户体验的三个点避坑指南 昨晚凌晨两点,我还在给河北石家庄一家做机械配件的客户擦汗。他盯着屏幕,脸色铁青,指着页面角落那个一闪而过的弹窗问我:“这玩意儿哪来的?我网站被黑挂马不知道怎么办,是不是要赔钱?”…

作者头像 李华
网站建设 2026/9/27 8:44:52

做网站颜色黑色代码多少?老手揭秘建站报价里的隐藏坑

做网站颜色黑色代码多少?老手揭秘建站报价里的隐藏坑 域名服务器搞不懂,是90%新手在拿到建站报价单时最大的心理障碍。很多客户拿着Excel表格问:“这行CSS里背景色为什么填000000?这跟我的服务器配置有什么关系?”别急,今天咱们不整虚的,直接拆解 做网站颜色黑色代码多少…

作者头像 李华
网站建设 2026/9/27 8:44:38

湛江网站建设产品优化哪家好?3个技巧搞定域名服务器难题

湛江网站建设产品优化哪家好?3个技巧搞定域名服务器难题 刚接手湛江本地的一个官网项目,客户一开口就问:“你们建站哪家好?怎么我的网站打不开,是不是服务器挂了?”别急,这是90%老板和运营都踩过的坑。域名解析没配好,服务器防火墙没放行,或者SSL证书没装对,网站就像建在沙地上的房子,风一吹就倒。很多人…

作者头像 李华
网站建设 2026/9/27 8:44:17

搞定公司简介ppt模板素材:5个SEO注意事项避坑指南

搞定公司简介ppt模板素材:5个SEO注意事项避坑指南 别再把那些土得掉渣的PPT模板直接往网站里塞了。客户打开你的官网,第一眼看到的不是专业形象,而是一堆错位文字、模糊图片和廉价的渐变背景,心里只会想“这公司靠谱吗”。 模板网站太丑不够用…

作者头像 李华