摘要: 从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. ORACLE 的前后台进程

    关于oracle用户进程,服务进程,后台进程 用户进程(User Process) 是一个需要与Oracle Server交互的程序 运行于客户端 当用户运行某个工具或应用程序(如SQL*Plus)时 ...

  2. Python--读取数据库

    原文地址:https://www.wukong.com/answer/6591280609824342286/?iid=40708017633&app=news_article&sha ...

  3. Django ORM 高性能查询优化

    一.QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Entry.objects.all( ...

  4. 『Python Web框架之Django』第几节: AJAX

    一. AJAX简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语言与服务器进行异步交互, ...

  5. AtCoder Grand Contest 040 B - Two Contests

    传送门 一看就感觉很贪心 考虑左端点最右的区间 $p$ 和右端点最左的区间 $q$ 如果 $p,q$ 属于同一个集合(设为 $S$,另一个集合设为 $T$),那么其他的区间不管是不是在 $S$ 都不会 ...

  6. mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】

    utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符.如果直接往采用utf-8编码的数据库中插入表情数据,Java程 ...

  7. (二)easyUI之消息提示框

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. Linux Centos7配置mysql8.0数据库

    本文转至:672530440 在此感谢博主,撒花!!! 本文主要从以下几个方面对自己在centos7 下安装mysql8过程做如下总结: CentOS7 安装mysql8 步骤: window下的Na ...

  9. Vue router link

    html: <router-link to="test">Go to Foo</router-link> <router-link to=" ...

  10. 什么?在SAP中国研究院里还需要会PHP开发?

    请原谅Jerry这篇文章的题目有"标题党"的嫌疑. 没错,至少SAP成都研究院的部分团队如此,比如Jerry目前就职的SAP成都研究院数字创新空间. 之前Jerry的文章, 曾经提 ...