1、bash脚本手动清空mysql表数据
#!/bin/bash
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
MYSQL_HOST="localhost"
DATABASES=("hps-base:base_test_item"
)LOG_FILE="./cleanup_$(date +%Y%m%d_%H%M%S).log"
echo "清理日志已创建: $LOG_FILE" | tee -a $LOG_FILE
check_mysql() {mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SELECT 1;" &> /dev/nullif [ $? -ne 0 ]; thenecho "错误: 无法连接到MySQL服务器" | tee -a $LOG_FILEexit 1fi
}escape_db_name() {local db_name="$1"echo "\`$db_name\`"
}
cleanup_db() {local raw_db_name=$1local db_name=$(escape_db_name "$raw_db_name") local tables_str=$2IFS=',' read -r -a tables <<< "$tables_str" echo "========== 正在清理数据库: $db_name ==========" | tee -a $LOG_FILEmysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SET FOREIGN_KEY_CHECKS=0;" 2>> $LOG_FILEfor table in "${tables[@]}"; doif [ "$table" == "*" ]; thenecho "清空数据库 $db_name 所有表..." | tee -a $LOG_FILEALL_TABLES=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -N -B -e "SHOW TABLES FROM $db_name")for t in $ALL_TABLES; doecho "TRUNCATE TABLE $db_name.$t" | tee -a $LOG_FILEmysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "TRUNCATE TABLE $db_name.$t" 2>> $LOG_FILEdoneelseecho "清空表 $db_name.$table" | tee -a $LOG_FILEmysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "TRUNCATE TABLE $db_name.$table" 2>> $LOG_FILEfidonemysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SET FOREIGN_KEY_CHECKS=1;" 2>> $LOG_FILE
}
main() {check_mysqlfor db_config in "${DATABASES[@]}"; doIFS=':' read -r db_name db_tables <<< "$db_config" cleanup_db "$db_name" "$db_tables"doneecho "清理完成,日志保存在: $LOG_FILE" | tee -a $LOG_FILE
}main