MYSQL备份恢复知识:第二章:数据文件

关系型数据库的文件结构大同小异,基本上都是由数据文件(表空间)和日志组成。MySQL在初始化时会在与执行文件相同的目录下创建一个DATA目录,存储数据库运行所需的数据。表空间的默认路径也在DATA目录中。数据库中使用DATADIR参数指定数据存储路径,
在这里插入图片描述

DATA路径下数据如图所示,它包括:
在这里插入图片描述

文件名称描述
binlog.xxxxxxBINARY日志;
db01目录数据库db01的数据目录;
db02目录数据库db02的数据目录;
ibdatax系统表空间;
ibtmpx临时表空间;
#innodb_redoREDO日志目录;
#innodb_tempsession临时目录;
#ib_xxxxx_x.dblwr双写日志;
mysql目录系统库mysql数据;
sys目录系统库sys数据;
performance_schema目录系统库performance_schema数据;
undo_xxxUNDO表空间文件;
mysql.ibdINNODB元数据表空间;

所有的文件结构,可以通过配置文件来设置。配置文件默认保存在/etc/my.cnf中,如果保存在其它位置,在启动数据库时要指定路径。

1 系统表空间

系统表空间是与Change Buffer关联的一个存储区域,它也可以用于存储表数据和索引数据。系统表空间对应一个或多个数据文件。默认情况下,系统表空间有一个数据文件,存储路径在DATA目录中,文件名为ibdata1。文件名和文件大小可通过参数设置,它是静态参数,需要在my.cnf配置文件中指定,不可在数据库运行中修改。例如,配置两个文件,分别为12M,自动扩展,

$ cat /etc/my.cnf
innodb-data-file-path = ibdata1:12M;ibdata2:12M:autoextend

2 单表文件

单表文件是指使用INNODB引擎时,每个表单独使用一个表空间文件,这是默认选项。可通过修改innodb_file_per_table参数来设置是否使用。该参数是动态,可随时设置。如果设置为永远生效,需要在my.cnf文件里设置。
当innodb_file_per_table状态为on时,创建表的同时会默认在DATA路径的数据库子目录创建表空间文件。例如:

mysql> use db01;
mysql> create table tb01 (c1 int, c2 varchar(32));

创建表时,自动生成DATA/db01/tb01.ibd文件。
如果希望使用DATA路径以外的存储,

mysql> create table tb02 (c1 int, c2 varchar(32)) data directory = '/mysql/mysql-server/dfiles';

创建表时,自动在data directory指定的路径下生成db01/tb02.ibd

如果nnodb_file_per_table状态为off,相同的语法创建表,会自动使用系统表空间。

相比通用表空间(也可称为共享表空间),单表文件的优势在于:
• 当表被Truncate或Drop后,文件占用存储空间自动被回收。
• 可以按照需要在指定的存储设备上创建表空间文件,提升性能,便于管理。
• 避免由于单个文件损坏导致多个表数据受损
• 未使用的空间只能被表内使用,会造成资源浪费
• 在执行多表的写入时,需要更多的FSYNC调用来操作多个数据文件,消耗更多的资源。同样,MYSQLD进程也需要多个HANDLE来维护多个数据文件。

3 通用表空间

通用表空间是一个共享的InnoDB表空间,使用CREATE TABLESPACE语法创建。

• 与系统表空间类似,通用表空间可共享,保存多个表的数据。
• 相比单表文件表空间,通用表空间消耗更少的内存资源。
• 通用表空间可以存储在DATA路径中,也可以存储在DATA路径以外的位置,利用外部存储的性能或高可用优势。
创建通用表空间TS01,数据文件为DATA/ts01.ibd,

mysql> create tablespace ts01 add datafile 'ts01.ibd' engine=innodb;

创建通用表空间TS01,数据文件保存在外部路径中,

mysql> create tablespace ts01 add datafile '/mysql/mysql-server/dfiles/ts01.ibd' engine=innodb;

静态参数,修改my.cnf

mysql> show variables like 'innodb_directories';
innodb_directories = "/mysql/mysql-server/dfiles;/disk1/dfiles"

4 临时表空间

InnoDB使用session和global临时表空间。Global临时表空间配置至少一个文件,
Session临时表空间为每一个连接分配一个表空间文件。
Global临时表空间默认分配一个文件,为DATA/ibtmp1,可以通过参数进行修改。例如,配置2个文件并自动扩展:

innodb_temp_data_file_path= ibtmp1:12M;ibtmp2:12M:autoextend

用户创建连接时,系统自动从临时表空间池中分配一个文件。一个Session最多可分配两个临时表空间文件,一个用于用户临时表,另外一个用于优化器创建内部临时表。当session断开后,临时表空间被truncate,并返回表空间池。当数据库启动时,系统自动在表空间池中创建10个文件,并且按照需要自动扩展。文件默认保存在DATA/#innodb_temp路径中,从temp_1.ibt到temp_10.ibt。保存路径可通过innodb_temp_tablespaces_dir参数自定义。

CSDN视频课程:

https://edu.csdn.net/lecturer/8135?spm=1002.2001.3001.4144
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值