gpt4 book ai didi

mysql - 错误 : Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT

转载 作者:IT老高 更新时间:2023-10-28 12:50:25 28 4
gpt4 key购买 nike

我对 MySQL 还很陌生,遇到了一个非常有趣的错误,我无法通过 google 和 stackoverflow 搜索找到任何帮助。

我在 MacOS 10.8.3 上运行 MySQL 5.6.10 的本地服务器,并通过 Navicat Essentials for MySQL 管理我的数据库。

我得到的错误是,在运行和管理我的数据库几天/几周后,某些东西触发(它看起来不完整)删除我使用 Navicat 中的查询创建的一些表。

当我尝试使用这些表运行查询时,Navicat 会警告我该特定表不存在。到目前为止一切顺利 - 好的部分来了:

当我尝试创建表时,例如名为“temp”,以前在那里,我收到以下错误消息:

Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.

但是,如果我尝试删除表,或者尝试丢弃该表的表空间,使用

DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;

我收到以下错误消息:

Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist

这意味着我被建议丢弃表空间,但当我尝试这样做时,表不存在。是否有可能在 DISCARD 查询未检查的不同位置存在该表的某种类型的残余?有没有人知道什么会触发所有这些 - 看起来完全随机?

正如我所说,我是这个主题的新手,几乎一无所知。我怀疑重新启动我的笔记本电脑,即重置我的本地 MySQL 服务器,或者用户权限可能与它有关,但我只是在这里假设。

最佳答案

这里有点晚了,但通常我已经看到当您在“innodb_file_per_table”模式下运行时出现“表空间已满”错误时会发生此问题。无需过多介绍(更多 here ),数据库服务器的表空间由 innodb_data_file_path 设置定义,默认情况下相当小。即使做得更大,“表空间已满”仍然可能发生在更大的查询等情况下(大量非表“东西”存储在其中,撤消日志、缓存等......)。

无论如何,我发现如果你查看存储每个表文件的 OS 目录,OSX 上默认为/var/lib/mysql,使用 homebrew iirc 的/usr/local/var/mysql,你将找到一个孤立的 tablename.ibd 文件,而没有它的正常伴侣 tablename.frm 文件。如果您将该 .ibd 文件移动到一个安全的临时位置(为了安全起见),应该可以解决问题。

$ ls /var/lib/mysql

table1.frm
table1.idb
table2.frm
table2.idb
table3.idb <- problem table, no table3.frm
table4.frm
table4.idb

$ mkdir /tmp/mysql_orphans
$ mv /var/lib/mysql/table3.ibd /tmp/mysql_orphans/

但有一个警告,请确保最初导致问题的原因,例如长时间运行的查询、锁定的表等...已被清除。否则,当您第二次尝试时,您只会得到另一个孤立的 .ibd 文件。

关于mysql - 错误 : Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15694168/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com