跳到主要内容

清理升级产生的影子表

1 影子表的由来

ONES 版本升级可能会做数据库表的切换,切换操作是先创建临时表、在临时表中执行变更,再做临时表和正式表的更名,故数据库会存在升级参数的备份临时表,俗称影子表。 在下一次升级前可清理影子表,减少磁盘空间消耗和MySQL性能消耗。

2 清理操作

登录MySQL数据库

ones-ai-k8s.sh

# 先备份数据库
make mysql-base-backup NAMESPACE=ones


# 获取 mysqlRootPassword
kubectl exec -n ones-installer -it $(kubectl -n ones-installer get po | grep installer-api | awk {'print $1'}) -c installer-api -- bash -c "cd /data/ones/ones-ai-k8s && make get_value KEY=mysqlRootPassword"

kubectl -n ones exec -it mysql-cluster-mysql-0 bash

mysql -uroot -p
# 输入密码

执行清理命令

# 根据查询结果,执行DROP语句
SELECT CONCAT(
'DROP TABLE `', table_schema, '`.`', table_name, '`;'
)
FROM information_schema.tables
WHERE table_schema IN ('project','wiki')
AND (table_name LIKE '_o_2%' OR table_name LIKE '_m_2%')
INTO OUTFILE '/var/lib/mysql-files/drop_tables.sql';

# 人工确认后,执行source
source /var/lib/mysql-files/drop_tables.sql