文章目录

  • 第1章 基础环境和官方架构图
    • 1.1 我的实践环境
    • 1.2 官方的架构图
  • 第2章 系/独表空间的基本认识一
    • 2.1 系统表空间的认识
    • 2.2 独立表空间的认识

第1章 基础环境和官方架构图

1.1 我的实践环境

#### 特别说明
01:我的mysql实例的my.cnf配置文件中没有配置如下的参数innodb_data_file_path                      # 设置系统表空间大小和个数的参数innodb_autoextend_increment                # 设置系统表空间最后一个文件不够时每次自增多大innodb_file_per_table                      # 设置独立表空间的参数innodb_doublewrite                         # 是否开启双写的参数
02:然后才进行的mysql实例初始化mysqld --defaults-file=/data/mysql/3306/etc/my.cnf --basedir=/data/apps/mysql \--datadir=/data/mysql/3306/data --initialize    #### 我的mysql实例其它情况如下
mysql> select version();                       # 数据库的版本
+------------+
| version()  |
+------------+
| 5.7.28-log |
+------------+
1 row in set (0.00 sec)mysql> show databases;                          # 所有库(只是默认的库,我没有另外创建)
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)mysql> select @@global.default_storage_engine;  # 默认的引擎
+---------------------------------+
| @@global.default_storage_engine |
+---------------------------------+
| InnoDB                          |
+---------------------------------+
1 row in set (0.01 sec)

1.2 官方的架构图

官网地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-architecture.html 这里为什么把官网地址贴出来是因为MySQL的各个版本的架构是有所不同的。MySQL有六种表空间: 系统表空间(也叫共享表空间) 、独立表空间 、临时表空间 、undo表空间 、通用表空间、 传输表空间。本篇文章只是对系统表空间和独立表空间进行总结,下图中用红框标识的.

第2章 系/独表空间的基本认识一

2.1 系统表空间的认识

系统表空间(system tablespace)就是我们常说的共享表空间,系统表空间(在操作系统上体现就是ibdata文件)是我们在初始化mysql实例时生成的(在初始化mysql实例时会读取my.cnf中的innodb_data_file_path参数,然后初始出相应的文件ibdata1、ibdata2 …,至于文件多大,有多少个,看你my.cnf中的参数是怎样设置的)。mysql默认的系统表空间文件大小是12M,只有一个文件(ibdata1),它默认是保存到你mysql实例的datadir变量的目录下,它的的默认值如下所示:

#### 在mysql实例中查看共享表空间的大小
mysql> select @@global.innodb_data_file_path;
+--------------------------------+
| @@global.innodb_data_file_path |
+--------------------------------+
| ibdata1:12M:autoextend         |  # 共享表空间的文件是ibdata1,大小是12M
+--------------------------------+  # autoextend这里不进行说明
1 row in set (0.00 sec)  #### 在mysql的datadir变量所指定的目录下查看系统表空间文件
mysql> select @@global.datadir;
+------------------------+
| @@datadir              |
+------------------------+
| /data/mysql/3307/data/ |
+------------------------+
1 row in set (0.00 sec)#### 在操作系统下查看/data/mysql/3306/data目录下的文件
[root@node21 ~]# ls -ld /data/mysql/3306/data/
drwxr-xr-x 5 mysql mysql 4096 10月 14 14:36 /data/mysql/3306/data/
[root@node21 ~]#
[root@node21 ~]# tree -Lp 1 /data/mysql/3306/data/
/data/mysql/3306/data/
├── [-rw-r-----]  auto.cnf
├── [-rw-------]  ca-key.pem
├── [-rw-r--r--]  ca.pem
├── [-rw-r--r--]  client-cert.pem
├── [-rw-------]  client-key.pem
├── [-rw-r-----]  ib_buffer_pool
├── [-rw-r-----]  ibdata1             <== 系统表空间文件
├── [-rw-r-----]  ib_logfile0
├── [-rw-r-----]  ib_logfile1
├── [-rw-r-----]  ibtmp1
├── [drwxr-x---]  mysql
├── [drwxr-x---]  performance_schema
├── [-rw-------]  private_key.pem
├── [-rw-r--r--]  public_key.pem
├── [-rw-r--r--]  server-cert.pem
├── [-rw-------]  server-key.pem
├── [drwxr-x---]  sys
├── [-rw-r-----]  undo001
├── [-rw-r-----]  undo002
└── [-rw-r-----]  undo0033 directories, 17 files[root@node21 ~]# du -sh /data/mysql/3306/data/ibdata1   # 查看大小
12M /data/mysql/3306/data/ibdata1

