首页 > 数据库 >使用shell脚本将doDBA采集到的日志会话信息导入到MySQL数据库

使用shell脚本将doDBA采集到的日志会话信息导入到MySQL数据库

时间:2024-01-16 16:02:26浏览次数:34  
标签:导入到 audit shell log dodba 会话 mysql line doDBA

【背景说明】

使用doDBA工具监控的会话信息导入到MySQL数据库的表中

【环境说明】

doDBA工具采集会话信息(之前有脚本说明)

【脚本说明】

处理dodba日志信息
将日志的innodb日志信息去除
审计日志的名称要改为原来的dodba.log名称
cd /data/backup/doDBA/log/
cp dodba_20231226_0957.log.tar.gz /data/backup/doDBA/analyze
cd /data/backup/doDBA/analyze
tar -zxvf dodba_20231226_0957.log.tar.gz
mv dodba_20231226_0957.log dodba.log

vim analyze_dodba_log.sh
#!/bin/bash
sed '/INNODB MONITOR OUTPUT/,/END OF INNODB MONITOR OUTPUT/d'  dodba.log > dodba_temp.log
sed 's/=====================================//g' dodba_temp.log >dodba_temp1.log
sed 's/============================//g' dodba_temp1.log >dodba_`date +%Y%m%d_%H%S`.log
rm -rf dodba_temp.log
rm -rf dodba_temp1.log
echo "The current file is: dodba_`date +%Y%m%d_%H%S`.log"

执行去除innodb信息的脚本
sh analyze_dodba_log.sh 如果需要按照分钟进行切割 cat dodba_20231226_090500_090510.log|grep 'processlist---------------' 然后根据上面的时间进行切割需要的时间会话信息 sed -n '/26 09:05:00 --/,/26 09:05:10 --/p' dodba_20231226_090500_090510.log > dodba_20231226_090500_090510.log 创建审计用户及数据库: create database dodba_audit default charset utf8; create user dodba_audit@'%' identified by 'xxxxxx'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, TRIGGER ON dodba_audit.* to dodba_audit@'%'; mysql -udodba_audit -p'xxxxxx' CREATE TABLE dodba_audit.`dodba_audit_table` ( `id` int(11) NOT NULL COMMENT '会话id号', `timestamp` datetime DEFAULT NULL COMMENT '会话时间', `user` varchar(50) DEFAULT NULL COMMENT '会话用户名', `host` varchar(50) DEFAULT NULL COMMENT '会话IP信息', `db` varchar(50) DEFAULT NULL COMMENT '会话数据库名', `command` varchar(50) DEFAULT NULL COMMENT '会话命令类型', `time` int(11) DEFAULT NULL COMMENT '会话SQL执行时间,秒单位', `state` varchar(50) DEFAULT NULL COMMENT '会话SQL执行状态', `info` text COMMENT '会话SQL语句详细信息' ) ENGINE=InnoDB COMMENT 'dodba审计信息表'; truncate table dodba_audit.`dodba_audit_table`; 创建审计导入MySQL脚本: cd /data/backup/doDBA/analyze
vim dodba_audit.sh #!/bin/bash logfile="/data/backup/doDBA/analyze/dodba_20231226_090500_090510.log" mysql_host="localhost" mysql_user="dodba_audit" mysql_password="xxxxxx" mysql_database="dodba_audit" mysql_table="dodba_audit_table" while IFS= read -r line do if [[ $line =~ ^[0-9]{4}/[0-9]{2}/[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}\ ----------------processlist---------------$ ]]; then timestamp=$(date -d "${line:0:19}" +"%Y-%m-%d %H:%M:%S") elif [[ $line =~ ^ID:([0-9]+)$ ]]; then id="${BASH_REMATCH[1]}" elif [[ $line =~ ^User:(.+)$ ]]; then user="${BASH_REMATCH[1]}" elif [[ $line =~ ^Host:(.+)$ ]]; then host="${BASH_REMATCH[1]}" elif [[ $line =~ ^DB:(.+)$ ]]; then db="${BASH_REMATCH[1]}" elif [[ $line =~ ^Command:(.+)$ ]]; then command="${BASH_REMATCH[1]}" elif [[ $line =~ ^Time:([0-9]+)$ ]]; then time="${BASH_REMATCH[1]}" elif [[ $line =~ ^State:(.+)$ ]]; then state="${BASH_REMATCH[1]}" elif [[ $line =~ ^Info:(.+)$ ]]; then info="${BASH_REMATCH[1]}" # Insert the log entry into MySQL escaped_info=$(echo "$info" | sed "s/'/''/g") mysql -h $mysql_host -u $mysql_user -p$mysql_password $mysql_database -e "INSERT INTO $mysql_table (timestamp, id, user, host, db, command, time, state, info) VALUES ('$timestamp', '$id', '$user', '$host', '$db', '$command', '$time', '$state', '$escaped_info');" fi done < "$logfile" 执行导入MySQL表中 nohup sh dodba_audit.sh & 数据库查看审计信息 select * from dodba_audit.`dodba_audit_table`;

