美文网首页
InnoDB 表空间(一)

InnoDB 表空间(一)

作者: wayyyy | 来源:发表于2021-08-19 00:25 被阅读0次
    MySQL 数据目录

    确定 MySQL 数据目录:

    > SHOW VARIABLES LIKE 'datadir';
      +---------------+-----------------+
      | Variable_name | Value           |
      +---------------+-----------------+
      | datadir       | /var/lib/mysql/ |
      +---------------+-----------------+
      1 row in set (0.00 sec)
    

    MySQL 系统数据库

    MySQL 还有几个系统数据库:

    • mysql
      存储了MySQL 的用户账户和权限信息,一些存储过程和事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息和时区信息。
    • information_schema
      保存MySQL服务器维护的所有其他数据库的元信息,比如哪些表,哪些视图,哪些触发器,哪些列和索引。
    • performance_schema
      主要保存MySQL服务器运行过程中的一些状态信息,主要作用用于对MySQL的性能监控。
    • sys
      差不多同上。

    表空间

    InnoDB 是使用页为基本单位来管理存储空间的。为了更好的管理这些页面,InnoDB 提出了 表空间 的概念。
    这个表空间是一个抽象的概念,它可以对应文件系统上一个或多个真实文件,每一个表空间可以被划分为很多个页,表数据就存放在某个表空间下的某些页中。主要有以下类型:

    • 系统表空间
      在默认情况下,InnoDB 会在数据目录下创建一个名为 ibdata1文件,这个文件就是对应的系统表空间在文件系统上的展示,它是自动扩展的。在 MySQL 5.5.7 ~ MySQL 5.6.5 之间的各个版本,表中的数据都会被默认存储到这个系统表空间中。
      系统表空间也支持我们自定义配置:

      [server]
      innodb_data_file_path=data1:512M;data2:512M:autoextend  # 表示创建data1 和 data2 各自512MB大小作为系统表空间,data2 支持自动扩展大小。
      
    • 独立表空间
      在 MySQL 5.6.6 之后,InnoDB 不再默认把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立的表空间。InnoDB 会在对应的数据库子目录中创建一个表名.frm的文件存储表结构, 在对应的数据库子目录中创建一个表名.ibd的文件存储数据。

      我们也可以自己决定使用系统表还是独立表空间,在配置文件中加入:

      [server]
      innodb_file_per_table=0  # 0 表示使用系统表空间,1表示使用独立表空间。
      

      该配置只针对新建的表,如果需要已经分配了的表可以使用命令迁移:

      ALTER TABLE 表名 TABLESPACE innodb_system  # 转移到系统表空间
      ALTER TABLE 表名 TABLESPACE innodb_file_per_table  # 转移到独立表空间
      
    • 其他类型表空间
      通用表空间,undo 表空间,临时表空间。


    相关文章

      网友评论

          本文标题:InnoDB 表空间(一)

          本文链接:https://www.haomeiwen.com/subject/rzgubltx.html