I am fairly new to MySQL and I am getting a pretty interesting error on which I cannot find any help via google and the stackoverflow search.
I am running a local server of MySQL 5.6.10 on MacOS 10.8.3 and manage my database via Navicat essentials for MySQL.
The error I get is that after running and managing my database just fine for a couple of days/weeks something triggers to (it appears incompletely) delete some of the tables I created using queries from within Navicat.
When I try to run queries using these tables, Navicat then warns me that the particular table does not exist. So far so good - here comes the good part:
When I try to CREATE the table, e.g. named "temp", that was previously there, I get the following error message:
Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.
However, if I try to drop the table, or try to discard the tablespace for this table, using
DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;
I get the following error messages:
Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist
So that means that I am advised to discard the table space but when I try to do so the table does not exist. Is it possible that there is some type of remnant of this table at a different place where the DISCARD query isn't checking? And does anybody have an idea what could trigger all that - completely randomly as it seems?
As I said, I'm new to the subject and pretty much clueless. I suspect that re-booting my laptop, i.e. resetting my local MySQL server, or maybe user permission rights might have to do with it, but I am just hypothesizing here.
Answer 1:
有点晚了这里,但通常我看到,当你在一个“innodb_file_per_table”模式下运行时得到一个“表已满”错误这个问题发生。 没有考虑太多细节(更多在这里 ),数据库服务器的表空间是由innodb_data_file_path中设置定义,默认情况下是相当小的。 即使是较大,那么“表已满”可以用较大的查询和这样仍时有发生(大量的非表“东西”被存储在那里,撤销日志,缓存等)。
不管怎么说,我发现,如果你在OS目录中查找其中的文件,每个表都存储在/ var / lib中/ MySQL的默认的OSX,在/ usr /本地的/ var / mysql的用自制IIRC,你会发现一个孤立tablename.ibd文件,但不这是正常的同伴tablename.frm文件。 如果移动的.ibd文件到一个安全的临时位置(以防万一)应该解决这个问题。
$ ls /var/lib/mysql
table1.frm
table1.idb
table2.frm
table2.ibd
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文件,当您尝试第二次。
Answer 2:
XAMPP和甲基苯丙胺用户
在导入数据库(排空后)有同样的错误低谷的MySQL。 我发现,我有一个tablename.ibd
左边,而其他所有被删除的文件。 我手动删除它从mysql/data/database_name
和错误消失了。
Answer 3:
对于WAMP [Windows 7旗舰版64位]用户:
我同意DangerDave说,所以我正在做可WAMP用户的答案。
注意:首先,你必须去到你.. \ WAMP \ BIN \ MySQL的\ MySQL的[你的MySQL版本] \ Data文件夹。
现在,你会看到所有的数据库文件夹
- 双击其中有违规表以打开它的数据库文件夹
- 不应该有一个文件
[Your offending MySQL table name].frm
,而是应该有一个文件[Your offending MySQL table name].ibd
- 删除
[Your offending MySQL table name].ibd
- 然后,从回收站中删除它太
- 然后在数据库上运行你的MySQL查询,即可大功告成
Answer 4:
如果你得到.idb
再重新将其删除后,再读取这个答案。
这究竟是怎么跟我一起工作。 我有.idb
文件,没有它的相应的.frm
,每当我删除.idb
文件,数据库再次重新创建它。 我发现的MySQL在一条线中的溶液文档 ( 表空间不存在的部分)
1-创建其它数据库目录中匹配的.frm文件,并将其复制到孤儿表所在的数据库目录。
2-问题DROP TABLE为原始表。 这应该成功删除表和InnoDB应打印警告错误日志的文件的.ibd失踪。
我复制另一个表.frm
文件,并将其命名为像我缺少的表,然后进行正常的降表查询。 和voalla它的工作和表通常是下跌!
我的系统是Windows MariaDB的v 10.1.8 XAMPP
Answer 5:
在我的情况下,唯一的工作解决办法是:
- CREATE TABLE
bad_table
ENGINE = MyISAM数据... - RM bad_table.ibd
- DROP TABLE
bad_table
Answer 6:
解
然而,更容易的选择是这样的:重启MySQL,然后做靠近文章的开头列出的相同的四个步骤。 通过这种方式,在数据字典和匹配文件的表空间ID; 因此导入表成功。
这可以给你更大的信心在恢复过程中与一些InnoDB的“疑难杂症的”的处理,甚至文件传输。
REF
Answer 7:
我上wampserver运行它试图创建一个用户表了同样的错误。 我发现了一个users.ibd文件后,我删除了这个文件,我再次运行迁移命令和它的工作。 我的Windows机器上的文件位于WAMP /斌/ MySQL的/ mysql5.6.12 /数据/ myproject的。
Answer 8:
删除/移动tablename.ibd确保我没有工作。
我该如何解决它
因为我要删除已损坏和不存在的表,我转到phpmyadmin->数据库 - >导出 - >选择的表到备份 - >导出(如.SQL)采取其他表的备份。
从那以后,我选择了旁边的数据库名称数据库图标,然后放弃了它。 创建一个新的数据库。 选择新的数据库 - >导入 - >选择你下载的文件earlier->单击导入。 现在我有我的旧工作表,并有损坏的表中删除。 现在我只创建一个被扔错误的表。
可能我有损坏的表的以前的备份。
Answer 9:
下面是解决步骤:
- 备份数据库(结构,降选项和数据)
- 停止MySQL的引擎服务
- 从内侧的MySQL /数据手动删除数据库目录
- 启动mysql引擎
- 从您的损坏的数据库不同的任何名称创建新的数据库
- 创建一个表与新的数据库中损坏的表的名称(这是秘密)。 而且最好是用完全相同的结构创建表。
- 数据库重命名为损坏的旧数据库
- 恢复您的备份和您的表将做工精细。
Answer 10:
当你暂停部分功能会出现此错误。 就像下面运行不正确的外键查询。
set foreign_key_checks=0
Answer 11:
这正是我在Fedora上MariaDB的16年2月10日做的时候,我有一个表,正好表现出在日志文件中我想同样的错误......
2018-07-11 9:43:58 140323764213504 [Note] InnoDB: The file './database_name/innodb_table.ibd' already exists though the corresponding table did not exist in the InnoDB data dictionary. You can resolve the problem by removing the file.
2018-07-11 9:44:29 140323764213504 [Warning] InnoDB: Tablespace 'database_name/innodb_table' exists in the cache with id 2836 != 2918
您的里程和错误可能会有所不同,但最主要的一个我认为是
...already exists though the corresponding table did not exist in the InnoDB data dictionary...
与DROP TABLE不工作,以及ALTER TABLE ...
MariaDB [database_name]> drop table innodb_table;
ERROR 1051 (42S02): Unknown table 'database_name.innodb_table'
MariaDB [database_name]> alter table innodb_table discard tablespace;
ERROR 1146 (42S02): Table 'database_name.innodb_table' doesn't exist
创建表也失败了,像这样:
MariaDB [database_name]> create table innodb_table(`id` int(10) unsigned NOT NULL);
ERROR 1813 (HY000): Tablespace for table '`database_name`.`innodb_table`' exists. Please DISCARD the tablespace before IMPORT
为了解决这个问题,我所做的就是第一
create table innodb_table2(`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.07 sec)
然后在/ var / lib中/ MySQL的/数据库名称目录中,我做了承认innodb_table.ibd的覆盖以下内容作为根导致我们的问题
cp innodb_table2.frm innodb_table.frm
cp innodb_table2.ibd innodb_table.ibd
chown mysql:mysql innodb_table.frm innodb_table.ibd
chmod 660 innodb_table.frm innodb_table.ibd
systemctl restart mariadb
然后再在mysql控制台我在两个表发出一个成功的指令下降
MariaDB [database_name]> drop table innodb_table;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 8
Current database: database_name
Query OK, 0 rows affected (0.08 sec)
MariaDB [database_name]> drop table innodb_table2;
Query OK, 0 rows affected (0.25 sec)
而现在一切都是方形的,我可以重新创建一个单一的表...
MariaDB [database_name]> create table innodb_table (`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.08 sec)
Answer 12:
试图删除表空间可以给你其他错误。 对于我来说,我得到了以下错误:
DROP TABLESPACE `tablename`
Error Code: 1478. Table storage engine 'InnoDB' does not support the create option 'TABLESPACE or LOGFILE GROUP'
我的解决办法是删除数据库。 这将删除与之相关的任何表空间,让您再次创建表。
Answer 13:
如果你有一个很好的版本,你可以复制(table_copy)在同一个表的另一台服务器时,table_copy转移到问题的服务器。 然后删除问题表,并重新命名table_copy表。
Answer 14:
有这个问题几次。 如果你有一个大的数据库,想尝试避免备份/恢复(添加缺少的表),尝试几次来回:
DROP TABLE MY_TABLE;
ALTER TABLE MY_TABLE DISCARD TABLESPACE;
-和-
RM my_table.ibd(孤儿W / O对应my_table.frm)位于/ var / lib中/ MySQL的/ MY_DB /目录
-然后-
CREATE TABLE IF NOT EXISTS my_table
(...)
Answer 15:
有完全相同的问题; 我沏新增mysql@5.6
(在前面有5.5)。
酿造默认值5.6是innodb_file_per_table=1
,而在5.5他们innodb_file_per_table=0
。
您现有的ibdata1
的文件(合并InnoDB的数据)仍然要你试图创建/删除表的引用。 要么改变innodb_file_per_table
回0,或删除ibdata1中的数据文件( 这会失去你所有的数据,所以一定要确保你mysqldump的首先还是已经有.SQL转储 )。
其他酿造mysql@5.6
默认这一点我是缺乏一个端口,所以网络被默认为Unix套接字和MySQL客户端不停地报告:
ERROR 2013 (HY000): Lost connection to MySQL server at 'sending authentication information', system error: 32
我加了<string>--port=3306</string>
到.plist
阵列,但你也可以指定port=3306
在你my.cnf
运行brew services stop mysql@5.6
使然后更改brew services start mysql@5.6
Answer 16:
对我来说,它有助于只要进入MySQL数据目录在/ var / lib中/ MySQL的/ {DB_NAME}(Linux版)和下降{} table_name的文件的.ibd这是相同的文件夹名称。
Answer 17:
我只是删除我的旧的数据库设在我的本地主机直接从WAMP,停止所有服务,进入WAMP /斌/ MySQL的/ mysql的[版本] /数据,我发现DB与problemas,我将其删除并重新开始WAMP的所有服务,再次创建数据库和它完成,现在你可以导入你的表,
Answer 18:
我发现“解决”这个问题的方法是相当烦人,但有处理它的脚本。
从本质上讲,你需要的ibdata1
和ib_logfile*
文件消失(它们包含外键的映射关系,除其他事项外)。 比较安全的方法做,这是对所有的数据库导出,mysql的停止,删除文件,启动mysql,然后导入文件。
可以帮助解决这个问题的脚本https://github.com/uberhacker/shrink-ibdata1 ,即使这个脚本的既定目的是不同的,但它确实解决问题。
Answer 19:
您可以运行下面的查询作为MySQL root用户
drop tablespace `tableName`
Answer 20:
如果你有这样的问题,你不要有另一种选择更换引擎为任何其他引擎一样“的MyISAM”,然后尝试创建表。
免责声明:这是不是您也可能不会被另一个存储引擎支持外键约束的有效答案。 每个存储引擎都有自己的特长来存储和访问数据,在考虑采取这些点也。
Answer 21:
,请丢弃导入前表
我有同样的问题的解决方案是低于
首先,你必须放下你的数据库名称。 如果你的数据库不会删除你流了我。 对于Windows系统目录为C:/ XAMPP / MySQL的/数据/ yourdabasefolder删除 “yourdabasefolder”
同样,你必须创建新的数据库和导入旧SQL文件。 这将是工作
谢谢
Answer 22:
我必须找到我的MySQL数据目录:
SHOW VARIABLES WHERE变量名称LIKE “%DIR”
然后强制删除数据库:
须藤室射频
文章来源: Error: Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT