我想知道是否可以删除不允许我使用 NDB_RESTORE 工具执行恢复的表片段。
当我运行恢复时,它会抛出以下错误:
创建表db_died_maestro/def/NDB$FKM_3194_0_mae_tipo_reg_evaluacion
失败:721:具有给定名称的架构对象已存在
恢复:无法恢复表:db_died_maestro/def/NDB$FKM_3194_0_mae_tipo_reg_evaluacion
...正在退出
NDBT_ProgramExit:1 - 失败
我之前已经删除了 DB_DIED_MAESTRO 数据库来运行还原,但该片段不会与数据库一起删除。
我已使用以下查询检查该片段是否在数据库目录中:
*从ndbinfo.operations_per_fragment中选择* 其中 fq_name 如 'db_died_maestro%'*
这个查询:
*从ndbinfo.memory_per_fragment中选择* 其中 fq_name 如“%FKM_3194_0_mae_tipo_reg_evaluacion”*
此片段是在之前运行 NDB_RESTORE 工具时创建的。请帮助我。
最佳答案
该表是一个外键“模拟”表(由名称 NDB$FKM 前缀表示)。
在某些情况下会临时创建外键模拟表,以实现 MySQL 的foreign_key_checks = 0 功能。此功能要求存储引擎支持无序创建具有部分定义的外键约束的表,这些约束可以在以后任意启用(无需重新验证)。
外键模拟表通常完全由 MySQL 的 Ndb 存储引擎组件管理,因此除非出现某种故障或错误,否则不应可见。
如果您可以分享有关此问题之前发生的事件的信息,那么这将有助于我们了解此问题是如何发生的以及是否可以避免。
作为一种解决方法,您应该可以在重新尝试失败的恢复之前使用 ndb_drop_table 实用程序删除该表。您可能必须转义从 shell 作为命令行参数传递的名称中的 $。也许您应该检查类似情况下的任何其他 NDB$FKM 表。
关于MySQL Cluster 7.4.15 - Ndb_Restore 由于孤立片段而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579870/