本文档介绍达梦数据库自动化运维脚本开发,包括自动化运维概述、自动化运维脚本原理、自动化运维脚本设计、自动化运维脚本配置、自动化运维脚本部署、自动化运维脚本测试、自动化运维脚本实战案例、自动化运维脚本故障处理实战案例等内容,适合进行达梦数据库自动化运维脚本开发的技术人员参考。
Part01-基础概念与理论知识
1.1 自动化运维概述
自动化运维定义:
- 定义:自动化运维是指通过脚本和工具自动执行运维任务
- 目的:提高运维效率,减少人工操作,降低错误率
- 作用:任务自动化、监控自动化、告警自动化、备份自动化
- 意义:确保数据库稳定运行,提高运维效率和质量
自动化运维类型:
- 日常运维:日常巡检、日志收集、性能监控
- 备份恢复:自动备份、自动恢复、备份验证
- 故障处理:自动检测、自动告警、自动恢复
- 性能优化:自动分析、自动调优、自动报告
风哥提示:自动化运维是提高运维效率的重要手段,。
1.2 自动化运维脚本原理
脚本原理:
- 脚本语言:使用Shell、Python等脚本语言
- 数据库接口:通过DISQL、JDBC等接口操作数据库
- 任务调度:通过Cron、Systemd等工具调度任务
- 日志记录:记录脚本执行日志,便于排查问题
脚本类型:
- 巡检脚本:定期检查数据库状态
- 监控脚本:实时监控数据库性能
- 备份脚本:自动执行数据库备份
- 恢复脚本:自动执行数据库恢复
,自动化运维脚本通过多种机制实现运维自动化。
Part02-生产环境规划与建议
2.1 自动化运维脚本设计
脚本设计原则:
- 模块化设计:将脚本分成多个模块,便于维护
- 可配置性:使用配置文件,便于修改参数
- 错误处理:完善的错误处理机制,避免脚本中断
- 日志记录:详细的日志记录,便于排查问题
脚本功能设计:
- 日常巡检:检查数据库状态、性能指标、空间使用
- 性能监控:监控连接数、事务数、锁等待、慢查询
- 备份恢复:自动备份、自动恢复、备份验证
- 故障处理:自动检测、自动告警、自动恢复
风哥提示:
,根据业务需求设计合适的自动化运维脚本。
2.2 自动化运维脚本配置
脚本配置:
- 环境配置:配置数据库连接信息、脚本路径、日志路径
- 参数配置:配置脚本执行参数、阈值参数、通知参数
- 调度配置:配置脚本执行时间、执行频率
- 告警配置:配置告警规则、通知方式
脚本管理:
- 版本管理:使用Git等工具管理脚本版本
- 权限管理:设置脚本执行权限,确保安全
- 监控管理:监控脚本执行状态,及时发现异常
- 日志管理:定期清理日志,避免日志过大
,合理配置和管理自动化运维脚本保障运维效率。
Part03-生产环境项目实施方案
3.1 自动化运维脚本部署
部署步骤:
- 步骤1:开发自动化运维脚本
- 步骤2:配置脚本参数和环境
- 步骤3:配置任务调度
- 步骤4:测试脚本功能
- 步骤5:部署到生产环境
学习交流加群风哥微信: itpux-com
开发日常巡检脚本:
#!/bin/bash
# dm_daily_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DM_HOME=/dm/app
DISQL=$DM_HOME/bin/disql
USER=SYSDBA
PASS=SYSDBA
HOST=192.168.1.101
PORT=5236
LOG_DIR=/dm/app/log
LOG_FILE=$LOG_DIR/dm_daily_check_$(date +%Y%m%d).log
# 创建日志目录
mkdir -p $LOG_DIR
# 记录日志
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_FILE
}
# 检查数据库状态
check_database_status() {
log “开始检查数据库状态”
STATUS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT STATUS FROM V\$INSTANCE” | tail -1)
if [ “$STATUS” = “OPEN” ]; then
log “数据库状态正常:OPEN”
else
log “数据库状态异常:$STATUS”
fi
}
# 检查表空间使用率
check_tablespace_usage() {
log “开始检查表空间使用率”
$DISQL $USER/$PASS@$HOST:$PORT -s “SELECT TABLESPACE_NAME, ROUND(USED_SIZE/TOTAL_SIZE*100,2) AS USAGE_PERCENT FROM V\$TABLESPACE” >> $LOG_FILE
}
# 检查连接数 学习交流加群风哥QQ113257174
check_sessions() {
log “开始检查连接数”
SESSIONS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$SESSIONS” | tail -1)
log “当前连接数:$SESSIONS”
if [ $SESSIONS -gt 100 ]; then
log “警告:连接数超过100”
fi
}
# 检查锁等待
check_locks() {
log “开始检查锁等待”
LOCKS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$LOCKS WHERE BLOCKED=1” | tail -1)
log “当前锁等待:$LOCKS”
if [ $LOCKS -gt 10 ]; then
log “警告:锁等待超过10”
fi
}
# 检查慢查询
check_slowquery() {
log “开始检查慢查询”
SLOWQUERY=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$SQLSTAT WHERE EXEC_TIME > 1000” | tail -1)
log “当前慢查询:$SLOWQUERY”
if [ $SLOWQUERY -gt 10 ]; then
log “警告:慢查询超过10”
fi
}
# 主函数
main() {
log “==========================================”
log “开始执行日常巡检”
log “==========================================”
check_database_status
check_tablespace_usage
check_sessions
check_locks
check_slowquery
log “==========================================”
log “日常巡检完成”
log “==========================================”
} 更多视频教程www.fgedu.net.cn
# 执行主函数
main
# dm_daily_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DM_HOME=/dm/app
DISQL=$DM_HOME/bin/disql
USER=SYSDBA
PASS=SYSDBA
HOST=192.168.1.101
PORT=5236
LOG_DIR=/dm/app/log
LOG_FILE=$LOG_DIR/dm_daily_check_$(date +%Y%m%d).log
# 创建日志目录
mkdir -p $LOG_DIR
# 记录日志
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_FILE
}
# 检查数据库状态
check_database_status() {
log “开始检查数据库状态”
STATUS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT STATUS FROM V\$INSTANCE” | tail -1)
if [ “$STATUS” = “OPEN” ]; then
log “数据库状态正常:OPEN”
else
log “数据库状态异常:$STATUS”
fi
}
# 检查表空间使用率
check_tablespace_usage() {
log “开始检查表空间使用率”
$DISQL $USER/$PASS@$HOST:$PORT -s “SELECT TABLESPACE_NAME, ROUND(USED_SIZE/TOTAL_SIZE*100,2) AS USAGE_PERCENT FROM V\$TABLESPACE” >> $LOG_FILE
}
# 检查连接数 学习交流加群风哥QQ113257174
check_sessions() {
log “开始检查连接数”
SESSIONS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$SESSIONS” | tail -1)
log “当前连接数:$SESSIONS”
if [ $SESSIONS -gt 100 ]; then
log “警告:连接数超过100”
fi
}
# 检查锁等待
check_locks() {
log “开始检查锁等待”
LOCKS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$LOCKS WHERE BLOCKED=1” | tail -1)
log “当前锁等待:$LOCKS”
if [ $LOCKS -gt 10 ]; then
log “警告:锁等待超过10”
fi
}
# 检查慢查询
check_slowquery() {
log “开始检查慢查询”
SLOWQUERY=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$SQLSTAT WHERE EXEC_TIME > 1000” | tail -1)
log “当前慢查询:$SLOWQUERY”
if [ $SLOWQUERY -gt 10 ]; then
log “警告:慢查询超过10”
fi
}
# 主函数
main() {
log “==========================================”
log “开始执行日常巡检”
log “==========================================”
check_database_status
check_tablespace_usage
check_sessions
check_locks
check_slowquery
log “==========================================”
log “日常巡检完成”
log “==========================================”
} 更多视频教程www.fgedu.net.cn
# 执行主函数
main
开发备份脚本:
#!/bin/bash
# dm_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DM_HOME=/dm/app
DMSERVICE=$DM_HOME/bin/DmServicefgedudb
DISQL=$DM_HOME/bin/disql
USER=SYSDBA
PASS=SYSDBA
HOST=192.168.1.101
PORT=5236
BACKUP_DIR=/dm/app/backup
LOG_DIR=/dm/app/log
LOG_FILE=$LOG_DIR/dm_backup_$(date +%Y%m%d).log
# 创建备份目录
mkdir -p $BACKUP_DIR
mkdir -p $LOG_DIR
# 记录日志
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_FILE
}
# 全量备份
full_backup() {
log “开始执行全量备份”
BACKUP_NAME=full_backup_$(date +%Y%m%d_%H%M%S)
$DMSERVICE backup full to $BACKUP_DIR/$BACKUP_NAME
if [ $? -eq 0 ]; then
log “全量备份成功:$BACKUP_NAME”
else
log “全量备份失败:$BACKUP_NAME”
fi
}
# 增量备份
incremental_backup() {
log “开始执行增量备份” 更多学习教程公众号风哥教程itpux_com
BACKUP_NAME=incremental_backup_$(date +%Y%m%d_%H%M%S)
$DMSERVICE backup increment to $BACKUP_DIR/$BACKUP_NAME
if [ $? -eq 0 ]; then
log “增量备份成功:$BACKUP_NAME”
else
log “增量备份失败:$BACKUP_NAME”
fi
}
# 清理旧备份
cleanup_old_backup() {
log “开始清理旧备份”
find $BACKUP_DIR -name “full_backup_*” -mtime +7 -exec rm -rf {} \;
find $BACKUP_DIR -name “incremental_backup_*” -mtime +3 -exec rm -rf {} \;
log “旧备份清理完成”
}
# 主函数
main() {
log “==========================================”
log “开始执行备份”
log “==========================================”
case $1 in
full)
full_backup
;;
incremental)
incremental_backup
;;
*)
full_backup
;; from DB视频:www.itpux.com
esac
cleanup_old_backup
log “==========================================”
log “备份完成”
log “==========================================”
}
# 执行主函数
main $1
# dm_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DM_HOME=/dm/app
DMSERVICE=$DM_HOME/bin/DmServicefgedudb
DISQL=$DM_HOME/bin/disql
USER=SYSDBA
PASS=SYSDBA
HOST=192.168.1.101
PORT=5236
BACKUP_DIR=/dm/app/backup
LOG_DIR=/dm/app/log
LOG_FILE=$LOG_DIR/dm_backup_$(date +%Y%m%d).log
# 创建备份目录
mkdir -p $BACKUP_DIR
mkdir -p $LOG_DIR
# 记录日志
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_FILE
}
# 全量备份
full_backup() {
log “开始执行全量备份”
BACKUP_NAME=full_backup_$(date +%Y%m%d_%H%M%S)
$DMSERVICE backup full to $BACKUP_DIR/$BACKUP_NAME
if [ $? -eq 0 ]; then
log “全量备份成功:$BACKUP_NAME”
else
log “全量备份失败:$BACKUP_NAME”
fi
}
# 增量备份
incremental_backup() {
log “开始执行增量备份” 更多学习教程公众号风哥教程itpux_com
BACKUP_NAME=incremental_backup_$(date +%Y%m%d_%H%M%S)
$DMSERVICE backup increment to $BACKUP_DIR/$BACKUP_NAME
if [ $? -eq 0 ]; then
log “增量备份成功:$BACKUP_NAME”
else
log “增量备份失败:$BACKUP_NAME”
fi
}
# 清理旧备份
cleanup_old_backup() {
log “开始清理旧备份”
find $BACKUP_DIR -name “full_backup_*” -mtime +7 -exec rm -rf {} \;
find $BACKUP_DIR -name “incremental_backup_*” -mtime +3 -exec rm -rf {} \;
log “旧备份清理完成”
}
# 主函数
main() {
log “==========================================”
log “开始执行备份”
log “==========================================”
case $1 in
full)
full_backup
;;
incremental)
incremental_backup
;;
*)
full_backup
;; from DB视频:www.itpux.com
esac
cleanup_old_backup
log “==========================================”
log “备份完成”
log “==========================================”
}
# 执行主函数
main $1
配置任务调度:
— 配置日常巡检任务
[root@fgedu ~]# crontab -e
0 8 * * * /usr/local/bin/dm_daily_check.sh
— 配置备份任务
[root@fgedu ~]# crontab -e
0 2 * * 0 /usr/local/bin/dm_backup.sh full
0 2 * * 1-6 /usr/local/bin/dm_backup.sh incremental
— 查看任务列表
[root@fgedu ~]# crontab -l
0 8 * * * /usr/local/bin/dm_daily_check.sh
0 2 * * 0 /usr/local/bin/dm_backup.sh full
0 2 * * 1-6 /usr/local/bin/dm_backup.sh incremental
[root@fgedu ~]# crontab -e
0 8 * * * /usr/local/bin/dm_daily_check.sh
— 配置备份任务
[root@fgedu ~]# crontab -e
0 2 * * 0 /usr/local/bin/dm_backup.sh full
0 2 * * 1-6 /usr/local/bin/dm_backup.sh incremental
— 查看任务列表
[root@fgedu ~]# crontab -l
0 8 * * * /usr/local/bin/dm_daily_check.sh
0 2 * * 0 /usr/local/bin/dm_backup.sh full
0 2 * * 1-6 /usr/local/bin/dm_backup.sh incremental
,开发自动化运维脚本,配置任务调度实现运维自动化。
3.2 自动化运维脚本测试
测试步骤:
- 步骤1:测试脚本语法
- 步骤2:测试脚本功能
- 步骤3:测试脚本性能
- 步骤4:测试脚本异常处理
测试日常巡检脚本:
— 测试脚本语法
[root@fgedu ~]# bash -n /usr/local/bin/dm_daily_check.sh
— 执行脚本
[root@fgedu ~]# /usr/local/bin/dm_daily_check.sh
— 查看日志
[root@fgedu ~]# tail -f /dm/app/log/dm_daily_check_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 08:00:00] ==========================================
[2026-04-09 08:00:00] 开始执行日常巡检
[2026-04-09 08:00:00] ==========================================
[2026-04-09 08:00:01] 开始检查数据库状态
[2026-04-09 08:00:01] 数据库状态正常:OPEN
[2026-04-09 08:00:02] 开始检查表空间使用率
[2026-04-09 08:00:03] 开始检查连接数
[2026-04-09 08:00:03] 当前连接数:50
[2026-04-09 08:00:04] 开始检查锁等待
[2026-04-09 08:00:04] 当前锁等待:0
[2026-04-09 08:00:05] 开始检查慢查询
[2026-04-09 08:00:05] 当前慢查询:0
[2026-04-09 08:00:06] ==========================================
[2026-04-09 08:00:06] 日常巡检完成
[2026-04-09 08:00:06] ==========================================
[root@fgedu ~]# bash -n /usr/local/bin/dm_daily_check.sh
— 执行脚本
[root@fgedu ~]# /usr/local/bin/dm_daily_check.sh
— 查看日志
[root@fgedu ~]# tail -f /dm/app/log/dm_daily_check_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 08:00:00] ==========================================
[2026-04-09 08:00:00] 开始执行日常巡检
[2026-04-09 08:00:00] ==========================================
[2026-04-09 08:00:01] 开始检查数据库状态
[2026-04-09 08:00:01] 数据库状态正常:OPEN
[2026-04-09 08:00:02] 开始检查表空间使用率
[2026-04-09 08:00:03] 开始检查连接数
[2026-04-09 08:00:03] 当前连接数:50
[2026-04-09 08:00:04] 开始检查锁等待
[2026-04-09 08:00:04] 当前锁等待:0
[2026-04-09 08:00:05] 开始检查慢查询
[2026-04-09 08:00:05] 当前慢查询:0
[2026-04-09 08:00:06] ==========================================
[2026-04-09 08:00:06] 日常巡检完成
[2026-04-09 08:00:06] ==========================================
测试备份脚本:
— 测试全量备份
[root@fgedu ~]# /usr/local/bin/dm_backup.sh full
— 查看日志
[root@fgedu ~]# tail -f /dm/app/log/dm_backup_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 02:00:00] ==========================================
[2026-04-09 02:00:00] 开始执行备份
[2026-04-09 02:00:00] ==========================================
[2026-04-09 02:00:01] 开始执行全量备份
[2026-04-09 02:30:00] 全量备份成功:full_backup_20260409_020000
[2026-04-09 02:30:01] 开始清理旧备份
[2026-04-09 02:30:02] 旧备份清理完成
[2026-04-09 02:30:03] ==========================================
[2026-04-09 02:30:03] 备份完成
[2026-04-09 02:30:03] ==========================================
— 查看备份文件
[root@fgedu ~]# ls -lh /dm/app/backup/
total 50G
-rw-r–r– 1 dmdba dinstall 50G Apr 9 02:30 full_backup_20260409_020000
[root@fgedu ~]# /usr/local/bin/dm_backup.sh full
— 查看日志
[root@fgedu ~]# tail -f /dm/app/log/dm_backup_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 02:00:00] ==========================================
[2026-04-09 02:00:00] 开始执行备份
[2026-04-09 02:00:00] ==========================================
[2026-04-09 02:00:01] 开始执行全量备份
[2026-04-09 02:30:00] 全量备份成功:full_backup_20260409_020000
[2026-04-09 02:30:01] 开始清理旧备份
[2026-04-09 02:30:02] 旧备份清理完成
[2026-04-09 02:30:03] ==========================================
[2026-04-09 02:30:03] 备份完成
[2026-04-09 02:30:03] ==========================================
— 查看备份文件
[root@fgedu ~]# ls -lh /dm/app/backup/
total 50G
-rw-r–r– 1 dmdba dinstall 50G Apr 9 02:30 full_backup_20260409_020000
风哥提示:定期测试自动化运维脚本,确保脚本功能正常,。
Part04-生产案例与实战讲解
4.1 自动化运维脚本实战案例
案例背景:
- 业务场景:某银行核心交易系统
- 数据量:500GB
- 并发量:10000 TPS
- 运维要求:自动化运维,减少人工干预
实施方案:
- 脚本架构:日常巡检脚本、备份脚本、监控脚本、告警脚本
- 调度策略:定时执行,实时监控
- 告警策略:异常告警,及时通知
- 日志策略:详细记录,便于排查
开发监控脚本:
#!/bin/bash
# dm_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DM_HOME=/dm/app
DISQL=$DM_HOME/bin/disql
USER=SYSDBA
PASS=SYSDBA
HOST=192.168.1.101
PORT=5236
LOG_DIR=/dm/app/log
LOG_FILE=$LOG_DIR/dm_monitor_$(date +%Y%m%d).log
ALERT_FILE=$LOG_DIR/dm_monitor_alert.log
# 创建日志目录
mkdir -p $LOG_DIR
# 记录日志
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_FILE
}
# 记录告警
alert() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $ALERT_FILE
# 发送邮件告警
echo “$1” | mail -s “DM数据库告警” admin@fgedu.net.cn
}
# 监控连接数
monitor_sessions() {
SESSIONS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$SESSIONS” | tail -1)
log “当前连接数:$SESSIONS”
if [ $SESSIONS -gt 100 ]; then
alert “警告:连接数超过100,当前值:$SESSIONS”
fi
}
# 监控锁等待
monitor_locks() {
LOCKS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$LOCKS WHERE BLOCKED=1” | tail -1)
log “当前锁等待:$LOCKS”
if [ $LOCKS -gt 10 ]; then
alert “警告:锁等待超过10,当前值:$LOCKS”
fi
}
# 监控慢查询
monitor_slowquery() {
SLOWQUERY=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$SQLSTAT WHERE EXEC_TIME > 1000” | tail -1)
log “当前慢查询:$SLOWQUERY”
if [ $SLOWQUERY -gt 10 ]; then
alert “警告:慢查询超过10,当前值:$SLOWQUERY”
fi
}
# 主函数
main() {
monitor_sessions
monitor_locks
monitor_slowquery
}
# 执行主函数
main
# dm_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DM_HOME=/dm/app
DISQL=$DM_HOME/bin/disql
USER=SYSDBA
PASS=SYSDBA
HOST=192.168.1.101
PORT=5236
LOG_DIR=/dm/app/log
LOG_FILE=$LOG_DIR/dm_monitor_$(date +%Y%m%d).log
ALERT_FILE=$LOG_DIR/dm_monitor_alert.log
# 创建日志目录
mkdir -p $LOG_DIR
# 记录日志
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_FILE
}
# 记录告警
alert() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $ALERT_FILE
# 发送邮件告警
echo “$1” | mail -s “DM数据库告警” admin@fgedu.net.cn
}
# 监控连接数
monitor_sessions() {
SESSIONS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$SESSIONS” | tail -1)
log “当前连接数:$SESSIONS”
if [ $SESSIONS -gt 100 ]; then
alert “警告:连接数超过100,当前值:$SESSIONS”
fi
}
# 监控锁等待
monitor_locks() {
LOCKS=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$LOCKS WHERE BLOCKED=1” | tail -1)
log “当前锁等待:$LOCKS”
if [ $LOCKS -gt 10 ]; then
alert “警告:锁等待超过10,当前值:$LOCKS”
fi
}
# 监控慢查询
monitor_slowquery() {
SLOWQUERY=$($DISQL $USER/$PASS@$HOST:$PORT -s “SELECT COUNT(*) FROM V\$SQLSTAT WHERE EXEC_TIME > 1000” | tail -1)
log “当前慢查询:$SLOWQUERY”
if [ $SLOWQUERY -gt 10 ]; then
alert “警告:慢查询超过10,当前值:$SLOWQUERY”
fi
}
# 主函数
main() {
monitor_sessions
monitor_locks
monitor_slowquery
}
# 执行主函数
main
配置实时监控:
— 配置监控任务
[root@fgedu ~]# crontab -e
*/1 * * * * /usr/local/bin/dm_monitor.sh
— 查看任务列表
[root@fgedu ~]# crontab -l
*/1 * * * * /usr/local/bin/dm_monitor.sh
— 查看监控日志
[root@fgedu ~]# tail -f /dm/app/log/dm_monitor_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 10:00:00] 当前连接数:50
[2026-04-09 10:00:01] 当前锁等待:0
[2026-04-09 10:00:02] 当前慢查询:0
[2026-04-09 10:01:00] 当前连接数:55
[2026-04-09 10:01:01] 当前锁等待:0
[2026-04-09 10:01:02] 当前慢查询:0
[root@fgedu ~]# crontab -e
*/1 * * * * /usr/local/bin/dm_monitor.sh
— 查看任务列表
[root@fgedu ~]# crontab -l
*/1 * * * * /usr/local/bin/dm_monitor.sh
— 查看监控日志
[root@fgedu ~]# tail -f /dm/app/log/dm_monitor_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 10:00:00] 当前连接数:50
[2026-04-09 10:00:01] 当前锁等待:0
[2026-04-09 10:00:02] 当前慢查询:0
[2026-04-09 10:01:00] 当前连接数:55
[2026-04-09 10:01:01] 当前锁等待:0
[2026-04-09 10:01:02] 当前慢查询:0
查看告警信息:
— 查看告警日志
[root@fgedu ~]# tail -f /dm/app/log/dm_monitor_alert.log
— 日志输出
[2026-04-09 10:05:00] 警告:连接数超过100,当前值:105
[2026-04-09 10:05:00] 警告:锁等待超过10,当前值:15
[2026-04-09 10:05:00] 警告:慢查询超过10,当前值:20
— 查看邮件告警
— 查看收到的邮件
[root@fgedu ~]# tail -f /dm/app/log/dm_monitor_alert.log
— 日志输出
[2026-04-09 10:05:00] 警告:连接数超过100,当前值:105
[2026-04-09 10:05:00] 警告:锁等待超过10,当前值:15
[2026-04-09 10:05:00] 警告:慢查询超过10,当前值:20
— 查看邮件告警
— 查看收到的邮件
,自动化运维脚本确保运维效率和质量。
4.2 自动化运维脚本故障处理实战案例
故障场景:
- 故障类型:脚本执行失败
- 故障现象:日常巡检脚本执行失败,无日志输出
- 故障影响:无法执行日常巡检,无法及时发现异常
- 故障原因:数据库连接失败,脚本权限不足
处理步骤:
- 步骤1:检查脚本执行权限
- 步骤2:检查数据库连接
- 步骤3:检查脚本日志
- 步骤4:修复脚本问题
检查脚本执行权限:
— 检查脚本权限
[root@fgedu ~]# ls -l /usr/local/bin/dm_daily_check.sh
— 权限输出
-rw-r–r– 1 root root 2048 Apr 9 10:00:00 /usr/local/bin/dm_daily_check.sh
— 设置执行权限
[root@fgedu ~]# chmod +x /usr/local/bin/dm_daily_check.sh
— 查看权限
[root@fgedu ~]# ls -l /usr/local/bin/dm_daily_check.sh
— 权限输出
-rwxr-xr-x 1 root root 2048 Apr 9 10:00:00 /usr/local/bin/dm_daily_check.sh
[root@fgedu ~]# ls -l /usr/local/bin/dm_daily_check.sh
— 权限输出
-rw-r–r– 1 root root 2048 Apr 9 10:00:00 /usr/local/bin/dm_daily_check.sh
— 设置执行权限
[root@fgedu ~]# chmod +x /usr/local/bin/dm_daily_check.sh
— 查看权限
[root@fgedu ~]# ls -l /usr/local/bin/dm_daily_check.sh
— 权限输出
-rwxr-xr-x 1 root root 2048 Apr 9 10:00:00 /usr/local/bin/dm_daily_check.sh
检查数据库连接:
— 测试数据库连接
[dm@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.101:5236
— 连接成功
Server[LOCALHOST:5236]:mode is normal, state is open
login used time : 2.724(ms)
disql V8
SQL>
— 测试查询
SQL> SELECT STATUS FROM V$INSTANCE;
— 查询结果
LINEID STATUS
———- ——-
1 OPEN
[dm@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.101:5236
— 连接成功
Server[LOCALHOST:5236]:mode is normal, state is open
login used time : 2.724(ms)
disql V8
SQL>
— 测试查询
SQL> SELECT STATUS FROM V$INSTANCE;
— 查询结果
LINEID STATUS
———- ——-
1 OPEN
检查脚本日志:
— 查看脚本日志
[root@fgedu ~]# tail -f /dm/app/log/dm_daily_check_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 10:00:00] ==========================================
[2026-04-09 10:00:00] 开始执行日常巡检
[2026-04-09 10:00:00] ==========================================
[2026-04-09 10:00:01] 开始检查数据库状态
[2026-04-09 10:00:01] 数据库状态正常:OPEN
[2026-04-09 10:00:02] 开始检查表空间使用率
[2026-04-09 10:00:03] 开始检查连接数
[2026-04-09 10:00:03] 当前连接数:50
[2026-04-09 10:00:04] 开始检查锁等待
[2026-04-09 10:00:04] 当前锁等待:0
[2026-04-09 10:00:05] 开始检查慢查询
[2026-04-09 10:00:05] 当前慢查询:0
[2026-04-09 10:00:06] ==========================================
[2026-04-09 10:00:06] 日常巡检完成
[2026-04-09 10:00:06] ==========================================
[root@fgedu ~]# tail -f /dm/app/log/dm_daily_check_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 10:00:00] ==========================================
[2026-04-09 10:00:00] 开始执行日常巡检
[2026-04-09 10:00:00] ==========================================
[2026-04-09 10:00:01] 开始检查数据库状态
[2026-04-09 10:00:01] 数据库状态正常:OPEN
[2026-04-09 10:00:02] 开始检查表空间使用率
[2026-04-09 10:00:03] 开始检查连接数
[2026-04-09 10:00:03] 当前连接数:50
[2026-04-09 10:00:04] 开始检查锁等待
[2026-04-09 10:00:04] 当前锁等待:0
[2026-04-09 10:00:05] 开始检查慢查询
[2026-04-09 10:00:05] 当前慢查询:0
[2026-04-09 10:00:06] ==========================================
[2026-04-09 10:00:06] 日常巡检完成
[2026-04-09 10:00:06] ==========================================
修复脚本问题:
— 手动执行脚本
[root@fgedu ~]# /usr/local/bin/dm_daily_check.sh
— 查看执行结果
— 脚本执行成功
— 查看日志
[root@fgedu ~]# tail -f /dm/app/log/dm_daily_check_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 10:10:00] ==========================================
[2026-04-09 10:10:00] 开始执行日常巡检
[2026-04-09 10:10:00] ==========================================
[2026-04-09 10:10:01] 开始检查数据库状态
[2026-04-09 10:10:01] 数据库状态正常:OPEN
[2026-04-09 10:10:02] 开始检查表空间使用率
[2026-04-09 10:10:03] 开始检查连接数
[2026-04-09 10:10:03] 当前连接数:50
[2026-04-09 10:10:04] 开始检查锁等待
[2026-04-09 10:10:04] 当前锁等待:0
[2026-04-09 10:10:05] 开始检查慢查询
[2026-04-09 10:10:05] 当前慢查询:0
[2026-04-09 10:10:06] ==========================================
[2026-04-09 10:10:06] 日常巡检完成
[2026-04-09 10:10:06] ==========================================
[root@fgedu ~]# /usr/local/bin/dm_daily_check.sh
— 查看执行结果
— 脚本执行成功
— 查看日志
[root@fgedu ~]# tail -f /dm/app/log/dm_daily_check_
$(date +%Y%m%d).log
— 日志输出
[2026-04-09 10:10:00] ==========================================
[2026-04-09 10:10:00] 开始执行日常巡检
[2026-04-09 10:10:00] ==========================================
[2026-04-09 10:10:01] 开始检查数据库状态
[2026-04-09 10:10:01] 数据库状态正常:OPEN
[2026-04-09 10:10:02] 开始检查表空间使用率
[2026-04-09 10:10:03] 开始检查连接数
[2026-04-09 10:10:03] 当前连接数:50
[2026-04-09 10:10:04] 开始检查锁等待
[2026-04-09 10:10:04] 当前锁等待:0
[2026-04-09 10:10:05] 开始检查慢查询
[2026-04-09 10:10:05] 当前慢查询:0
[2026-04-09 10:10:06] ==========================================
[2026-04-09 10:10:06] 日常巡检完成
[2026-04-09 10:10:06] ==========================================
,脚本执行失败时及时修复,恢复运维功能。
Part05-风哥经验总结与分享
5.1 最佳实践
脚本开发建议:
- 模块化设计:将脚本分成多个模块,便于维护
- 可配置性:使用配置文件,便于修改参数
- 错误处理:完善的错误处理机制,避免脚本中断
- 日志记录:详细的日志记录,便于排查问题
- 版本管理:使用Git等工具管理脚本版本
脚本管理建议:
- 权限管理:设置脚本执行权限,确保安全
- 监控管理:监控脚本执行状态,及时发现异常
- 日志管理:定期清理日志,避免日志过大
- 定期测试:定期测试脚本功能,确保正常运行
- 持续优化:根据使用经验持续优化脚本
,合理开发和管理自动化运维脚本保障运维效率。
5.2 面试技巧
常见面试问题:
- 什么是自动化运维?自动化运维是指通过脚本和工具自动执行运维任务
- 自动化运维脚本有哪些类型?日常巡检脚本、监控脚本、备份脚本、恢复脚本
- 如何开发自动化运维脚本?使用Shell、Python等脚本语言,通过DISQL、JDBC等接口操作数据库
- 如何配置任务调度?通过Cron、Systemd等工具配置任务调度
- 如何处理脚本故障?检查脚本权限、数据库连接、脚本日志等
面试回答技巧:
- 理论结合实践:先回答理论知识,再结合实际项目经验
- 举例说明:用具体的案例说明如何开发自动化运维脚本
- 突出重点:重点强调脚本设计和配置方法
- 展示经验:分享实际项目中遇到的脚本问题和解决方案
- 技术深度:展示对自动化运维脚本的深入理解和技术细节
,掌握自动化运维脚本开发,轻松应对面试。
本文总结:
- 自动化运维是提高运维效率的重要手段
- 通过脚本和工具自动执行运维任务
- 配置任务调度实现定时执行
- 定期测试脚本功能,确保正常运行
- 优化脚本配置,提高运维效率
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
