摘要: 从5.7.6开始,增加了一种新的 tablespace模式(成为general tablespace),实际上它和共享表空间比较类似:创建一个单独的ibd,ibd中包含多个表,兼容不同的格式。general tablespace没有库的概念,因此可以在多个库里建属于同一tablespace的表。

从5.7.6开始,增加了一种新的 tablespace模式(成为general tablespace),实际上它和共享表空间比较类似:创建一个单独的ibd,ibd中包含多个表,兼容不同的格式。general tablespace没有库的概念,因此可以在多个库里建属于同一tablespace的表。
为了支持这TABLESPACE,主要做了两部分改动:Innodb层的支持,及Server层对MDL子模块的改动。
下面我们逐一从如何使用,及具体实现的角度来介绍这一新特性
 
创建tablespace
 
语法如下:
CREATE TABLESPACE tablespace_name
ADD DATAFILE 'file_name'
[FILE_BLOCK_SIZE = value]
[ENGINE [=] engine_name]
 
例如:
CREATE TABLESPACE myspace ADD DATAFILE ‘zwx.ibd’ FILE_BLOCK_SIZE=8192 ENGINE=INNODB;
 
file_name需要指定一个ibd后缀的文件,可以是相对路径,也可以是绝对路径,默认在data目录下
FILE_BLOCK_SIZE默认为innodb page size的大小(16kb),当你指定一个值时,例如8192,意味着你需要使用这个表空间来存储压缩表。否则就会报错:
root@sb1 09:22:19>CREATE TABLE t1 (a INT) TABLESPACE=myspace;
ERROR 1478 (HY000): InnoDB: Tablespace `myspace` uses block size 8192 and cannot contain a table with physical page size 16384
root@sb1 09:22:23>CREATE TABLE t1 (a INT) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE = 4 TABLESPACE=myspace;
ERROR 1478 (HY000): InnoDB: Tablespace `myspace` uses block size 8192 and cannot contain a table with physical page size 4096
root@sb1 09:23:15>CREATE TABLE t1 (a INT) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE = 8 TABLESPACE=myspace;
Query OK, 0 rows affected (0.00 sec)
 
将一个已经存在的表导入到指定tablespace中:
root@sb1 09:33:01>create table t2 (a int) key_block_size=8;
Query OK, 0 rows affected (0.00 sec)
 
root@sb1 09:33:08>alter table t2 tablespace=myspace;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
 
从一个general tablespace迁移到系统表空间
root@sb1 09:35:12>CREATE TABLESPACE myspace2 ADD DATAFILE ‘zwx2.ibd’ ENGINE=INNODB;
Query OK, 0 rows affected (0.00 sec)
root@sb1 09:36:42>CREATE TABLE t2(a INT);
Query OK, 0 rows affected (0.00 sec)
 
root@sb1 09:36:43>ALTER TABLE t2 TABLESPACE=myspace2;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
 
root@sb1 09:37:25>ALTER TABLE t2 TABLESPACE=innodb_system;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
 
从tablespace中再移除到独立表空间:
root@sb1 09:37:31>ALTER TABLE t2 TABLESPACE=innodb_file_per_table;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
 
你可以从INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES表中找到你定义的table space及表
Note:
1. tablespace_name是大小写敏感的,不允许出现’/‘或者innodb_前缀的命名
2. 不支持临时tablespace,也不支持在其中创建临时表
3.在DROP TABLESPACE之前,需要先手动删光里面的表
4.属于tablespace中的表,不支持alter table…import/discard tablespace
5.ALTER TABLE…TABLESPACE总是会触发表的重建, 也不支持修改数据目录
 
更具体的参考官方文档:

最新文章

  1. Linux系统安装
  2. hdu 1258 Sum It Up(dfs+去重)
  3. 使用spring配置quartz定时器
  4. js里cookie操作
  5. 挂载光盘与rpm安装
  6. z-score
  7. Windows窗体透明效果
  8. 2.熟悉Java基本类库系列——Java IO 类库
  9. OC 动态类型和静态类型
  10. SnackbarUtilDemo【Snackbar的封装类】
  11. springboot集成springsession利用redis来实现session共享
  12. caffe arm
  13. 使用Holer远程桌面登录家里电脑和公司内网电脑
  14. SHELL脚本之awk妙用
  15. [转]Haproxy 1.5.0 正式发布,Web 负载均衡
  16. 使用SpringBoot的yml文件配置时踩的一个坑
  17. webUploader上传视频,包括上传进度、上传状态、暂停和取消等
  18. 05 Go 1.5 Release Notes
  19. 【ArcGIS for Android】经纬度坐标、地图投影坐标、屏幕坐标互相转换
  20. VSM(Virtual Storage Manager) add new osd 代码分析

热门文章

  1. VUE创建项目
  2. 深度剖析Kubernetes API Server三部曲 - part 1
  3. 剑指offer(9)——用两个栈实现队列
  4. 区间第k大问题 权值线段树 hdu 5249
  5. java 文件上传 下载 总结
  6. mysql 添加省市编码表
  7. Python练习_函数进阶_day10
  8. 决心学HTML 第一晚
  9. 十年阿里顶级架构师教你怎么使用Java来搭建微服务
  10. js判断img是否存在