复制成功
请遵守本站许可
REPORT
Chapter_Post // Field_Report

Post_Ref: RL-数据库备份与恢复

2026.04.06

数据库备份与恢复脚本

Echo HaoRan
Echo HaoRan
#ScriptFile
ANALYSIS

创建数据库备份脚本 db_backup.sh#

PRTCL // BASH
#!/bin/bash
# 配置:数据库参数(可按需修改)
DB_TYPE="mysql" # mysql 或 postgresql
DB_HOST="localhost"
DB_PORT="3306" # 或 PostgreSQL 默认 5432
DB_USER="root"
DB_PASS="password"
DB_NAME="myapp"
BACKUP_DIR="$HOME/backups"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 根据数据库类型执行备份
if [ "$DB_TYPE" = "mysql" ]; then
# MySQL 备份
mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
elif [ "$DB_TYPE" = "postgresql" ]; then
# PostgreSQL 备份
PGPASSWORD="$DB_PASS" pg_dump -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
fi
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "数据库备份成功:${DB_NAME}_${DATE}.sql"
# 压缩备份文件
gzip "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
# 可选:删除 7 天前的备份
find "$BACKUP_DIR" -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete
else
echo "数据库备份失败!"
exit 1
fi

作用
该脚本在执行时会:

  • 根据配置的数据库类型执行相应备份命令;
  • 生成带时间戳的备份文件;
  • 压缩备份文件以节省空间;
  • 可选清理过期备份文件,防止磁盘被旧备份占满。

创建数据库恢复脚本 db_restore.sh#

PRTCL // BASH
#!/bin/bash
# 配置:数据库参数(可按需修改)
DB_TYPE="mysql" # mysql 或 postgresql
DB_HOST="localhost"
DB_PORT="3306" # 或 PostgreSQL 默认 5432
DB_USER="root"
DB_PASS="password"
DB_NAME="myapp"
BACKUP_DIR="$HOME/backups"
BACKUP_FILE="$1" # 从命令行传入备份文件名
# 检查是否提供了备份文件
if [ -z "$BACKUP_FILE" ]; then
echo "用法: $0 < 备份文件路径 >"
echo "可用的备份文件:"
ls -la "$BACKUP_DIR"/*.sql.gz
exit 1
fi
# 确认操作
echo "即将恢复数据库 $DB_NAME 从备份文件 $BACKUP_FILE"
read -p "确认操作? [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "恢复操作已取消"
exit 1
fi
# 检查备份文件是否存在
if [ ! -f "$BACKUP_FILE" ]; then
echo "备份文件不存在:$BACKUP_FILE"
exit 1
fi
# 解压缩备份文件(如果需要)
if [[ "$BACKUP_FILE" == *.gz ]]; then
gunzip -c "$BACKUP_FILE" > "$BACKUP_FILE.tmp"
BACKUP_FILE="$BACKUP_FILE.tmp"
fi
# 根据数据库类型执行恢复
if [ "$DB_TYPE" = "mysql" ]; then
# MySQL 恢复
mysql -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASS "$DB_NAME" < "$BACKUP_FILE"
elif [ "$DB_TYPE" = "postgresql" ]; then
# PostgreSQL 恢复
PGPASSWORD="$DB_PASS" psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME < "$BACKUP_FILE"
fi
# 检查恢复是否成功
if [ $? -eq 0 ]; then
echo "数据库恢复成功!"
# 清理临时文件
if [ -f "$BACKUP_FILE.tmp" ]; then
rm "$BACKUP_FILE.tmp"
fi
else
echo "数据库恢复失败!"
exit 1
fi

作用

  • 从指定备份文件恢复数据库;
  • 支持压缩的备份文件;
  • 包含确认机制以防止误操作;
  • 根据数据库类型执行相应恢复命令。

设置定时任务(crontab)#

PRTCL // BASH
Terminal window
# 添加到用户 crontab(替换 YOUR_USERNAME 为实际用户名)
0 2 * * * /home/YOUR_USERNAME/scripts/db_backup.sh >> /home/YOUR_USERNAME/backups/cron.log 2>&1

作用

  • 0 2 * * * 表示每天凌晨 2:00 执行;
  • 调用数据库备份脚本;
  • 将脚本的标准输出和错误追加写入 cron.log,便于排查问题;
  • 注意:crontab 不识别 ~,必须使用绝对路径。

赋予脚本执行权限(执行一次即可)#

PRTCL // SH
Terminal window
chmod +x ~/scripts/db_backup.sh
chmod +x ~/scripts/db_restore.sh

R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.06
// END OF POST

订阅

通过 RSS 订阅本站,新文章发布时第一时间收到通知。

Follow
Classified
Chapter_06
Protocol_Ref: CC-BY-NC-SA-4.0

数据库备份与恢复脚本

Author: CHONGXIReleased: 2026.04.06

Licensed under CC BY-NC-SA 4.0

评论

© 2025-2026 EchoSpace
Powered by Astro & echohaoran Non-Collaborative_Entity // Protocol_V.4.21