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/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 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