• innodb和myisam数据库文件存储详解以及mysql表空间


      

      数据库常用的两种引擎有Innodb和Myisam,关于二者的区别参考:https://www.cnblogs.com/qlqwjy/p/7965460.html

    1.关于数据库的存储在两种引擎的存储是一样的

      数据库的存储的都是在data目录下新建一个与数据库名字相同的文件夹,且每个文件夹内默认存放一个db.opt文件。删掉数据库也会删掉对应的文件夹。

     如果我们采用的是windows操作系统,并且是默认安装位置,存放数据库的目录是在:  C:ProgramDataMySQLMySQL Server 5.7Data  ,比如我查看我的数据库:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | hibernate          |
    | mysql              |
    | performance_schema |
    | sys                |
    | testdb             |
    +--------------------+
    6 rows in set (0.00 sec)

    查看目录:

       当然了,生成数据库的文件位置我们可以自己指定,windows是my.ini配置文件,如下面的配置会将我们的数据库生成到G盘对应目录:

    # Path to the database root
    datadir=G:mysql572Data

    2.关于Innodb引擎存储表结构以及数据的位置

      innnodb存储表结构的时候是 frm文件存储,比如我们有个表叫test,在其数据库对应的文件夹下会有test.fm文件生成。其实myisam也是这样的存储方式。

      innodb采用表空间(tablespace)来管理数据,存储表数据和索引,

        InnoDB数据库文件(即InnoDB文件集,ib-file set):

        ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用(共用表空间),其存放位置是在Data文件夹内。可以通过以下配置进行设置其大小与可扩展:

    innodb_data_file_path = ibdata1:50M:autoextend

    注意:下面是mysql5.6.6之后的单表空间

      在mysql5.6.6可以对每个表都设置一个表空间(单表表空间文件),开启可以通过全局变量开启,开启之后每个表都有一个对应的.ibd与其对应,比如上面有一个表的名字为  test  ,则在其数据库文件夹下就会有  test.frm(存放表结构)与test.ibd(存放数据与索引等信息)

    # When innodb_file_per_table is enabled (the default in 5.6.6 and higher), InnoDB stores the data and indexes for each newly created table
    # in a separate .ibd file, rather than in the system tablespace.
    innodb_file_per_table=1

      

      查看是否开启单独表空间:

    mysql> show variables like '%innodb_file_per_table%';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON    |
    +-----------------------+-------+
    1 row in set, 1 warning (0.00 sec)

      例如下面就是单表空间开启:-------------------(数据库的名字是testdb,@6bxxx是表名字为中文)

    补充:共用表空间和单独表空间的优缺点如下

    独立表空间的优点:
    1.每个表都有自已独立的表空间。
    2.每个表的数据和索引都会存在自已的表空间中。
    3.可以实现单表在不同的数据库中移动。
    4.空间可以回收(drop/truncate table方式操作表空间不能自动回收)
    5.对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

    缺点:
    单表增加比共享空间方式更大。

    共享表空间的优点:
    1)可以放表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同的文件上)。
    所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,
    也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
    2)表数据和表描述放在一起方便管理。 
    缺点:
    所有的数据和索引存放到一个文件中,将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间
    中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日志系统这类应用最不适合用共享表空间。

    总结:MySQL数据库是由N多表组成的,每个表有自己的表定义文件.frm文件,表索引文件,表数据文件。INNODB的索引文件和数据文件是在一起的,MYISAM是分开的。
      对于表空间,INNODB分成共享表空间和独享表空间2种。共享的情况下,所有表的数据都存在一个文件里,独享情况下,每个表单独文件存储此表的数据。

    3. 关于Myisam引擎的数据存储结构

      Myisam存储表结构的时候是 frm文件存储,比如我们有个表叫test,在其数据库对应的文件夹下会有test.fm文件生成。

      .MYD (MYData)是数据文件的扩展名

      .MYI是索引(my index)。

      上面三种存储结构都是在数据库对应的目录下面。

    例如:

     4.查看数据库的引擎与修改数据库默认引擎

    1.  关于引擎的查询使用如下:

    看你的mysql现在已提供什么存储引擎:
      mysql> show engines;
     
    看你的mysql当前默认的存储引擎:
      mysql> show variables like '%storage_engine%';
    你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
      mysql> show create table 表名;
    2、设置InnoDB为默认引擎:(类似于修改全局变量)
      在配置文件my.ini中的 [mysqld] 下面加入下面配置:(mysql5.7默认已经将innodb作为默认的搜索引擎)
        default-storage-engine=INNODB 

    补充:err日志记录文件在两种引擎中也是一样的:MicroWin10-1535.err

    我们可以在系统中通过全局变量查询日志位置:(.代表Data目录所在文件夹,后面是日志文件名称)

    mysql> show variables like 'log_error';
    +---------------+-----------------------+
    | Variable_name | Value                 |
    +---------------+-----------------------+
    | log_error     | .MicroWin10-1535.err |
    +---------------+-----------------------+
    1 row in set, 1 warning (0.01 sec)

    如果想修改日志文件位置以及名称,我们可以在my.ini文件进行配置:

    # Binary Logging.
    log-error="MicroWin10-1535.err"

      

  • 相关阅读:
    【计算机世界】467- XOR — 神奇的按位运算符
    记 · 复习知识 · 偶遇好玩的知识点
    【CSS】466- 一行 CSS 代码搞定响应式布局
    【Web技术】465- 关于前端埋点统计方案思考
    【CSS】464- 5种 CSS 浮动和清除浮动的方法
    简单易懂的 React useState() Hook 指南(长文建议收藏)
    java中的四类八种
    线程
    异常
    Aspx Ajax 调用 C#函数处理数据
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/9483665.html
Copyright © 2020-2023  润新知