mysql5.8之后默认的存储引擎修改成了innodb

innodb是一种事务型的存储引擎,innodb在存储数据的方式上跟myisam不同,innodb有自己表空间的概念,表中的数据是存储在表空间中的,具体存储在怎么样的表空间中是由
innodb_file_per_table 参数来决定的

如果参数为ON会为每个innodb表建立独立表空间:tablename.ibd
如果为OFF者会把数据存储到系统表空间下ibdataX,X为从一开始的数字
那么我们应该如何选择系统表空间和独立表空间
对比一下
1)系统表空间无法简单的收缩文件大小
在mysql5.6之前的innodb,innodb_file_per_table默认值为 OFF,也就是说mysql5.5版本中,innodb数据引擎数据会存储在系统表空间中 ,就算删除无效的数据,系统表空间文件大小也不会变小,这样就浪费很大的空间。而想要收缩表空间的唯一方法是,把数据导出,重启mysql在导入
2) 独立表空间可以通过optimize table命令收缩系统文件
3)系统表空间会产生IO瓶颈
4)独立表空间可以同时向多个文件刷新数据

PS.建议对innodb使用独立表空间,mysql5.6之后独立表空间也成为了默认的配置

把原来存在于系统表空间中的表转移到独立表空间中的方法
1)使用mysqldump导出所有数据库中的数据
2)停止mysql服务器,修改参数,并删除innodb相关文件
3)重启mysql服务,重建innodb系统表空间
4)重新导入数据


本文由 来鹏飞 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论