mysql的innodb存储引擎
Posted 魅力男神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的innodb存储引擎相关的知识,希望对你有一定的参考价值。
innodb是支持事务的存储引擎,支持ACID特性的ACID(指数据库事务正确执行的四个基本要素的缩写)
包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
更适合处理大量的小事务,小事务正常都会被提交,很少会被回滚,在数据存储的方式上也有很大不同
innodb有自己的表空间,数据存储在自己的表空间中的,存储在什么样的表空间中,主要由innodb_file_per_table
这个参数决定,如果这个参数为on,则建立独立表空间,则为每个innobd表建立一个以.idb为扩展名的系统文件,如果为off则建立共享(系统)表空间,存储为ibdataX(x为数字)
1.set global innodb_file_per_table=off; 设置为off
2.show variable like ‘innodb_file_per_table‘; 查看表空间
3.create table myinnodb_g(id int,c1 varchar(10)) engine=‘innodb‘; 当关闭innodb表时就会发现存储为idbdata1,共享表空间
系统表空间和独立表空间如何选择
在mysql5.5之前是默认关闭innodb_file_per_table的,存储在系统表空间中,
1.系统表空间无法简单的收缩文件大小,产生磁盘碎片,空间浪费,降低系统性能
系统表空间产生IO瓶颈,独立表空间可以同时向多个文件刷新数据
2.独立表空间可以通过optimize table 命令收缩系统文件。mysql5.6后默认开启
1.将原来存在于系统表空间中的表转移到独立表空间中的方法:
1.1、使用mysqldump导出所有数据库数据,如果有存储过程、触发器,计划事件等要一起导出
1.2、停止mysql服务,(主从架构先从从进行操作)修改my.cnf文件并加入innodb_file_per_table=on参数(修改参数,并删除原来innodb表空间相关文件)
如果之前做过备份,这里可以重建data目录,使用mysql的初始化start脚本
1.3、重启mysql服务,重建innodb系统表空间
1.4、重新导入数据
2.系统表空间中的数据字典
innodb数据字典:是数据库对象结构的源数据的信息,存储表、列、索引
frm文件是服务器所产生的文件,可以理解为服务器层的数据字典,简单二进制文件
innodb内部数据字典,引擎相关的一些内容
undo回滚段:mysql5.6 就已经支持啦
3、innodb是如何实现完全支持事务的ACID特性的
实现原子性、持久性、一致性使用了两个日志类型,
redo log 重做日志:实现事务的持久性,内存中的重做日志缓冲区,重做日志文件
show variables like ‘innodb_log_buffer_size‘;
以字节为单位的大小,不需要太大,data目录下看到ib_logfil0/1,有两个,show variables like ‘innodb_log_files_in_group‘; 看到默认两个,存储已提交事务
undo log 回滚日志:帮助未提交事务进行回滚和实现mvcc多版本并发控制,存储未提交的事务
以上是关于mysql的innodb存储引擎的主要内容,如果未能解决你的问题,请参考以下文章