用shell编写一个脚本用于清理多数据库的表,表名命名中带时间例如t_session_202301,需要清理表名中的最后时间小于202301的表
时间: 2024-02-16 15:03:31 浏览: 58
好的,以下是一个清理多个数据库中,表名命名中带时间的表,清理表名中的最后时间小于指定时间的Shell脚本:
```
#!/bin/bash
# 数据库信息
DB_USER="your_db_username"
DB_PASSWORD="your_db_password"
DB_HOST="your_db_host"
# 你要清理的多个数据库名
DB_NAMES=("db1" "db2" "db3")
# 清理的表名前缀
TABLE_PREFIX="t_session_"
# 清理数据的时间戳
CLEAN_TIMESTAMP=$(date -d "2023-01-01" +%s)
# 遍历每一个数据库和表进行数据清理
for DB_NAME in "${DB_NAMES[@]}"
do
echo "Cleaning tables in database $DB_NAME ..."
# 获取数据库中所有符合条件的表名
TABLE_NAMES=$(mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST -D $DB_NAME -e "SHOW TABLES LIKE '$TABLE_PREFIX%';" | grep -v Tables_in)
# 遍历每一个表进行数据清理
for TABLE_NAME in $TABLE_NAMES
do
# 提取表名中的时间
TABLE_TIME=$(echo $TABLE_NAME | awk -F '_' '{print $NF}')
# 判断时间是否小于指定时间,是则进行数据清理
if [ $TABLE_TIME -lt 202301 ]
then
echo "Cleaning data in table $TABLE_NAME ..."
# 使用MySQL的DELETE语句进行数据清理
mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST -D $DB_NAME -e "DELETE FROM $TABLE_NAME"
echo "Data in table $TABLE_NAME cleaned."
fi
done
echo "All tables in database $DB_NAME cleaned."
done
echo "All data cleaned."
```
您只需要将脚本中的 `your_db_username`、`your_db_password`、`your_db_host` 替换成您自己的数据库信息,`db1`、`db2`、`db3` 替换成您要清理的数据库名,`t_session_` 替换成您要清理的表名前缀,保存脚本并执行即可。
阅读全文