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
相关推荐
码域空间22 分钟前
锁住了检查,锁不住延迟——MySQL 读写分离架构下双重检查模式失效实录
数据库·mysql·架构
数据库小学妹2 小时前
MySQL 8.4还是9.7 LTS?8.0 EOL后升级怎么选
数据库·mysql·dba·版本升级·数据库运维
m0_547486662 小时前
《数据库原理及应用教程MySQL 8.0》全套PPT课件2026
数据库·mysql
程序员夏洛2 小时前
MySQL 中的事务隔离级别有哪些?
数据库·mysql
冰暮流星2 小时前
mysql之字符串函数
数据库·mysql
梦想不只是梦与想4 小时前
MySQL 不同操作系统的安装方式
数据库·mysql·mysql安装
码农颜4 小时前
6.4.1 监听连接
java·数据库·mysql
菀亓1 天前
ubuntu系统mysql安装
mysql
程序员贺加贝1 天前
别被 saveBatch 骗了:一次 MyBatis-Plus 批量插入性能排查
mysql
l1258651 天前
# RAG上线评估指标体系:六大核心指标与压测实战全解析
数据库·人工智能·python·mysql·langchain·milvus