当系统表空间不够用时(也就是ibdata1文件),它会自动扩展(autoextend),那么autoextend默认每次扩展多大呢?这个扩展不是说再重新生成一个文件ibdat2,而是在ibdata1的基础上进行扩展。

mysql> select @@innodb_autoextend_increment;
+-------------------------------+
| @@innodb_autoextend_increment |
+-------------------------------+
|                            64 |  # 每次自动扩展64M
+-------------------------------+
1 row in set (0.00 sec)

当扩展了一次后,又不够用时,又会在ibdat1文件的基础上再扩展64M,至于这个文件能够扩展到多大,默认是没有限制的,就看你的磁盘有多大了?

#### 系统表空间的默认默认是:ibdata1:12M:autoextend
那么ibdata1文件不够用时会自动在ibdata1文件的基础上进行每次64M的扩展,至于
ibdata1能够自动扩展到多大,是没有限制的,就看你的磁盘有多大空间。#### 假如我这样配置呢? ibdata1:12M:autoextend:max:20G  【生产不是这样配置的】
那么ibdata1文件不够用时会自动在ibdata1文件的基础上进行每次64M的扩展,最大能
够扩展到20G,因为max:20G就给限制了。

系统表空间是不能在线进行更改的(不能在线对相关参数的更改),只能在my.cnf中修改参数(修必时是有注意点的)后,然后重启mysql实例(在重启的过程中会对生成相应的文件)。但是生产中mysql是不能随便停止服务的。所以在我们安装部署mysql实例时就要考虑到这一点,我生产中对MySQL系统表空间的配置如下所示:

innodb_data_file_path=ibdata1:5G;ibdata2:5G;ibdata3:5G:autoextend:max:20G
innodb_autoextend_increment=64在初始化mysql实例时会先初始成三个ibdata文件,每个文件大小5G,当空间用到不够
时(也就到了ibdata3),会在ibdata3文件的基础上每次自增64M,最大自增到20G;

2.2 独立表空间的认识

从mysql 5.6.6版本开始,独立表空间(file-per-table tablespaces)默认是开启的(也就是innodb_file_per_table参数不设置时,它默认等于1),在开启的情况下,你创建一个innodb引擎的表,那么表有自己独立的一些数据文件。这些数据文件在操作系统上的文件体现如下所示:

表名.frm   # 表的表结构文件(里面存放的是表的创建语句)
表名.ibd   # 表的数据文件(当有数据往表中插入时,数据就保存之个文件中的)

独立表空间的好处:

01:表数据分开存放(不把所有鸡蛋放在1个蓝子里面);损坏1个文件不至于影响所有表
02:容易维护,查询速度快(IO分散)

我在生产会在my.cnf配置文件中开启"独立表空间",虽然独立表空间默认是开启的,但是我也会在my.cnf文件的的[mysqld]下进行设置,如下:

innodb_file_per_table=1

独立表空间是一个全局变量(不用考虑会话模式层面),它是可以在线进行全局更改的。
例如:set global inno_file_per_table=0; 这就是关闭独立表空间了。但不要这样做。
当关闭后,你新创建的innodb表没有.ibd文件,表中产生中的数据就保存到了系统表
空间中。所以这也是mysql监控时需要加上的一项。

