Chr*_*wan 6 mysql innodb tablespaces
我们已经记不清我们是如何准确到达这里的了,但是我们在 MySQL 启动时收到以下错误(尽管它仍然使用 InnoDB 启动服务):
[ERROR] InnoDB: Cannot open datafile for read-only: './oldschema/tablename.ibd' OS Error: 71
Run Code Online (Sandbox Code Playgroud)
它所引用的表曾经存在于那里,但被重命名为不同的模式,然后被删除,或者可能只是被删除(模糊内存),以便让对它的所有引用都跟随到其他模式中。最终,该表被替换为通过复制有意建立为副本的表。
它不会出现在信息模式中,不会出现在 SHOW TABLES 列表中,无法使用 SELECT 语句进行查询,并且无法在该模式中对该名称进行 DROP/ALTER TABLE(在获取视图后)让我们:
mysql> drop table oldschema.tablename;
ERROR 1051 (42S02): Unknown table 'oldschema.tablename'
mysql> ALTER TABLE oldschema.tablename DISCARD TABLESPACE;
ERROR 1146 (42S02): Table 'oldschema.tablename' doesn't exist
Run Code Online (Sandbox Code Playgroud)
...正如我们所期望的那样。然而,现在在它的位置有一个同名的视图(它引用另一个模式中的新表),并且它有一个相应的 .frm 文件,当然,没有 .ibd 文件,正如我们所期望的那样。
此外,新模式中的表正如预期一样工作,旧模式中为其别名的视图也是如此。事实上,据我们所知,这不会造成任何问题……我们只是不想再担心看到日志的人。我们甚至可以在其位置创建并删除一个表(在移动视图之后并将其放回之前),但仍然会出现该错误。
那么为什么 MySQL 需要在旧模式中使用该名称的 ibd 文件呢?
我们如何说服它忘记?
归档时间: |
|
查看次数: |
6678 次 |
最近记录: |