摘要: 从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. 四、poll()、select()和epoll()

    在用户程序中,poll()和select()系统调用用于对设备进行无阻塞访问.poll()和select()最终会调用设备驱动中的poll()函数,在我所使用的Linux内核中,还有扩展的poll() ...

  2. array_chunk — 将一个数组分割成多个

    说明 array_chunk ( array $array , int $size [, bool $preserve_keys = false ] ) : array 将一个数组分割成多个数组,其中 ...

  3. ggplot2|详解八大基本绘图要素

    本文首发于微信公众号 *“ 生信补给站 ” ,期待您的关注!!!* 原文链接:https://mp.weixin.qq.com/s?__biz=MzIyNDI1MzgzOQ==&mid=265 ...

  4. Mariadb/Mysql 主从复制(1)

    一.原理 mysql的主从数据同步是一个异步复制过程,需要master开启bin-log日志功能,bin-log记录了master库中的增.删.修改.更新操作的sql语句,整个过程需要开启3个线程,分 ...

  5. 面试经典算法:优先队列,最大堆,堆排序,左偏树Golang实现

    堆排序 使用优先队列-最小/最大堆可实现. 优先队列 优先队列是一种能完成以下任务的队列:插入一个数值,取出最小的数值(获取数值,并且删除).优先队列可以用二叉树来实现,我们称这种为二叉堆. 最小堆 ...

  6. 一次腾讯云centos服务器被入侵的处理

    昨天一大早,我还没到公司呢,就收到腾讯云安全中心发来的服务器异常登录告警,登录控制台一看,ip还是美国的,一脸懵逼.由于本人之前也没有过处理服务器入侵的经验,而且这台服务器目前还没有部署商用系统,所以 ...

  7. 内置函数----format

    说明: 1. 函数功能将一个数值进行格式化显示. 2. 如果参数format_spec未提供,则和调用str(value)效果相同,转换成字符串格式化. >>> format(3.1 ...

  8. MYSQL编码转换的问题latin1转utf8

    1.先导出 mysqldump --default-character-set=latin1 --create-options=false --set-charset=false  -u root - ...

  9. Keras 笔记

    1. 从 meta 模型恢复graph,   修改node  并保存 from __future__ import absolute_import from __future__ import div ...

  10. el-select 可选择可输入

    <el-select v-model="saveWardForm.wardCode" placeholder="" filterable @blur=&q ...