标签:导入到,audit,shell,log,dodba,会话,mysql,line,doDBA
From: https://www.cnblogs.com/zetanchen/p/17967859

相关文章

  • shell脚本使用 $? 记录返回值
    在shell脚本中,使用$?来获取上一次命令执行时的返回状态。实际使用中需要注意$?可能会被清零或覆盖,最好先使用中间变量存起来,以后使用该中间变量;请看如下几种案例的$?值的变化:1)shellA文件调用 shellB文件  shellB文件:①若有$?=2......
  • 使用shell脚本xtrabackup自动恢复MySQL数据库
    【背景说明】按照安全的一些要求,需要定期对数据库进行恢复演练操作【环境说明】MySQL5.7的xtrabackup全库xbstream的加密备份(如果不是流备份跟加密,去掉相关参数)【脚本说明】v_backupdir="/mysqlbackup/recovery/yiyuan"备份文件的目录路径v_dir="/mysqlbackup/recovery/......
  • shell脚本检测mysql服务状态
    shell脚本检测mysql状态:通过多种方案实现方法一:netstat命令 方法二:ss命令 方法三:使用lsof监控端口 执行结果: ......
  • (2)Powershell开发工具
    (2)Powershell开发工具在上一节对Powershell进行了简单介绍,详细内容参考Powershell简介,这一节介绍Powershell的开发工具及其设置注意事项。本文包含以下知识点如何启动WindowsPowershell命令行开发工具WindowsPowershell命令行的简单设置如何启动WindowsPowershel......
  • (1)Powershell简介
    (1)Powershell简介本文会包含以下三个知识点什么是Powershell?学习Powershell有什么好处?学习Powershell需要哪些条件?什么是Powershell?Powershell(WindowsPowershell)是Microsoft为Windows设计的新的命令行程序,这个Windows内置的命令行shell包括交互式提示和脚本环......
  • 利用PowerShell修改网络配置
    title:利用PowerShell修改网络配置date:2022-03-30categories:编程tags:-PowerShell-网络-Windows前言修改IP、网关、子网掩码、DNS等配置时需要打开网络配置器配置,有些麻烦。尤其是经常需要重复性操作时(例如去学校图书馆蹭网)。用PowerShell脚本自动修改,方便简单而......
  • 第六天:bash shell的配置文件
    一、按生效范围划分两类 1、全局配置:针对所有用户皆有效/etc/profile/etc/profile.d/*.sh/etc/bashrc2、个人配置:只针对特定用户有效 ~/.bash_profile~/.bashrc二、shell登录两种方式分类 1、交互式登录直接通过终端输入账号密......
  • 第六天:shell算术、逻辑运算及测试命令
    一、算术运算  SHELL允许在某些情况下对算术表达式进行求值;  bash 只支持整数,不支持小数1、实现算术运算 2、内建的随机数生成器变量$RANDOM  取值范围:0-327673、增强型赋值:letvarOPERvalue 二、逻辑运算 与:&或:|非:!......
  • Bash shell中四种算术运算方式的区别与联系简介
    在bashshell中,整数的运算也会偶尔遇到。为了彻底弄清其中的奥秘,我们通过实例验证的方式来探索一下常见的四种运算中的区别与联系。实例验证之前,我们来定义一组变量,并对其赋值:[root@GeekDevOps~]#a=9;b=13;c=-1;d=+4;e=7.2[root@GeekDevOps~]#echo$a$b$c$d$e913-1+4......
  • Bash shell中bash、sh、source及“.”点等五种执行方式的区别与联系
    在众多Linux发行版中bashshell可谓是随处可见。作为众多发行版的首选shell,对于bashshell的学习对我们来说,显得格外重要。在学习bashshell的过程中,bash、sh、source及英文输入状态下的点号经常交替出现,他们看起来作用都差不多,但是深究下去,他们也有着不小的区别与联系。下面就让......