频道栏目
首页 > 资讯 > DB2 > 正文

InnoDB 数据库引擎TableSpace Exists 问题

17-08-19        来源:[db:作者]  
收藏   我要投稿

数据库报错:

ERROR 1813 (HY000): Tablespace '`panda`.`t1`' exists.

原因:

在使用InnoDB引擎的数据库中,所有已经存在的表都使用两个文件保存,假设表名为content,则在数据库的数据目录下会有两个文件,

(1).frm 文件 数据表定义信息

(2).ibd 文件 数据表内容

处理方法:

遇到这种事情,最快的方式就是直接重装,但是我们一般不能这样做,重装数据库可不是闹着玩的。如果实在解决不了,大不了这个表名放弃算了。

在 MySql 5.6之前,这些文件都是可以公用的,如果.frm 文件丢失,则会报这个错,可以参考下面的博客(http://blog.csdn.net/u011478909/article/details/51589002),使用一个临时库,建立一个完全相同的表,然后拷贝这两个文件到丢失的库中,就可以进行正常操作,这种很简单,不再多言。

在MySql 5.6 及以后的版本,就没有这么简单了,因为数据库会默认使用表空间隔离,所以这时候这两个文件并不能通用,导致使用上面的办法并不能生效。

(1)停止 mysql 服务。

(2)使用select @@datadir 查看Mysql数据文件存储的位置,打开这个位置,找到对应的数据库,发现有这两个文件。

(3)手动删除 .frm 文件,进行测试。这时候奇怪的事情发生了。

[SQL]CREATE TABLE content
(
	id INT PRIMARY KEY NOT NULL,
	name VARCHAR(64) NOT NULL
);
[Err] 1813 - Tablespace '`blog`.`content`' exists.

[SQL]SELECT * from content;
[Err] 1146 - Table 'blog.content' doesn't exist

按照网上有些大神介绍的方法,关掉mysql服务,直接把 .ibd 文件也删了,重启服务,这样的方法在低版本的mysql可能奏效,但是对于5.6以上的版本根本不行,因为.ibd 文件会自动恢复,然后就回到上面的问题了。原来5.6以上的版本两个文件都添加了index ,不能通用,默认是独立的。而且还会根据information_schema 库和一些配置文件中的信息,恢复.ibd文件,但是我们还是有方法。

5.6 及以上版本处理方式

(1) 关掉mysql服务,删掉老的 blog.content,idb 文件,找到 my.ini 文件,修改innodb_file_per_table=0 。重启服务。

(2) 新建一个测试test数据库,并新建一个 test.content 表,这时候data库的data目录只出现了.frm 文件,把这个文件拷贝到blog数据库的目录下。

(3) 这个时候回到blog 库,删掉并新建 content表,不再报错。

(4)网上有人说5.6 以上只能放弃这个表名,但是其实我们可以用这个方式解决问题,最后不要忘了把my.ini 文件,修改innodb_file_per_table=1 ,使用独立表空间的默认设置。

相关TAG标签
上一篇:获得运行期泛型的类
下一篇:关于show arp表,显示Incomplete问题
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站