ANALYSIS
创建数据库备份脚本 db_backup.sh
PRTCL // BASH
#!/bin/bash
# 配置:数据库参数(可按需修改)DB_TYPE="mysql" # mysql 或 postgresqlDB_HOST="localhost"DB_PORT="3306" # 或 PostgreSQL 默认 5432DB_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 -deleteelse echo "数据库备份失败!" exit 1fi作用:
该脚本在执行时会:
- 根据配置的数据库类型执行相应备份命令;
- 生成带时间戳的备份文件;
- 压缩备份文件以节省空间;
- 可选清理过期备份文件,防止磁盘被旧备份占满。
创建数据库恢复脚本 db_restore.sh
PRTCL // BASH
#!/bin/bash
# 配置:数据库参数(可按需修改)DB_TYPE="mysql" # mysql 或 postgresqlDB_HOST="localhost"DB_PORT="3306" # 或 PostgreSQL 默认 5432DB_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 1fi
# 确认操作echo "即将恢复数据库 $DB_NAME 从备份文件 $BACKUP_FILE"read -p "确认操作? [y/N] " -n 1 -rechoif [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "恢复操作已取消" exit 1fi
# 检查备份文件是否存在if [ ! -f "$BACKUP_FILE" ]; then echo "备份文件不存在:$BACKUP_FILE" exit 1fi
# 解压缩备份文件(如果需要)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" fielse echo "数据库恢复失败!" exit 1fi作用:
- 从指定备份文件恢复数据库;
- 支持压缩的备份文件;
- 包含确认机制以防止误操作;
- 根据数据库类型执行相应恢复命令。
设置定时任务(crontab)
PRTCL // BASH
# 添加到用户 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
chmod +x ~/scripts/db_backup.shchmod +x ~/scripts/db_restore.shR P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.06
Auth_Verified: 2026.04.06
