码迷,mamicode.com
首页 > 数据库 > 详细

mysql的innodb存储引擎

时间:2017-05-14 13:37:27      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:creat   单位   大量   如何   buffer   redo   mic   iso   数据存储   

  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存储引擎

标签:creat   单位   大量   如何   buffer   redo   mic   iso   数据存储   

原文地址:http://www.cnblogs.com/capable/p/6852020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!