21
2020
05
09:17:44

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

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 ,使用独立表空间的默认设置。

————————————————

版权声明:本文为CSDN博主「阿凯--Nonkey」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012488504/article/details/77345707




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/1277.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: