zoukankan      html  css  js  c++  java
  • 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数据库、以便于您获取更多的相关信息。

  • 相关阅读:
    OneNote2007产品密钥及激活方法
    穿着马甲的编码方式链式
    String 转换NameValueCollection 的方法 , 这是原创 嘎嘎
    TransactionScope分布式事务无法使用时, 配置并启动 MSDTC 的解决方案
    Spirit越狱3.1.3/3.2固件(Windows)
    智能感知 不正常的解决方法
    HttpHandler HttpModule入门篇
    Microsoft.Practices.Unity依赖注入使用实例
    ViewEngine 深入解析与应用实例
    打开chm文件提示“已取消到该网页的导航”的解决方案
  • 原文地址:https://www.cnblogs.com/lxplwh/p/8482784.html
Copyright © 2011-2022 走看看