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
相关推荐
tan180°2 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
DuelCode3 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
幽络源小助理3 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
爬山算法5 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
KellenKellenHao14 小时前
MySQL数据库主从复制
数据库·mysql
SH11HF15 小时前
小菜狗的云计算之旅,今天学习MySQL数据库基础知识及操作
adb
一只fish15 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(16)
数据库·mysql
叁沐17 小时前
MySQL 07 行锁功过:怎么减少行锁对性能的影响?
mysql
Java烘焙师17 小时前
架构师必备:业务扩展模式选型
mysql·elasticsearch·架构·hbase·多维度查询
飞翔的佩奇17 小时前
Java项目:基于SSM框架实现的忘忧小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
java·数据库·mysql·vue·毕业设计·ssm框架·小区物业管理系统