MySQL系统表空间和独立表空间 您所在的位置:网站首页 MySQL缺少表空间是什么意思 MySQL系统表空间和独立表空间

MySQL系统表空间和独立表空间

2024-06-16 00:17| 来源: 网络整理| 查看: 265

文章目录 第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表空间 、通用表空间、 传输表空间。本篇文章只是对系统表空间和独立表空间进行总结,下图中用红框标识的. 1

第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 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监控时需要加上的一项。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有