创建季度调度任务:数据库归档恢复操作邮件提醒及日志记录
实现方案
1. 每3个月触发的调度任务配置
Linux 环境(Crontab)
用crontab配置季度触发任务,表达式直接指定每季度首月凌晨执行:
# 每季度1月、4月、7月、10月的1号凌晨2点触发归档提醒 0 2 1 */3 * /path/to/archive_reminder.sh
编辑crontab生效:
crontab -e
Windows 环境(任务计划程序)
- 创建基本任务,触发器选择「每月」,设置为每3个月的1号,凌晨2点执行;
- 操作选择「启动程序」,指向你的提醒脚本(如
archive_reminder.ps1)。
2. 邮件提醒脚本示例
Shell 脚本(Linux)
#!/bin/bash RECIPIENTS="db-admin@yourcompany.com" SUBJECT="数据库归档流程提醒:需完成备份、磁带迁移及原始库恢复" BODY=" 请按以下流程操作6个目标数据库: 1. 依次执行全量备份 2. 将备份文件迁移至磁带存储 3. **务必执行原始数据库恢复操作**(此步骤常被遗漏,请重点确认) 所有步骤完成后,请更新操作日志至指定表格。 " # 发送邮件(需提前配置sendmail/postfix服务) echo "$BODY" | mail -s "$SUBJECT" $RECIPIENTS
PowerShell 脚本(Windows)
$recipients = "db-admin@yourcompany.com" $subject = "数据库归档流程提醒:需完成备份、磁带迁移及原始库恢复" $body = @" 请按以下流程操作6个目标数据库: 1. 依次执行全量备份 2. 将备份文件迁移至磁带存储 3. **务必执行原始数据库恢复操作**(此步骤常被遗漏,请重点确认) 所有步骤完成后,请更新操作日志至指定表格。 "@ Send-MailMessage -To $recipients -Subject $subject -Body $body -SmtpServer "smtp.yourcompany.com"
3. 操作日志记录到指定表格
日志表格结构(以MySQL为例)
先创建用于记录的日志表:
CREATE TABLE db_archive_logs ( log_id INT AUTO_INCREMENT PRIMARY KEY, db_name VARCHAR(50) NOT NULL, backup_status ENUM('SUCCESS', 'FAILED') NOT NULL, tape_migration_status ENUM('SUCCESS', 'FAILED') NOT NULL, restore_status ENUM('SUCCESS', 'FAILED', 'NOT_EXECUTED') NOT NULL, operator VARCHAR(50) NOT NULL, operation_time DATETIME DEFAULT CURRENT_TIMESTAMP, notes TEXT );
日志记录脚本片段(Shell)
在归档流程脚本中插入日志记录逻辑:
# 示例:完成某数据库的备份、迁移、恢复后记录日志 DB_NAME="target_db_1" BACKUP_STATUS="SUCCESS" TAPE_STATUS="SUCCESS" RESTORE_STATUS="SUCCESS" OPERATOR=$(whoami) # 插入日志到指定数据库 mysql -u log_user -p'log_pwd' -D log_db -e " INSERT INTO db_archive_logs (db_name, backup_status, tape_migration_status, restore_status, operator) VALUES ('$DB_NAME', '$BACKUP_STATUS', '$TAPE_STATUS', '$RESTORE_STATUS', '$OPERATOR'); "
4. 强制校验恢复步骤(避免遗漏)
在归档流程中添加恢复验证逻辑,未通过则触发告警:
# 验证数据库恢复状态的函数 verify_restore() { DB_NAME=$1 # 示例:校验核心表数据行数是否与备份前一致 CHECK_RESULT=$(mysql -u db_user -p'db_pwd' -D $DB_NAME -e "SELECT COUNT(*) FROM critical_table;" | tail -n 1) EXPECTED_COUNT="1000" # 备份前记录的预期行数 if [ "$CHECK_RESULT" -eq "$EXPECTED_COUNT" ]; then echo "$DB_NAME 恢复验证通过" return 0 else echo "$DB_NAME 恢复验证失败" return 1 fi } # 遍历6个数据库执行流程 for db in db1 db2 db3 db4 db5 db6; do # 执行备份、磁带迁移操作... # 执行恢复操作... # 校验恢复结果,失败则发告警邮件并终止流程 if ! verify_restore $db; then echo "$db 恢复未通过校验,请立即处理" | mail -s "数据库归档告警:$db 恢复失败" db-admin@yourcompany.com exit 1 fi # 记录日志... done
内容的提问来源于stack exchange,提问作者mehdi rahmanzadeh
相关产品推荐
相关产品推荐

