bash脚本手动清空mysql表数据

文章目录


1、bash脚本手动清空mysql表数据

bash 复制代码
#!/bin/bash

# 配置区域(修改此处)
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
MYSQL_HOST="localhost"
DATABASES=(
  "hps-base:base_test_item"        # 格式:数据库名:表名1,表名2
  #"db2:tableA,tableB"
  #"db3:*"                    # *表示清空所有表
)

LOG_FILE="./cleanup_$(date +%Y%m%d_%H%M%S).log"
echo "清理日志已创建: $LOG_FILE" | tee -a $LOG_FILE

# 检查MySQL连接
check_mysql() {
  mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SELECT 1;" &> /dev/null
  if [ $? -ne 0 ]; then
    echo "错误: 无法连接到MySQL服务器" | tee -a $LOG_FILE
    exit 1
  fi
}

escape_db_name() {
  local db_name="$1"
  # 用反引号包裹整个数据库名(保留连字符等字符)
  echo "\`$db_name\`"
}

# 清理指定数据库
cleanup_db() {
  local raw_db_name=$1
  local db_name=$(escape_db_name "$raw_db_name")  # 关键转义处理
  #local db_name=$1
  local tables_str=$2
  IFS=',' read -r -a tables <<< "$tables_str"  # 将逗号分隔转为数组

  echo "========== 正在清理数据库: $db_name ==========" | tee -a $LOG_FILE

  # 禁用外键检查
  mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SET FOREIGN_KEY_CHECKS=0;" 2>> $LOG_FILE

  for table in "${tables[@]}"; do
    if [ "$table" == "*" ]; then
      # 清空所有表
      echo "清空数据库 $db_name 所有表..." | tee -a $LOG_FILE
      ALL_TABLES=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -N -B -e "SHOW TABLES FROM $db_name")
      for t in $ALL_TABLES; do
        echo "TRUNCATE TABLE $db_name.$t" | tee -a $LOG_FILE
        mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "TRUNCATE TABLE $db_name.$t" 2>> $LOG_FILE
      done
    else
      echo "清空表 $db_name.$table" | tee -a $LOG_FILE
      mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "TRUNCATE TABLE $db_name.$table" 2>> $LOG_FILE
    fi
  done

  # 恢复外键检查
  mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SET FOREIGN_KEY_CHECKS=1;" 2>> $LOG_FILE
}

# 主执行流程
main() {
  check_mysql
  for db_config in "${DATABASES[@]}"; do
    IFS=':' read -r db_name db_tables <<< "$db_config"  # 拆分数据库名和表名
    cleanup_db "$db_name" "$db_tables"
  done
  echo "清理完成,日志保存在: $LOG_FILE" | tee -a $LOG_FILE
}

main
相关推荐
0***v77720 小时前
MySQL四种备份表的方式
mysql·adb·oracle
盼哥PyAI实验室1 天前
MySQL 数据库入门第一课:安装、账户、库、表与数据操作详解
数据库·mysql
h***59331 天前
MySQL如何执行.sql 文件:详细教学指南
数据库·mysql
Doro再努力1 天前
【MySQL数据库09】外键约束与多表查询基础
数据库·mysql
高级程序源1 天前
springboot社区医疗中心预约挂号平台app-计算机毕业设计源码16750
java·vue.js·spring boot·mysql·spring·maven·mybatis
O***Z6161 天前
三分钟内快速完成MySQL到达梦数据库的迁移
数据库·mysql
菜鸟小九1 天前
mysql(锁)
数据库·mysql·oracle
云和数据.ChenGuang1 天前
运维面试题之oracle和mysql单表最大容量
运维·mysql·oracle
Z***G4791 天前
【零基础学Mysql】常用函数讲解,提升数据操作效率的利器
数据库·mysql