最近在考MySQL 8.0的OCP ,开个专题专门查漏补缺下

只是做备忘,有的概念只是一笔带过,具体可自行搜索

基于8.0.26

这期来介绍表空间,以下都为Innodb表空间,首先是系统表空间(System Tablespace)

1. 存储内容

只要有如下内容存放在系统表空间

  • change buffer
  • 存放在系统表空间里面的表和索引的数据(非file-per-table或没有存放在general tablespaces)

以前的版本还包含如下内容

  • InnoDB data dictionary(数据字典),即存放元数据的地方
  • doublewrite buffer (8.0.20之前)

2.数据文件

系统表空间可以包含一个或多个数据文件,默认情况下会在数据目录建一个ibdata1的文件作为数据文件,大小和个数由innodb_data_file_path 参数决定

2.1 扩容

可以使用如下方法对数据文件进行扩容

将数据文件设为自动扩展,注意autoextend只能放在最后一个数据文件后面,更改后需要重启数据库

每次自动扩展的大小由innodb_autoextend_increment 参数控制

innodb_data_file_path=ibdata1:10M:autoextend

也可以通过添加数据文件的方式扩容

  • 停止数据库
  • 修改参数,autoextend放到最后,第一个数据文件的大小设置成现有的大小,无需事先建立文件
修改之前:
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

修改之后:
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend
  • 开启数据库

2.2 缩容

由于系统表空间不会自动缩小,再删除数据后如果需要缩容,MySQL不支持直接减少大小,需要:

  • 逻辑备份数据库
  • 重新建个MySQL实例
  • 将数据导入进去

最后还支持使用裸设备进行扩容,命令如下

[mysqld] i
nnodb_data_home_dir= innodb_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:2Gnewraw

启动成功后需要将new关键字去掉,然后重启数据

[mysqld]
innodb_data_home_dir= innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw

3.参考连接

https://dev.mysql.com/doc/refman/5.6/en/innodb-system-tablespace.html