本文目录导读:

我来给你写一个完整的数据库自动备份脚本,包含多种常见数据库的支持:
MySQL/MariaDB 备份脚本
#!/bin/bash
# MySQL数据库自动备份脚本
# 配置参数
DB_HOST="localhost"
DB_USER="root"
DB_PASSWORD="your_password"
BACKUP_DIR="/backup/mysql"
RETENTION_DAYS=7
LOG_FILE="/var/log/mysql_backup.log"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 获取所有数据库列表
databases=$(mysql -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASSWORD" -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 备份函数
backup_database() {
local db_name=$1
local backup_file="$BACKUP_DIR/${db_name}_${DATE}.sql.gz"
log "开始备份数据库: $db_name"
# 使用mysqldump备份并压缩
mysqldump -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASSWORD" \
--single-transaction --routines --triggers \
--databases "$db_name" | gzip > "$backup_file"
if [ $? -eq 0 ]; then
log "数据库 $db_name 备份成功: $backup_file"
else
log "数据库 $db_name 备份失败"
fi
}
# 开始备份
log "开始数据库备份任务"
# 备份所有数据库
for db in $databases; do
backup_database $db
done
# 删除过期备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
log "已删除 ${RETENTION_DAYS} 天前的备份文件"
log "备份任务完成"
PostgreSQL 备份脚本
#!/bin/bash
# PostgreSQL数据库自动备份脚本
# 配置参数
PG_HOST="localhost"
PG_PORT="5432"
PG_USER="postgres"
PG_PASSWORD="your_password"
BACKUP_DIR="/backup/postgresql"
RETENTION_DAYS=7
LOG_FILE="/var/log/pg_backup.log"
DATE=$(date +%Y%m%d_%H%M%S)
# 设置环境变量
export PGPASSWORD=$PG_PASSWORD
mkdir -p $BACKUP_DIR
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 获取所有数据库列表
databases=$(psql -h $PG_HOST -U $PG_USER -t -c "SELECT datname FROM pg_database WHERE datistemplate = false AND datname != 'postgres';")
# 备份单个数据库函数
backup_database() {
local db_name=$1
local backup_file="$BACKUP_DIR/${db_name}_${DATE}.dump"
log "开始备份数据库: $db_name"
# 使用pg_dump备份
pg_dump -h $PG_HOST -p $PG_PORT -U $PG_USER \
-F custom -f "$backup_file" "$db_name"
if [ $? -eq 0 ]; then
# 压缩备份文件
gzip "$backup_file"
log "数据库 $db_name 备份成功: $backup_file.gz"
else
log "数据库 $db_name 备份失败"
fi
}
# 开始备份
log "开始PostgreSQL数据库备份任务"
for db in $databases; do
backup_database "$db"
done
# 清理过期备份
find $BACKUP_DIR -name "*.dump.gz" -mtime +$RETENTION_DAYS -delete
log "已清理超过 ${RETENTION_DAYS} 天的备份"
log "备份任务完成"
SQL Server 备份脚本
#!/bin/bash
# SQL Server数据库自动备份脚本
# 配置参数
SQL_HOST="localhost"
SQL_USER="sa"
SQL_PASSWORD="your_password"
BACKUP_DIR="/backup/mssql"
RETENTION_DAYS=7
LOG_FILE="/var/log/mssql_backup.log"
DATE=$(date +%Y%m%d_%H%M%S)
# 检查备份目录
mkdir -p $BACKUP_DIR
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 获取数据库列表(排除系统数据库)
databases=$(sqlcmd -S $SQL_HOST -U $SQL_USER -P $SQL_PASSWORD \
-Q "SELECT name FROM sys.databases WHERE database_id > 4;" -h -1)
# 备份函数
backup_database() {
local db_name=$1
local backup_file="$BACKUP_DIR/${db_name}_${DATE}.bak"
log "开始备份数据库: $db_name"
# 执行备份
sqlcmd -S $SQL_HOST -U $SQL_USER -P $SQL_PASSWORD \
-Q "BACKUP DATABASE [$db_name] TO DISK = N'$backup_file' WITH COMPRESSION;"
if [ $? -eq 0 ]; then
# 压缩备份
gzip "$backup_file"
log "数据库 $db_name 备份成功: $backup_file.gz"
else
log "数据库 $db_name 备份失败"
fi
}
# 开始备份
log "开始SQL Server备份任务"
for db in $databases; do
if [ -n "$db" ]; then
backup_database "$db"
fi
done
# 清理过期备份
find $BACKUP_DIR -name "*.bak.gz" -mtime +$RETENTION_DAYS -delete
log "备份任务完成"
定时备份配置(crontab)
# 每天凌晨2点执行MySQL备份 0 2 * * * /path/to/mysql_backup.sh # 每天凌晨3点执行PostgreSQL备份 0 3 * * * /path/to/pg_backup.sh # 每周日凌晨1点执行SQL Server备份 0 1 * * 0 /path/to/mssql_backup.sh
高级功能增强版
#!/bin/bash
# 增强版备份脚本,支持多数据库和自定义配置
# 配置文件方式
CONFIG_FILE="/etc/backup_config"
source $CONFIG_FILE 2>/dev/null || {
echo "配置文件不存在,使用默认配置"
DB_TYPE=${DB_TYPE:-mysql}
DB_HOST=${DB_HOST:-localhost}
DB_PORT=${DB_PORT:-3306}
DB_USER=${DB_USER:-root}
DB_PASSWORD=${DB_PASSWORD:-}
BACKUP_DIR=${BACKUP_DIR:-/backup/database}
RETENTION_DAYS=${RETENTION_DAYS:-7}
BACKUP_TIME=${BACKUP_TIME:-"02:00"}
}
# 发送通知函数(支持邮件/微信/钉钉)
send_notification() {
local subject=$1
local message=$2
# 邮件通知
if [ -n "$MAIL_TO" ]; then
echo "$message" | mail -s "$subject" "$MAIL_TO"
fi
# 钉钉机器人
if [ -n "$DINGDING_WEBHOOK" ]; then
curl -s -X POST -H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$subject\n$message\"}}" \
"$DINGDING_WEBHOOK"
fi
# 企业微信
if [ -n "$WECHAT_WEBHOOK" ]; then
curl -s -X POST -H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$subject\n$message\"}}" \
"$WECHAT_WEBHOOK"
fi
}
# 备份前检查磁盘空间
check_disk_space() {
local required_space=$((5 * 1024)) # 需要5GB空间
local available_space=$(df -P "$BACKUP_DIR" | awk 'NR==2 {print $4}')
if [ $available_space -lt $required_space ]; then
send_notification "磁盘空间不足" "需要 ${required_space}MB,可用 ${available_space}MB"
exit 1
fi
}
使用说明
- 修改配置:替换脚本中的数据库连接信息
- 添加执行权限:
chmod +x backup_script.sh - 测试运行:手动执行脚本确认无误
- 添加定时任务:使用crontab设置定时执行
- 设置日志轮转:配置logrotate避免日志文件过大
注意事项
- 定期测试备份文件的完整性
- 异地备份建议使用rsync或云存储同步
- 敏感信息建议使用环境变量或加密文件存储
- 备份文件建议定期上传到对象存储(如AWS S3、阿里云OSS)
如果你需要特定数据库的详细备份方案或特殊场景的备份策略,请告诉我具体需求!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播