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
相关推荐
Fleshy数模1 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
az44yao2 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
秦老师Q3 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
橘子134 小时前
MySQL用户管理(十三)
数据库·mysql
Dxy12393102164 小时前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋4 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣504 小时前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
人道领域5 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
千寻技术帮6 小时前
10404_基于Web的校园网络安全防御系统
网络·mysql·安全·web安全·springboot
spencer_tseng7 小时前
MySQL table backup
mysql