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数据库、以便于您获取更多的相关信息。

  • 相关阅读:
    APK自我保护方法
    Andorid APK反逆向解决方案---梆梆加固原理探寻
    判断android文件是否加壳
    java调用dll-JNA
    Java调用本地接口
    pat00-自测2. 素数对猜想 (20)
    pat00-自测4. Have Fun with Numbers (20)
    pat00-自测3. 数组元素循环右移问题 (20)
    pat00-自测1. 打印沙漏(20)
    pat1013. Battle Over Cities (25)
  • 原文地址:https://www.cnblogs.com/lxplwh/p/8482784.html
Copyright © 2011-2022 走看看