摘要: 从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总是会触发表的重建, 也不支持修改数据目录
 
更具体的参考官方文档:

MySQL5.7.6 general tablespace的更多相关文章

  1. information_schema系列四(跟踪,列约束,表和列)

    这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益. 1:KEY_COLUMN_USAGE 按照官方的解释,这个表描述的是 ...

  2. MySQL ·InnoDB 文件系统之文件物理结构

    从上层的角度来看,InnoDB层的文件,除了redo日志外,基本上具有相当统一的结构,都是固定block大小,普遍使用的btree结构来管理数据.只是针对不同的block的应用场景会分配不同的页类型. ...

  3. INNODB存储引擎表空间

    这片文章主要是对innodb表空间的一些说明: innodb中表空间可以分为以下几种: 系统表空间 独立表空间 undo表空间 临时表空间(temporary tablespace) 通用表空间(ge ...

  4. Innodb-内存架构与特性

    参考文档 Innodb特性buffer_pool http://mysql.taobao.org/monthly/2017/05/01/?spm=a2c4e.11153940.blogcont2812 ...

  5. 创建INnodb的compress表

    需要将innodb_file_per_table=1 ,innodb_file_format=Barracuda;; 如: Creating a Compressed Table in a Gener ...

  6. MYSQL 5.7 新增150多个新功能

    http://www.thecompletelistoffeatures.com/ There are over 150 new features in MySQL 5.7. The MySQL ma ...

  7. InnoDB表优化

    InnoDB表存储优化 适时的使用 OPTIMIZE TABLE 语句来重组表,压缩浪费的表空间.这是在其它优化技术不可用的情况下最直接的方法. OPTIMIZE TABLE 语句通过拷贝表数据并重建 ...

  8. 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

    重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...

  9. MySQL 5.7 INFORMATION_SCHEMA 详解

    refman mysql 5.7 INFORMATION_SCHEMA提供了对数据库元数据的访问,MySQL服务器信息,如数据库或表的名称,列的数据类型,访问权限等. 有时也把这些信息叫做数据字典或系 ...

随机推荐

  1. LaTeX技巧96:LaTeX 图片控制命令,位置控制

    LaTeX技巧96:LaTeX 图片控制命令,位置控制 2012-04-05 17:25:44 zd0303 阅读数 28512更多 分类专栏: Latex   LaTeX 控制图片的位置,就是加感叹 ...

  2. 使用RabbitMQ实现分布式事务

    RabbitMQ解决分布式事务思路: 案例: 经典案例,以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯. Rab ...

  3. 数据库及MYSQL基础(3)-JDBC

    教学视频链接:https://edu.aliyun.com/course/1694?spm=5176.11400004.0.0.29254768sg2H5P 程序文件链接:https://pan.ba ...

  4. 利用贝叶斯算法实现手写体识别(Python)

    在开始介绍之前,先了解贝叶斯理论知识 https://www.cnblogs.com/zhoulujun/p/8893393.html 简单来说就是:贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯 ...

  5. Python练习_集合和深浅拷贝_day7

    1. 1.作业 1.把列表中所有姓周的人的信息删掉(升级题:此题有坑, 请慎重): lst = ['周老二', '周星星', '麻花藤', '周扒皮'] 结果: lst = ['麻花藤'] 2.车牌区 ...

  6. 补充:Python安装

    需要安装Python2.7.Numpy和Matplotlib.由于Python不支持向下兼容,因此在Python3.×下你一定能正常运行Python2.×的代码.上述模块最简单的安装方法就是用软件包安 ...

  7. class类 - extends

    继承是面向对象中一个比较核心的概念.ES6 class的继承与java的继承大同小异,如果学过java的小伙伴应该很容易理解,都是通过extends关键字继承.相较于ES5当中通过原型链继承要清晰和方 ...

  8. mongodb聚合查询-aggregate

    Mongodb-aggregate 在工作中经常遇到一些mongodb的聚合操作,和mysql对比起来,mongo存储的可以是复杂的类型,比如数组,字典等mysql不善于处理的文档型结构,但是mong ...

  9. redis缓存击穿和缓存雪崩

    工作中经常会用到redis来做缓存,以防止后台db挂掉.但是db数据一般都在10T以上,不可能把mysql中的数据全部放入redis中,所以一般是将一些热key放入redis中. 缓存击穿 一个请求先 ...

  10. 用js刷剑指offer(从尾到头打印链表)

    题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; this.next = nu ...