MySQL常用脚本_审计检查

#!/bin/bash

# --- 配置 ---
# 默认数据库名,如果需要也可以作为参数传入
DB_NAME="dbtest01"
# MySQL 客户端命令,根据你的实际情况修改,如果用密码登录,也在这里改
MYSQL_CMD="mysql --login-path=dba"
# ----------------

# 检查是否传入了 IP 地址和端口
if [ -z "$1" ] || [ -z "$2" ]; then
  echo "用法: $0 <IP地址> <端口>"
  echo "例如: $0 10.10.0.0.1 3306"
  exit 1
fi

TARGET_IP="$1"
TARGET_PORT="$2"

# 根据 IP 和端口动态生成日志文件名
LOG_FILE="output_${TARGET_IP}_${TARGET_PORT}.log"

# 初始化日志文件
echo "当前时间是: $(date)" > "$LOG_FILE"
echo "执行实例:${TARGET_IP}:${TARGET_PORT}" >> "$LOG_FILE"
echo "" >> "$LOG_FILE" # 添加一个空行,使格式更美观

# 定义执行 SQL 并记录日志的函数
# 参数1: SQL 查询语句
execute_sql_and_log() {
  local sql_query="$1"

  echo "" >> "$LOG_FILE"
  echo "" >> "$LOG_FILE"
  echo "执行SQL:" >> "$LOG_FILE"
  echo "$sql_query" >> "$LOG_FILE"
  echo "-------------------------------------------------------------------------------------" >> "$LOG_FILE"
  
  # 执行 mysql 命令并将输出追加到日志文件
  # 注意:这里假设 mysqlw 客户端连接成功不会输出到 stderr,错误会输出到 stderr
  # 如果需要更健壮的错误处理,可以检查 $?
  "$MYSQL_CMD" -h "$TARGET_IP" -P "$TARGET_PORT" "$DB_NAME" -e "$sql_query" >> "$LOG_FILE" 2>&1
  if [ $? -ne 0 ]; then
    echo "警告: 上述 SQL 命令执行可能失败,请检查日志。" >> "$LOG_FILE"
  fi
}

# 定义要执行的 SQL 查询数组
SQL_QUERIES=(
  "select user, host, plugin from mysql.user;"
  "show variables like '%connections_control%';"
  "select user,host from mysql.user;"
  "show variables like '%password%';"
  "show variables like '%timeout%';"
  "show variables like '%have_ssl%';"
  "show variables where variable_name like 'version';"
  "show variables like 'log_%';"
  "show variables like '%logs%';"
  "show global variables like '%general%';"
  "show global variables like 'default_password_lifetime';"
)

# 遍历 SQL 查询数组并执行
for query in "${SQL_QUERIES[@]}"; do
  execute_sql_and_log "$query"
done

echo "" >> "$LOG_FILE"
echo "所有SQL执行完毕。" >> "$LOG_FILE"
echo "脚本执行完成,日志已保存到: $LOG_FILE"

./run_mysql_queries.sh 10.25.2.1 3306

>> Home

51ak

2025/05/25

Categories: mysql 常用脚本 Tags: 基础

《数据库工作笔记》公众号
扫描上面的二维码,关注我的《数据库工作笔记》公众号