最近在考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](https://dev.mysql.com/doc/refman/5.6/en/innodb-system-tablespace.html)