MySQL系统表空间和独立表空间相关推荐

  1. mysql的Innodb的系统表空间和独立表空间

    mysql的Innodb的系统表空间和独立表空间 ============================================================= 主要区别 1:系统表空间无 ...

  2. MySQL 中的共享表空间与独立表空间如何选择

    对于 InnoDB 存储引擎来说,它可以将每张表存放于独立的表空间,即 tablename.ibd 文件;也可以将数据存放于 ibdata 的共享表空间,一般命名是 ibdataX,后面的 X 是一个 ...

  3. MySQL 中的共享表空间与独立表空间,用哪个好呢?

    作者 | 江南一点雨       责编 | 晋兆雨 1.独立表空间与共享表空间 2.该用哪一个? 2.1 独立表空间 2.2 共享表空间 3.迁移 好啦,那我们今天就开始学习 MySQL 中另外一个非 ...

  4. mysql 共享表空间、独立表空间

    1. 简介     Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间(部分数据).     共享表空间以及独立表空间都是针对数据的存储 ...

  5. innodb 共享表空间 转 独立表空间 详细说明

    关于 MySQL 中的 Innodb 引擎就不多说了, 毕竟除了MyISAM 之外, 它的应用最广泛. Innodb 存储数据有两种方式: 共享表空间 和 独立表空间. 顾名思义, 共享表空间 就是把 ...

  6. mysql创建独立表空间_InnoDB独立表空间

    在查看MySQL的数据库文件的时候会发现,MyISAM存储引擎类型的表会有三个文件,*.frm,*.MYD,*.MYI,但是InnoDB存储引擎的文件只有一个*.frm,原来是因为InnoDB没有开启 ...

  7. 【MySQL系统学习专栏】- 数据表操作 - 表定义选项 - 索引

    文章目录 前言 一.索引概述 (一)什么是索引 (二)索引优点 (三)索引缺点 二.索引类型及对应操作 (一)主键索引 (二)普通索引 (三)唯一索引 (四)全文索引 (五)多列索引(组合.复合.联合 ...

  8. Mysql 学习(七)独立表结构存储 二

    段的结构 上一节说过表空间分为各个段,每个段里面又是以区为单位,每个区则有64个页.区根据剩余存储空间分为:Free,FREE_FRAG,FULL_FRAG 三种类型,为了方便管理区,给每个区创建XD ...

  9. MySQL如何判别InnoDB表是独立表空间还是共享表空间

    InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file ...

最新文章

  1. OpenResty学习中的几个小例子汇总
  2. 程序员的十层楼(8~9层)
  3. linux后门查杀工具付费,查杀linux后门跑虚拟货币程序.md
  4. 操作系统(三十二)内存的基础常识
  5. C++虚函数和纯虚函数的区别
  6. Python保存最后N个元素
  7. Jedis使用java连接Redis
  8. access mysql mssql_ACCESS数据库自行转换成MSSQL数据库教程
  9. 苹果手机屏幕助手_苹果手机屏幕坏点测试
  10. 智能眼镜革命:从功能机到智能机,转折点临近
  11. requires INJECT_EVENTS permission
  12. Ubuntu-18.04安装
  13. 阿里云助力中小企业建站 在线免费自助建站成新用户首选
  14. mysql生产cdm文件_PowerDesigner 概念数据模型(CDM) 说明
  15. 硕士论文查重经验(省钱又高效地查重经验,本人亲测,觉得有用点个赞)
  16. 水安ABC考试多选练习题库(7)
  17. 软件质量与测试--第二周作业 WordCount
  18. JZ2440移植uboot
  19. 大数据开发之Hive篇17-Hive锁机制
  20. 听说这10道大数据面试题把 98% 的求职者拒之BAT大厂门外(附解题方法)

热门文章

  1. 高中计算机学科知识,《信息技术学科知识与教学能力》(高级中学)
  2. 激活层是每一层都有吗_济南最地道的5种美食,每一种都色香味俱全,来看看你都吃过吗?...
  3. Android删除系统自带软件对照表
  4. 高质量C/C++编程
  5. 终于找到了CSDN的收藏夹!
  6. Paper Reading - Model系列 - ShuffleNet Chanel Attention
  7. 第10节 三个败家子(10)——竞争上岗当太子
  8. Dubbo:搭建管理控制台(dubbo-admin)
  9. 社区驱动型交易所的力量与实践 |链捕手
  10. 动力电池系统介绍(五)——绝缘功能介绍