在mysql5.58版本之后,InnoDB替代了myisam成为了mysql数据库的默认引擎。
和myisam不同的是,InnoDB是一种事物的存储引擎,在存储方式上面有有不同,
InnoDB有表空间的概念,我们可以根据innodb_file_per_table 参数来确认,是否开启独立的表空间: show variables like 'innodb_file_per_table'
ON > 独立表空间 tablename.idb
OFF> 系统表空间 ibdaraX(x代表数字)
mysql5.5之前默认配置的是系统表空间,5.5之后默认的是独立表空间,那么,应该选择系统表空间还是独立表空间呢???
比较:
1.系统表空间无法简单的收缩文件大小,如果表空间不足的时候,我们删除数据后,系统表空间并不会减少 ,独立表空间可以通过optimize table 命令来收缩系统文件。不需要重启。
2.系统表空间是多表存在一起的,所有对IO会产生瓶颈,独立表空间可以同时向多个文件刷新数据。
强烈建议 使用独立表空间
那么如果想将现有的系统表空间的数据如果转移到独立表空间呢?
1.使用mysqldump 导出所有数据库的表数据。
2.停止mysql服务,修改参数,并删除innoDB相关文件。
3.重启mysql服务,重建InnoDB 系统表空间。
4.重新导入数据。
表空间就先介绍到这里,下面介绍下它的一些特性:
1.InnoDB是一种事物存储引擎,完全支持事物的ACID特性,它是使用日志来保证事物的,也就是Redo log(重做日志) 和 Undo log(回滚日志)。
查看redo log 数据缓存区大小 show variables like 'innodb_log_buffer_size',我们会每个1秒将缓冲区上面的内容持久化到磁盘上面,所有缓冲区大小不用太大。
Redo log 主要储存已经提交的事物
Undo log 主要是储存未提交事物
2.支持行级锁,行级别锁可以最大程度支持并发,行级锁是由存储引擎层来实现的。
3.InnoDB状态检查
show engine innodb status
适用场景
适合多大数OLTP应用。