mysql -uroot -pxxx -s -e "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA in ('test');" > table_name.txt
for i in `cat table_name.txt`;do mysql -u admin -p'xxx' -h 127.0.0.1 -P6032 --default-auth=mysql_native_password -s -e "select ifnull((SELECT from_unixtime(last_seen+28800) FROM stats_mysql_query_digest where digest_text like '%${i}%'),'${i}');";done > ./unused.txt
查看文件输出如下:
2021-03-23 13:42:37
2021-03-23 14:43:56
tb2
tb3
sed '/:/d' unused.txt (不修改文件)
sed -i '/:/d' unused.txt (修改文件)
删除后如下图所示:
tb2
tb3
此筛选出的表需要与项目负责人确认是否可以清理,如果确认可以清理,也不是直接物理删除,需要 rename 统一的后缀名,并且再观察一段时间是否有人反馈因为访问不到表产生的问题,如果不再出现任何问题,那么就可以放心地清理了。
附批量生成 rename 语句:
SELECT
CONCAT( 'ALTER TABLE ', TABLE_NAME, ' RENAME ', TABLE_NAME, '_unused;' )
FROM
INFORMATION_SCHEMA.TABLES
WHERE
table_schema IN ( 'unused' ) AND TABLE_TYPE='BASE TABLE';
SELECT
CONCAT( 'ALTER TABLE ', TABLE_NAME, ' RENAME ', TABLE_NAME, '_unused;' )
FROM
INFORMATION_SCHEMA.TABLES
WHERE
table_name IN ( 'table1', 'table2' …) AND TABLE_TYPE='BASE TABLE';
注:如果筛选出的表过多,可以新建一个数据库 “unused” 包含所有未使用的表,或者使用文本编辑工具批量生成 “’table1′, ‘table2’ …”,反之手动复制粘贴即可。