• 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面试题集合(一)
    史上最全的大厂Mysql面试题在这里
    Linux运维必会的100道MySql面试题之(一)
    mysql数据库基础命令(一)
    MySQL基础入门之常用命令介绍
    MySQL数据库主从同步实战过程
    MySQL数据库入门备份数据库
    MySQL数据库入门多实例配置
    MySQL数据库入门常用基础命令
    运维LVS三种模式十种调度算法
  • 原文地址:https://www.cnblogs.com/capable/p/6852020.html
Copyright © 2020-2023  润新知