实现mysql的innodb表引擎的分区操作

时间:2022-09-24 10:16:52

  对于mysql的innodb的分区,我们首先要先了解一下innodb的数据结构,而且要了解一下什么是独立表空间和共享表空间

  独立表空间:每一张表都会生成独立的文件来进行存储,每一张表都有一个.frm表描述文件,和一个.ibd文件。其中ibd文件包括了单独一个表的数据内容和索引内容。

  共享表空间:某一个数据库的所有表的数据和索引文件都放在一个文件下,默认的文件是.ibdata1文件,初始值是10M,默认是存放在数据文件的根目录下(mysql/var)。

  innodb默认是共享表空间结构的,也就是说一个数据库的所有的表的数据结构和索引都存放在一个文件下,这样就会有一个问题,当我们需要对其中的一张表进行分区操作时,就无法在物理层面上对这张表的数据进行分割,也就不能对它进行分区操作。

  要对innodb进行分区操作,我们就要设置innodb的表空间为独立表空间,修改配置文件 ,在/etc/my.cnf文件中设置innodb_file_per_table=1即可

实现mysql的innodb表引擎的分区操作

  在修改之前,我们先来看下默认的innodb的文件结构是怎样的,首先创建一个innodb的表

CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我们到/usr/local/mysql/var/下查看一下

实现mysql的innodb表引擎的分区操作

我们发现在var下多了一个ibdata1的文件,它就存放着所有的表额数据和索引

实现mysql的innodb表引擎的分区操作

我们到test文件下,发现只有一个.frm的表结构文件,这就说明了innodb是默认共享表空间结构的

下面,修改配置文件,重启mysqld,创建一个新的innodb的数据库,再来查看一下

create table t2(id int)engine innodb;
create table t3(id int)engine innodb;

我们创建2个新的innodb数据表,来查看一下

实现mysql的innodb表引擎的分区操作

我们发现t2和t3表中多了一个.ibd文件这里面就存放着innodb的表数据和索引文件,这样才能够在innodb实现分区

create table t4(
id int
)engine innodb
partition by hash(id)
partitions 4;

创建一个t4的分区表,来查看一个该表的文件结构

实现mysql的innodb表引擎的分区操作

我们可以发现t4表已经实现的分区,分成了4个分区,至此,innodb已经可以实现分区