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存储引擎的更多相关文章

  1. MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

    文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...

  2. MySQL数据库InnoDB存储引擎中的锁机制

    MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...

  3. MySql中innodb存储引擎事务日志详解

    分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据 ...

  4. MySQL数据库InnoDB存储引擎

    MySQL数据库InnoDB存储引擎Log漫游  http://blog.163.com/zihuan_xuan/blog/static/1287942432012366293667/

  5. mysql中InnoDB存储引擎的行锁和表锁

    Mysql的InnoDB存储引擎支持事务,默认是行锁.因为这个特性,所以数据库支持高并发,但是如果InnoDB更新数据的时候不是行锁,而是表锁的话,那么其并发性会大打折扣,而且也可能导致你的程序出错. ...

  6. mysql之innodb存储引擎

    mysql之innodb存储引擎 innodb和myisam区别 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>. ...

  7. 在MySQL的InnoDB存储引擎中count(*)函数的优化

    写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引.使用事务.要什么select什么等等.然而,只是停留在阅读的层面上,很少有实践,因为没有遇到真实的项目,一切都是纸上谈兵.实践是检验 ...

  8. MySQL:InnoDB存储引擎的B+树索引算法

    很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了 ...

  9. 一文带你读懂 Mysql 和 InnoDB存储引擎

    作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系 ...

  10. MySQL 温故而知新--Innodb存储引擎中的锁

    近期碰到非常多锁问题.所以攻克了后,细致再去阅读了关于锁的书籍,整理例如以下:1,锁的种类 Innodb存储引擎实现了例如以下2种标准的行级锁: ? 共享锁(S lock),同意事务读取一行数据. ? ...

随机推荐

  1. Vue -自定义指令&钩子函数

    除了核心功能默认内置的指令,Vue也允许注册自定义指令 页面加载后,让文本框自动获取焦点,原生js做法是获取文本框元素后调用focus()方法,但Vue不建议手动操作DOM元素,所以此时要自定义指令 ...

  2. 【VMware vSphere】再谈VMware vSphere

    写在前面 在进行操作vSphere产品之前,就曾经对它进行过一个简单了解:[运维]VMware vSphere简单了解,现在再回头看,发现了解的真的是太简单了.经过前一段时间学习之后,对它又有了新的感 ...

  3. LwIP Application Developers Manual9---LwIP and multithreading

    1.前言 lwIP的内核并不是线程安全的.如果我们必须在多线程环境里使用lwIP,那么我们必须使用“upper”API层的函数(netconn或sockets).当使用raw API时,你需要自己保护 ...

  4. Python运维开发基础02-语法基础【转】

    上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...

  5. Linux将公网ip映射到局域网ip

    测试环境如下: monitor: msc1:公网IP:103.6.164.128 eth0 内网IP:192.168.0.57 eth0内网IP:192.168.0.16 eth1 通过访问monit ...

  6. 关于apache配置映射端口

    step1.打开httpd.conf找到Listen 80这一行在后面添加Listen 8080Listen 8001Listen 8002Listen 8003也就是意味着每个项目占用一个端口,就像 ...

  7. 【转】浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个 ...

  8. cocos2dx 3.x 修改NDK_ROOT、ANDROID_SDK_ROOT、ANT_ROOT路径

    CMD到setup.py目录 Python setup.py -h 查看帮助: Options:  -h,--help            showthis help message and exi ...

  9. 修改docker image存放位置

    修改镜像和容器的默认存放路径 指定镜像和容器存放路径的参数是--graph=/var/lib/docker,我们只需要修改配置文件指定启动参数即可.刚好有个300g盘的挂在/data目录上,所以在这个 ...

  10. ansible笔记(4):常用模块之文件操作

    前文中,我们已经介绍了怎样使用模块,而且我们知道,ansible有很多模块,每个模块都有自己的功能,"模块"涉及到的方向比较多,所以对于个人来说,并没有必要了解所有的模块,我们只需 ...