跳到主要内容

NineData 内置 MetaDB 空间检查与元数据清理

本文介绍内置 MetaDB 的空间检查和元数据表清理方法,适用于 NineData 社区版(含历史版本)及专属集群各版本。外置 MetaDB 不在本文范围内。清理方法会清空整张表,不按单个任务筛选记录;执行前必须确认目标实例、备份和清理条件。

获取 MetaDB 账号和密码​

在有权限访问部署主机的终端中,按部署形态读取 MetaDB 用户名和密码。以下命令适用于使用项目文档所述标准容器和命名空间的部署;如果容器名或命名空间经过修改,先按实际部署配置调整命令。

社区版​

docker exec -it ninedata sh -lc "kubectl get cm jzcloud-console-config -n ninedata -o jsonpath='{.data.spring\.datasource\.druid\.username}'"
docker exec -it ninedata sh -lc "kubectl get secret ninedata-secret -n ninedata -o jsonpath='{.data.mysqlPassword}' | base64 -d"

专属集群​

docker exec -it ninedata sh -lc "kubectl get secret mysql-privsecrets -n ninedata -o jsonpath='{.data.clusterAdminUsername}' | base64 -d"
docker exec -it ninedata sh -lc "kubectl get secret mysql-privsecrets -n ninedata -o jsonpath='{.data.clusterAdminPassword}' | base64 -d"

密码读取命令会在终端输出密码。请只在受控终端中运行,不要把密码复制到工单、聊天、文档、截图或日志中。

通过控制台访问 MetaDB​

使用已录入控制台的 MetaDB 数据源访问内置 MetaDB,不需要在 SQL 窗口中重新输入密码。

  1. 登录 NineData 控制台。

  2. 在左侧导航栏单击"SQL 窗口"。

  3. 在 SQL 窗口中打开已有的 MetaDB 标签页。数据库列表中包含 information_schema 和 replication_metastore。

  4. 确认当前数据库为 information_schema,在 SQL 编辑器中运行只读查询,查看 replication_metastore 各表的数据与索引空间值。结果单位为 MiB:

    SELECT TABLE_NAME,
    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS SIZE_MIB
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA = 'replication_metastore'
    ORDER BY DATA_LENGTH + INDEX_LENGTH DESC;

查询结果来自 MySQL information_schema 的表元数据,不等同于主机文件系统的可用空间。不同实例和不同时间的空间占用会变化;不要把其他环境的截图数值当作本实例的清理阈值。

如需通过命令行直接连接 MySQL,请先按目标主机的实际部署配置确认 MetaDB 服务地址和端口。本文不提供通用的 mysql -h 命令。

清理元数据表​

以下步骤是整表清理,不会只删除已终止或已删除任务对应的记录。TRUNCATE 会清空目标表的全部数据;不要将它当作按任务筛选的删除操作。

  1. 确认连接的是内置 MetaDB,并在 replication_metastore 中确认目标表存在。外置 MetaDB 不使用本文步骤。

  2. 通过适用于该部署形态的 MetaDB 备份方案,备份 replication_metastore,并确认备份可恢复后再继续。

  3. 空间不足、需要回收列元数据时,执行:

    TRUNCATE TABLE replication_metastore.capture_meta_column;

    执行后核对该表已清空:

    SELECT COUNT(*) AS row_count
    FROM replication_metastore.capture_meta_column;
  4. 只有在确认所有复制任务均已终止或删除后,且仍需回收索引元数据空间时,才执行:

    TRUNCATE TABLE replication_metastore.capture_meta_index;

    执行后核对该表已清空:

    SELECT COUNT(*) AS row_count
    FROM replication_metastore.capture_meta_index;
  5. 不要清理 capture_meta_ddl、capture_meta_table_revision 和 capture_meta_table。

  6. 清理后重新运行本文的空间查询,核对目标表行数为 0 且空间值有相应变化;如结果与预期不符或任务出现异常,停止后续操作并按备份恢复流程处理。

清理规则适用于本文范围内的内置 MetaDB 版本。不同版本的表结构可能有差异;执行前核对目标表存在并复核备份。不要对其他 capture_meta_* 表套用上述命令。