mysql的InnoDB 数据库引擎TableSpace Exists 问题

Mysql数据库报错:

ERROR 1813 (HY000): Tablespace ‘`coll`.`t1`‘ exists.

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

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

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

处理方法:

在 MySql 5.6之前,这些文件都是可以公用的,如果.frm 文件丢失,则会报这个错,使用一个临时库,建立一个完全相同的表,然后拷贝这两个文件到丢失的库中,就可以进行正常操作,这种很简单,不再多言。

在MySql 5.6 及以后的版本,就没有这么简单了,因为数据库会默认使用表空间隔离,所以这时候这两个文件并不能通用,导致使用上面的办法并不能生效。直接删除数据库也会报错,在系统下删除报错表残留的数据文件。然而从新创建相同数据库后,还是会报错。【导入数据库时,因表损坏,残留的数据文件删除不掉,也不能新建相同表名】

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

具体处理方法如下:

5.6 及以上版本处理方式

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

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

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

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

以上是互联网用户为您的的内容,在阿里云内部有更多的关于InnoDB 数据库引擎TableSpace Exists 问题 - DB2数据库栏目的内容,欢迎继续使用右上角搜索按钮进行搜索exists、数据库引擎、tablespace、InnoDB数据库、以便于您获取更多的相关信息。

原文地址:https://www.cnblogs.com/lxplwh/p/8482784.html

时间: 2024-10-13 19:32:56

mysql的InnoDB 数据库引擎TableSpace Exists 问题的相关文章

mysql中InnoDB存储引擎的行锁和表锁

Mysql的InnoDB存储引擎支持事务,默认是行锁.因为这个特性,所以数据库支持高并发,但是如果InnoDB更新数据的时候不是行锁,而是表锁的话,那么其并发性会大打折扣,而且也可能导致你的程序出错. 而导致行锁变为表锁的情况之一就是: SQL的更新(update)或者删除(delete)语句中未使用到索引,导致在InnoDB在对数据进行相应操作的时候必须把整个表锁起来进行检索(表锁).而如果使用了索引的话,InnoDB只会通过索引条件检索数据,而只锁住索引对应的行(行锁). 下面记录一下我遇到

Mysql 三种数据库引擎的选择问题

我们的在创建数据库的时候,一些小型的项目不会太注意数据库的引擎,一些大型项目会考虑数据库的的引擎的问题,直接影响后面的使用. MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎.除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间.MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间

细聊MySQL的Innodb存储引擎(完)

细聊MySQL的Innodb存储引擎(一) 细聊MySQL的Innodb存储引擎(二) 细聊MySQL的Innodb存储引擎(完) 上篇主要和大家探讨了Innodb引擎中出现幻读的处理方法与死锁的探测及避免死锁的一些注意事项.此篇,我们来研究下Innodb的索引. Innodb里涉及到的索引主要有四种,分别为聚簇索引(Clustered Index).次级索引(Secondary Index).全文索引(FULLTEXT Index).哈希索引(Hash Index). 聚簇索引与次级索引 每一

细聊MySQL的Innodb存储引擎(二)

细聊MySQL的Innodb存储引擎(一) 上一篇主要和大家探讨了下Innodb的锁机制与隔离机制.本篇来和大家一起研究下在使用Innodb是会出现的问题以及如何解决它们. Innodb是如何解决幻读问题的 什么是幻读?听起来似乎很高端,但实际上它只是反映了事务中的一种数据不一致的情况.下面看我来描述这样一个场景,通过这个场景,大家就能很清楚的知道幻读到底是什么意思. 打开两个客户端,设为A和B A客户端 mysql> start transaction; (步骤一) Query OK, 0 r

mysql之innodb存储引擎---数据存储结构

一.背景 1.1文件组织架构 首先看一下mysql数据系统涉及到的文件组织架构,如下图所示: msyql文件组织架构图 从图看出: 1.日志文件:slow.log(慢日志),error.log(错误日志),general.log(基本日志) 2.配置文件:my.cnf 3.数据库:performance_schema,mysql,information_schema,sys 4.innodb存储引擎(框中部分),主要包括有:两个日志文件ib_logfile0和ib_logfile1,由参数inn

MySQL 温故而知新--Innodb存储引擎中的锁

近期碰到非常多锁问题.所以攻克了后,细致再去阅读了关于锁的书籍,整理例如以下:1,锁的种类 Innodb存储引擎实现了例如以下2种标准的行级锁: ? 共享锁(S lock),同意事务读取一行数据. ?  排它锁(X lock).同意事务删除或者更新一行数据. 当一个事务获取了行r的共享锁.那么另外一个事务也能够马上获取行r的共享锁,由于读取并未改变行r的数据.这样的情况就是锁兼容. 可是假设有事务想获得行r的排它锁,则它必须等待事务释放行r上的共享锁-这样的情况就是锁不兼容.二者兼容性例如以下表

MySQL:InnoDB存储引擎的B+树索引算法

很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了一遍书.与此同时,也加深一下对MySQL的了解,认识了原理,对优化的原则才有把握,对问题的分析才有源头. 关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希.B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树

细聊MySQL的Innodb存储引擎(一)

从MySQL5.5开始,Innodb就成为MySQL的默认存储引擎了.可想而知,Innodb已经成为MySQL的主要生产方式.那Innodb到底有什么本事能够击败其它几位存储引擎而荣登宝座呢?下面,我就来和大家一起探讨探讨牛逼的Innodb引擎.Innodb涉及到的知识点比较多,所以我会分几篇来叙述,此篇主要介绍Innodb的基本概念和架构. 要了解Innodb,首先需要了解MySQL的ACID模型.何为ACID?ACID指的是事务的原子性(A).一致性(C).隔离性(I).持久性(D). 原子

MySQL中InnoDB存储引擎中的哈希算法

InnoDB存储引擎使用哈希算法来对字典进行查找,其冲突机制采用链表方式,哈希函数采用除法散列方式.对于缓冲池页的哈希表来说,在缓冲池中的Page页都有一个chain指针.它指向相同哈希函数值的页的.而对于除法散列,m的取值略大于2倍的缓冲池页数量的质数.例如:当前参数innodb_buffer_pool_size的大小为10M,则共有640个16kb的页.对于缓冲池页内存的哈希表来说,需要分配640*2=1280个槽,但是由于1280不是质数,需要取比1280略大的一个质数,应该是1399,所