缺少MariaDB表,但无法重新创建

ctehm74n  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(165)

在两个数据库之间进行结构同步时出错。
我们的一个生产数据库现在缺少一个键表“customers”(几乎每个其他表都有外键指向它)
我正在尝试从昨晚的备份重新创建表(我不想恢复整个数据库-只需重新创建此表,因为其中的数据更改不多,而且我不想丢失今天的事务数据)
问题似乎是这个表的所有外键数据仍然存在于INFORMATION_SCHEMA.KEY_COLUMN_USAGE中,当我尝试运行CREATE TABLE查询时,我得到了121和150个错误。
我已经手动删除了丢失表的所有FK,但在尝试重新创建该表时仍然出现错误号150。您是否知道还有哪些地方可能丢失了对该表的引用,从而阻止了我再次创建该表?

wtzytmuj

wtzytmuj1#

这最终通过SHOW ENGINE INNODB STATUS查询的多次咨询得到解决。
缺少的表具有多个索引-例如,在客户名称上有一个索引“customer_name_idx”。CREATE TABLE查询要求创建此索引。显示引擎innodb状态返回“无法创建表,因为索引customer_name_idx已存在”。
在任何元数据表中,都没有对该索引、任何主键或表本身的引用--我检查过了

INFORMATION_SCHEMA.INNODB_SYS_INDEXES
INFORMATION_SCHEMA.TABLE_SCHEMA
INFORMATION_SCHEMA.STATISTICS -INFORMATION_SCHEMA.TABLE

所以我无法解释为什么会抛出这个错误。
我的猜测是,事实上,MySQL在内存中保存了information_schema meta数据的缓存副本,并正在参考它,也许只有在重新启动MySQL时才会刷新它?
解决方案是为索引提供新名称作为短期修复,并在下一次计划停机时重命名它们。
完成这些操作后,即可创建表并恢复备份数据。

相关问题