bash脚本手动清空mysql表数据

打印 上一主题 下一主题

主题 1631|帖子 1631|积分 4893

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

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

  1. #!/bin/bash
  2. # 配置区域(修改此处)
  3. MYSQL_USER="root"
  4. MYSQL_PASSWORD="123456"
  5. MYSQL_HOST="localhost"
  6. DATABASES=(
  7.   "hps-base:base_test_item"        # 格式:数据库名:表名1,表名2
  8.   #"db2:tableA,tableB"
  9.   #"db3:*"                    # *表示清空所有表
  10. )
  11. LOG_FILE="./cleanup_$(date +%Y%m%d_%H%M%S).log"
  12. echo "清理日志已创建: $LOG_FILE" | tee -a $LOG_FILE
  13. # 检查MySQL连接
  14. check_mysql() {
  15.   mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SELECT 1;" &> /dev/null
  16.   if [ $? -ne 0 ]; then
  17.     echo "错误: 无法连接到MySQL服务器" | tee -a $LOG_FILE
  18.     exit 1
  19.   fi
  20. }
  21. escape_db_name() {
  22.   local db_name="$1"
  23.   # 用反引号包裹整个数据库名(保留连字符等字符)
  24.   echo "\`$db_name\`"
  25. }
  26. # 清理指定数据库
  27. cleanup_db() {
  28.   local raw_db_name=$1
  29.   local db_name=$(escape_db_name "$raw_db_name")  # 关键转义处理
  30.   #local db_name=$1
  31.   local tables_str=$2
  32.   IFS=',' read -r -a tables <<< "$tables_str"  # 将逗号分隔转为数组
  33.   echo "========== 正在清理数据库: $db_name ==========" | tee -a $LOG_FILE
  34.   # 禁用外键检查
  35.   mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SET FOREIGN_KEY_CHECKS=0;" 2>> $LOG_FILE
  36.   for table in "${tables[@]}"; do
  37.     if [ "$table" == "*" ]; then
  38.       # 清空所有表
  39.       echo "清空数据库 $db_name 所有表..." | tee -a $LOG_FILE
  40.       ALL_TABLES=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -N -B -e "SHOW TABLES FROM $db_name")
  41.       for t in $ALL_TABLES; do
  42.         echo "TRUNCATE TABLE $db_name.$t" | tee -a $LOG_FILE
  43.         mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "TRUNCATE TABLE $db_name.$t" 2>> $LOG_FILE
  44.       done
  45.     else
  46.       echo "清空表 $db_name.$table" | tee -a $LOG_FILE
  47.       mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "TRUNCATE TABLE $db_name.$table" 2>> $LOG_FILE
  48.     fi
  49.   done
  50.   # 恢复外键检查
  51.   mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SET FOREIGN_KEY_CHECKS=1;" 2>> $LOG_FILE
  52. }
  53. # 主执行流程
  54. main() {
  55.   check_mysql
  56.   for db_config in "${DATABASES[@]}"; do
  57.     IFS=':' read -r db_name db_tables <<< "$db_config"  # 拆分数据库名和表名
  58.     cleanup_db "$db_name" "$db_tables"
  59.   done
  60.   echo "清理完成,日志保存在: $LOG_FILE" | tee -a $LOG_FILE
  61. }
  62. main
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表