美文网首页
mysql可传输表空间

mysql可传输表空间

作者: supremecsp | 来源:发表于2021-06-30 18:01 被阅读0次

今天简单的记录下MySQL可传输表空间

复制一张表数据除了使用 mysqldump 命令将数据导出成一组 INSERT 语句和导出 CSV 文件方案外(逻辑拷贝),
在 MySQL 5.6 版本引入了可传输表空间(transportable tablespace) 的方法(物理拷贝),对大表的拷贝能极大减少拷贝时间。

首先安装两台mysql,我在同一台服务器使用docker安装
现目标是迁移源mysql的test库t表数据到目标mysql test库t表中
1,在源mysql中创建数据

mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
mysql> insert into t values(1);

在对应文件夹中可以看到数据文件
*.frm 表定义,是描述表结构的文件。
*.opt 记录数据库的选项,数据库的字符集设置
*.ibd 存储数据信息和索引信息


data

2,在目标mysql中创建数据并discard现有表空间,删除ibd文件

mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
mysql>ALTER TABLE t DISCARD TABLESPACE;

data

3,在源实例上,运行FLUSH TABLES ... FOR EXPORT以使表停顿并创建.cfg元数据文件:

mysql> FLUSH TABLES t FOR EXPORT;

data.png

4,将.ibd文件和.cfg元数据文件从源实例复制到目标实例

docker cp e1512368ee74:/var/lib/mysql/test/t.ibd /data
docker cp e1512368ee74:/var/lib/mysql/test/t.cfg /data
docker cp /data/t.cfg 5710663c649b:/var/lib/mysql/test/
docker cp /data/t.ibd 5710663c649b:/var/lib/mysql/test/

data

5.在源实例上,使用UNLOCK TABLES释放由FLUSH TABLES ... FOR EXPORT获取的锁

mysql> UNLOCK TABLES;

6.在目标实例上,更改权限并导入表空间:


ls

chown mysql:mysql t.cfg t.ibd
mysql> ALTER TABLE t IMPORT TABLESPACE;

7,验证目标实例是否同步数据


select

关于拷贝表的这个流程,有以下几个注意点:

在第 3 步执行完 flsuh table 命令之后,test.t 整个表处于只读状态,直到执行 unlock tables 命令后才释放读锁;
在执行 import tablespace 的时候,为了让文件里的表空间 id 和数据字典中的一致,会修改 t.ibd 的表空间 id。而这个表空间 id 存在于每一个数据页中。
因此,如果是一个很大的文件(比如 TB 级别),每个数据页都需要修改,所以你会看到这个 import 语句的执行是需要一些时间的。当然,如果是相比于逻辑导入的方法,import 语句的耗时是非常短的。

参考:
MySQL实战45讲-41章
https://www.cnblogs.com/abclife/p/11787591.html

相关文章

  • mysql可传输表空间

    今天简单的记录下MySQL可传输表空间 复制一张表数据除了使用 mysqldump 命令将数据导出成一组 INSE...

  • MySQL大表快速迁移复制(表空间迁移)

    MySQL(5.6.6及以上)支持表空间传输:表空间传输可以很方便的将一个表或者多个表,从一个数据库实例导入到另一...

  • MySQL InnoDB表空间加密

    从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 。此功能为物理表空间...

  • mysql表空间

    表空间是一种逻辑结构,它位于表和数据文件之间 1. System Tablespace SYSTEM表空间包含的...

  • MySQL表空间

    explain 分析执行效率(优化SQL语句) 1.全表扫描 2.索引扫描 Extra(扩展) Using te...

  • mysql 表空间收缩_MySQL 清除表空间碎片

    MySQL 清除表空间碎片的实例详解 碎片产生的原因 (1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会...

  • 自治区人民医院电子病历迁移方案

    1. 目的 传统的传输表空间方式要求数据第一次由远端到目标端传输时,表空间必须置于read only模式,从而生产...

  • MySql--InnoDB的表空间

    MySql--InnoDB的表空间 具体细节 请去掘金购买《MySQL 是怎样运行的:从根儿上理解 MySQL》 ...

  • MySQL 临时表

    临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。 使用PHP脚本来创建MySQL临时表...

  • mysql表占用空间

网友评论

      本文标题:mysql可传输表空间

      本文链接:https://www.haomeiwen.com/subject/ylbrultx.html