MySQL数据库的InnoDB引擎TableSpaceExists问题解决
文章中所有操作均是在 MySQL 5.7 版本下进行的
引入问题
MySQL 使用过程中如果出现如下报错:
ERROR 1813 (HY000): Tablespace ‘`库名`.`表名`‘ exists.
出现这个问题的大部分原因,在使用 InnoDB 引擎的数据库中,所有已经存在的表都使在使用 InnoDB 引擎的数据库中,所有已经存在的表都使用两个文件保存。假设表名为 test1,则在数据库的数据目录下会有两个文件:
- test1.frm 文件,存储数据表的定义信息
- test1.ibd 文件,存储数据表的内容
如果上述的 frm 文件某种原因丢失或者损坏,再去操作(比如删除这个表重新创建表"drop table if exists tbl_test;")可能就会报上面的错。
解决问题
第一种办法(适用于 MySQL 5.6 及以前的版本)
先关闭 MySQL 的数据库服务,找到 MySQL 的安装目录下的 data 目录,找到报错的对应的库的目录进去,对应的表的 .ibd 文件直接删掉,重启服务即可。
第二种办法(适用于 MySQL 5.6 及以前的版本)
第一种办法不好使?在 MySQL 5.6 及以前的版本,这些文件都是可以公用的。创建一个临时的库(库名自己定),在这个库下面建立一个完全相同的表。关掉 MySQL 的数据库服务,找到 MySQL 的安装目录下的 data 目录下刚才创建的那个临时库的目录,进入找到 .frm 文件和 .ibd 文件,拷贝这两个文件到报错的那个库的目录中覆盖粘贴即可,这样就可以进行正常操作。
MySQL 5.7 版本的解决办法
MySQL 5.7 之后因为数据库会默认使用表空间隔离,所以上面的第二种办法就不好使了,因为这个时候怎么创建临时的库和相同名的表,它们的 .frm 和 .ibd 这两个文件并不能通用。第一种直接删除然而从新创建相同表还是会报错。那如何解决呢?其实还是利用第二种办法的原理。
- 先关闭 MySQL 的数据库服务,删除掉报错的那个表的老的 .ibd 文件,比如 test1.ibd。
- 修改 my.ini 文件(Linux 系统自行对应 my.cnf),修改 innodb_file_per_table=0,如果没有在最后面添加即可,保存文件,重启数据库服务。
- 新建一个临时的库(库名随便取,比如 testdb),并创建一个同名的表,比如上面的假设表为 test1。这时候会在这个临时的库(testdb)的目录下出现这个表的 .frm 文件,比如 test1.frm。将这个文件拷贝到报错的数据库目录下覆盖粘贴即可。回到之前报错的库删除或重建这个表就不会报错了。
- 最后不要忘了把修改的 innodb_file_per_table=0 换成 innodb_file_per_table=1 ,或者直接屏蔽或删除掉,保存重启数据库服务。
结语
关于 innodb_file_per_table 的作用会在后续的文章进行讨论。如果您的问题还没有解决,可以联系作者,作者很乐意帮忙。
MySQL数据库的InnoDB引擎TableSpaceExists问题解决相关推荐
- mysql 修改时间段内_详解mysql数据库MyISAM存储引擎如何转为Innodb及其中的注意点...
概述 mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Inno ...
- Mysql技术内幕innodb引擎笔记
第2章 InnoDB存储引擎 2.3 InnoDB体系架构 InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构. 缓 ...
- 解决Mysql数据库提示innodb表不存在的问题
转载来源 :解决Mysql数据库提示innodb表不存在的问题:https://www.jianshu.com/p/31cca5187ab2 发现mysql的error.log里面有报错: InnoD ...
- 关于MAC下pymysql连接mysql数据库报错2003的问题解决方法
关于MAC下pymysql连接mysql数据库报错2003的问题解决方法 问题:pymysql.err.OperationalError: (2003, "Can't connect to ...
- EF6 使用 和 连接MySql 数据库-闪退和若干问题解决
在visual studio中用EF6连接Mysql数据库,搞了我两天,刚刚搞定,其实很简单就是版本的问题,这里填个坑. 首先,必备插件 1. MySql Connector/NET 2. MySql ...
- MySQL数据库MyISAM存储引擎转为Innodb
之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导致了用户连接网站时超时而返回502,于是决定把存储引擎转 ...
- mysql分页tmp_count,MySQL MyISAM和InnoDB引擎的写入速度优化比较,分页速度优化
以下的文章主要介绍的是MySQL MyISAM的引擎和InnoDB引擎的实际性能的比较,我们首先是通过MySQL数据库的表结构来出MySQL MyISAM的引擎和InnoDB引擎的实际性能的实际操作. ...
- MySQL数据库:存储引擎
一.什么是存储引擎: 存储引擎是MylSQL的核心,是数据库底层软件组织,数据库使用存储引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁级别.事务等功能.存储引擎是基 ...
- MySQL 数据库常用存储引擎的特点
数据库的存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 获得 ...
最新文章
- Java 序列化之 Externalizable
- 《智能家居》培训第五天------2019-01-09
- AngularJS(6)-选择框Select
- c语言 单词长度统计,编写一个程序,打印输入中单词长度的直方图
- 一只猫引发的互联网争论
- FZOJβ #31.字符串
- linux 根目录分配多少好,Linux下硬盘怎么分区才合适:根分区(/)交换分区(/swap)和/boot分区需要多大...
- 索尼PS5突然“上架”?预购价约7244元...
- 如何彻底删除nginx
- MATLAB+simulink仿真学习
- 网络系统设计综合布线方案
- 运放放大倍数计算公式_运放电路设计【1】
- html转word 自动分页,word怎样自动分页
- ECCV 2022 | 石溪大学联合小鹏汽车提出先验知识指导的无监督领域自适应
- 游戏公司岗位有哪些?各职位都是做什么的?有什么特点?
- 对于时间管理初识--时间管理入门
- 如何将 Django 服务器单独部署到 heroku 上
- 港大计算机学院副院长,中科院许榕生教授、香港大学邹锦沛博士等一行访问我校...
- Hadoop YARN配置参数剖析(4)—Fair Scheduler相关参数
- wpf利用Visifire.Chart实现实时曲线绘制