1、查看表空间状态

mysql> SELECT CONCAT(ROUND(SUM(data_length)/(1024*1024), 2), ' MB') AS 'Total Data Size' FROM information_schema.TABLES;
mysql> SELECT CONCAT(ROUND(SUM(data_length)/(1024*1024*1024), 2), ' GB') AS 'Total Data Size' FROM information_schema.TABLES;  ----单位是GB

分别查看每个数据库表空间大小:

mysql> SELECT CONCAT(ROUND(SUM(data_length)/(1024*1024), 2), ' MB') AS 'Total Data Size' FROM information_schema.TABLES WHERE table_schema LIKE 'sys';   ----查看sys数据库大小单位是MB

2、查看数据库中所有表信息:

SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', 
   
 CONCAT(ROUND(table_rows/1000000,2),'M') AS 'Number of Rows', 
   
 CONCAT(ROUND(data_length/(1024*1024*1024),2),'G') AS 'Data Size', 
   
 CONCAT(ROUND(index_length/(1024*1024*1024),2),'G') AS 'Index Size' , 
   
 CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),2),'G')  
   
 AS'Total'FROM information_schema.TABLES  
   
 WHERE table_schema LIKE 'sys';

3、共享表空间和独立表空间

共享表空间:某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1(此文件,可以扩展成多个)。注意,在这种方式下,运维超级不方便。你看,所有数据都在一个文件里,要对单表维护,十分不方便。另外,你在做delete操作的时候,文件内会留下很多间隙,ibdata1文件不会自动收缩。换句话说,使用共享表空间来存储数据,会遭遇drop table之后,空间无法释放的问题。

独立表空间:每一个表都以独立方式来部署,每个表都有一个.frm表描述文件,还有一个.ibd文件。

.frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关。

.ibd文件:保存了每个表的数据和索引的文件。

注意,在这种方式下,每个表都有自已独立的表空间,这样运维起来方便,可以实现单表在不同数据库之间的移动。另外,在执行drop table操作的时候,是可以自动回收表空间。在执行delete操作后,可以通过执行alter table TableName engine=innodb语句来整理碎片,回收部分表空间。

4、判断数据库表空间是共享表空间还是独立表空间:show variables like '%per_table%';

mysql> show variables like '%per_table%';
 +-----------------------+-------+
 | Variable_name         | Value |
 +-----------------------+-------+
 | innodb_file_per_table | ON    |
 +-----------------------+-------+
 1 row in set (0.01 sec)mysql>

如果innodb_file_per_table的value值为OFF,代表采用的是共享表空间。

如果innodb_file_per_table的value值为ON ,代表采用的是独立表空间。

5、增减新的默认表空间文件

查看当前/etc/my.cnf配置文件中表空间:

innodb_data_file_path = ibdata1:10M:autoextend

修改该参数为:

innodb_data_file_path = ibdata1:10M:autoextend;ibdata2:10M:autoextend   ---- 默认表空间文件,就是在安装数据库后,自动生成的

启动时报错:[ERROR] InnoDB: syntax error in file path or size specified is less than 1 megabyte

修改配置为:

innodb_data_file_path = ibdata1:10M;ibdata2:10M:autoextend   ----- 后面的文件不管怎么加都不行,需要将第一个文件的autoextend属性去掉,否则就报错

再次启动数据库,也依然报错:[ERROR] InnoDB: The innodb_system data file './ibdata1' is of a different size 768 pages  ----错误提示:ibdata1数据文件size设置大小和系统不匹配!!

查看表空间数据文件的大小:

[root@mysql57 data]# ls -lh
 total 1.5G
 -rw-r-----. 1 mysql mysql   56 Aug 31 13:50 auto.cnf
 -rw-r-----. 1 mysql mysql  336 Aug 31 15:38 ib_buffer_pool
 -rw-r-----. 1 mysql mysql  12M Aug 31 15:38 ibdata1        -----实际大小为12M

重新修改配置文件配置参数:

innodb_data_file_path = ibdata1:12M;ibdata2:10M:autoextend

再次启动数据库,正常了

---对于已有的表空间数据文件的size,必须按照系统查看的size设置,否则报错!(亦可以将表空间建立在不同的目录下如:/data/ibdata3:10M,首先需建立/data目录)

查看数据库表空间:

mysql> show variables like '%innodb_data_file_path%';
 +-----------------------+------------------------------------+
 | Variable_name         | Value                              |
 +-----------------------+------------------------------------+
 | innodb_data_file_path | ibdata1:12M;ibdata2:10M:autoextend |
 +-----------------------+------------------------------------+
 1 row in set (0.01 sec)mysql>
 create tablespace tbs1  add datafile 'tbs01.ibd' engine=innodb;
create tablespace test01  add datafile 'ibdata2' engine=innodb;

6、建表语句:

A、create table classroom(id int(20) auto_increment primary key, name varchar(20) not null, cgirlnum int(16) not null, cboynum int(16) not null );

B、create table students(id int(20) auto_increment primary key, name varchar(20) not null, sex varchar(8), classroomid int(20) not null, foreign key(classroomid) references classroom(id));

7、数据插入

mysql> insert into classroom values("C++",2,10,20);
mysql> insert into classroom(name,cboynum,cgirlnum) select name,cboynum,cgirlnum from classroom;
mysql> insert into students values(12,"张三","我叫张三","女",20,"zhangs@163.com","石家庄","1597220988",3);
mysql> insert into students(name,content,sex,age,email,address,phone,classroomid) select name,content,sex,age,email,address,phone,classroomid from students;

8、创建数据库

mysql> create database xxx default charset=utf8;