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