说明:MySQL(5.6.6及以上),innodb_file_per_table开启。

1.1. 操作步骤:

0. 目标服务器创建相同表结构
1. 目的服务器: ALTER TABLE t DISCARD TABLESPACE;
2. 源服务器 : FLUSH TABLES t FOR EXPORT;
3. 从源服务器上 拷贝t.ibd, t.cfg文件到目的服务器
4. 源服务器: UNLOCK TABLES;
5. 目的服务器: ALTER TABLE t IMPORT TABLESPACE;

1.2. 演示
将多实例的 [mysql5711] 中 burn_test 库下的test_purge表 ,传输到 [mysql57112]中 burn_test2 库下的test_purge表

1.2.1. 准备工作

1. 在 目标服务器 上创建表空间

-- 源服务器 [mysql5711]

mysql> select * from burn_test.test_purge;
+----+------+
| a | b |
+----+------+
| 1 | 10 |
| 3 | 30 |
| 4 | 40 |
| 5 | 50 |
| 6 | 60 |
| 7 | 70 |
| 8 | 80 |
| 10 | 100 |
+----+------+
8 rows in set (0.01 sec)

-- 目标服务器 [mysql57112]
--
-- test_purge在 目标服务器 上不存在,先创建该表
mysql> CREATE TABLE `test_purge` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`a`),
UNIQUE KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.16 sec)

2. 创建完成后进行检查
#
# 目标服务器
#
[root@MyServer burn_test_2]> ll | grep test_purge
-rw-r-----. 1 mysql mysql 8578 Mar 21 10:31 test_purge.frm # 表结构
-rw-r-----. 1 mysql mysql 57344 Mar 21 10:31 test_purge.ibd # 表空间,需要通过 DISCARD 将表空间文件删除
ALTER TABLE test_purge DISCARD TABLESPACE; 的含义是 保留test_purge.frm 文件, 删除test_purge.ibd

3. 通辟 discard 删除ibd文件

-- 目标服务器

mysql> alter table test_purge discard tablespace;
Query OK, 0 rows affected (0.04 sec)
mysql> show tables;
+-----------------------+
| Tables_in_burn_test_2 |
+-----------------------+
| test_backup1 |
| test_purge |
+-----------------------+
2 rows in set (0.00 sec)
mysql> select * from test_purge;
ERROR 1814 (HY000): Tablespace has been discarded for table 'test_purge'
[root@MyServer burn_test_2]> ll | grep test_purge
-rw-r-----. 1 mysql mysql 8578 Mar 21 10:31 test_purge.frm

1.2.2. 导出表空间
1. 在源服务器上,通辟 export 命令导出表空间(同时加读锁)

-- 源服务器

mysql> flush table test_purge for export; -- 其实是对这个表加一个读锁
Query OK, 0 rows affected (0.00 sec)
2. 将导出的 cfg文件 和 ibd文件 , 拷贝到目标服务器 的数据库下
#
# 源服务器
#
[root@MyServer burn_test]> ll | grep test_purge
-rw-r-----. 1 mysql mysql 462 Mar 21 10:58 test_purge.cfg # export后,多出来的文件,里面保存了一些元数据信息
-rw-r-----. 1 mysql mysql 8578 Mar 4 15:41 test_purge.frm
-rw-r-----. 1 mysql mysql 57344 Mar 5 15:28 test_purge.ibd
[root@MyServer burn_test]> cp test_purge.cfg test_purge.ibd /data/mysql_data/5.7.11_2/burn_test_2/ # 拷贝表空间和cfg文件,远程请使用scp(本地多实例演示,这里的库名是不同的)
3. 导出表空间后,尽快解锁

-- 源服务器

mysql> unlock tables; -- 尽快的解锁
Query OK, 0 rows affected (0.00 sec)
注意:一定要先拷贝cfg和ibd文件,然后才能unlock,因为 unlock 的时候, cfg文件会被删除
# 源服务器上的日志
[Note] InnoDB: Stopping purge # 其实stop purge,找个测试的表 for export 即可
[Note] InnoDB: Writing table metadata to './burn_test/test_purge.cfg'
[Note] InnoDB: Table `burn_test`.`test_purge` flushed to disk
[Note] InnoDB: Deleting the meta-data file './burn_test/test_purge.cfg' # unlock table后,该文件自动被删除
[Note] InnoDB: Resuming purge # unlock后,恢复purge线程
4. 在目标服务器上 修改 cfg文件和ibd文件的 权限
#
# 目标服务器
#
[root@MyServer burn_test_2]> chown mysql.mysql test_purge.cfg test_purge.ibd
5. 在目标服务器上通辟 import 命令导入表空间
-- 目标服务器
--
mysql> alter table test_purge import tablespace; -- 导入表空间
Query OK, 0 rows affected (0.24 sec)
mysql> select * from test_purge; -- 可以读取到从源服务器拷贝过来的数据
+----+------+
| a | b |
+----+------+
| 1 | 10 |
| 3 | 30 |
| 4 | 40 |
| 5 | 50 |
| 6 | 60 |
| 7 | 70 |
| 8 | 80 |
| 10 | 100 |
+----+------+
8 rows in set (0.00 sec)

# error.log中出现的信息
InnoDB: Importing tablespace for table 'burn_test/test_purge' that was exported from host 'MyServer'

注意:
表的名称必须相同 ,经过上述测试,库名可以不同
该方法也可以用于分区表的备份和恢复

mysql之 表空间传输的更多相关文章

  1. MySQL 表空间传输

    聊到MySQL数据迁移的话题,表空间传输时一个很实用的方法. 在MySQL 5.6 Oracle引入了一个可移动表空间的特征(复制的表空间到另一个服务器)和Percona Server采用部分备份,这 ...

  2. Innodb 表空间传输迁移数据

    在mysql5.5之前,mysql实例中innodb引擎表的迁移是个头疼的问题,要么使用mysqldump导出,要么使用物理备份的方法,但是在mysql5.6之后的版本中,可以使用一个新特性,方便地迁 ...

  3. mysql 案例 ~ 表空间迁移数据与数据导入

    一  简介:mysql5.6+的表空间传输二 目的:复制数据到另一个表三 步骤   1 create table b like a ->创建一个空表   2 alter table b disc ...

  4. Oracle表空间传输测试

    源数据库平台:window 7 64bit Oracle 11g 64bit目标数据库平台:RHEL6 64bit Oracle 11g 64bit 1.查看数据集 select * from nls ...

  5. Oracle11gR2导入导出实战之表空间传输

    Oracle11gR2导入导出实战之使用Datapump进行表空间传输 表空间检查 [oracle@localhost database]$ ps -ef|grep smon oracle 8981 ...

  6. MySQL的表空间管理

    表空间: MySQL没有真正意义上的表空间管理. MySQL的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间. 一般来说,当数据量很小的时候建议使用共享表空间的管理方式. ...

  7. mysql通过表空间来恢复或者传递数据

    mysql的备份工具通常有 mysqldump ,mysqlpump(5.7后新特性)等备份工具,这里我们可以尝试使用表空间进行传递 方式是:拷贝数据文件+拷贝表空间   对应innodb引擎就是 i ...

  8. 谈谈什么是MySQL的表空间?

    今天我要跟你分享的话题是:"大家常说的表空间到底是什么?究竟什么又是数据表?" 这其实是一个概念性的知识点,当作拓展知识.涉及到的概念大家了解一下就好,涉及的参数,留个印象就好. ...

  9. mysql表空间传输(ERROR 1808) row_format设置

    文章结构如下: 从MYSQL5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者机器上.迁移的时候很方便,尤其是大表. 由于本次达到测试使用版本5.6.38传到5.7 ...

随机推荐

  1. 组队项目——黄金点(叶雨&王浩)

    代码来源:自己编写 运行环境:win10 编译软件:VC++6.0 使用语言:C语言 功能:可多次运行,由用户决定退出与否,可以记录玩家的姓名与分数并显示. BUG:暂未发现 GitHub地址:htt ...

  2. Java基础学习-Collection

    package Collection; import java.util.ArrayList; import java.util.Scanner; /*集合类的特点: * 大小可变 * * Array ...

  3. Codex Delphi Expert

    https://www.delphiworlds.com/codex/?tdsourcetag=s_pcqq_aiomsg Codex是什么? 是一个可以安装到Delphi IDE中的专家 有助于提高 ...

  4. 爬虫系列2:scrapy项目入门案例分析

    本文从一个基础案例入手,较为详细的分析了scrapy项目的建设过程(在官方文档的基础上做了调整).主要内容如下: 0.准备工作 1.scrapy项目结构 2.编写spider 3.编写item.py ...

  5. scrapy-CrawlSpider的rules使用规则

    1.allow设置规则的方法:要能够限制在我们想要的url上面.不要跟其他的url产生相同的正则表达式即可: 2.什么情况下使用follow:如果在爬取页面的时候,需要将满足当前条件的url再进行跟进 ...

  6. sql 按字段指定值排序

    这个需要在排序语句中使用条件判断 例如:表[Table_temp]中列[col1]为字符,属性为varchar(10),排序时需要按照B.A.C的顺序显示,则可按照以下SQL语句: select * ...

  7. 2017ICPC北京赛区网络赛 Minimum(数学+线段树)

    描述 You are given a list of integers a0, a1, …, a2^k-1. You need to support two types of queries: 1. ...

  8. 堆&栈

    Java内存分为两种:堆内存和栈内存. 一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间.堆内存用于存放由new创建的对象和 ...

  9. 2.21 JS处理滚动条

    2.21 JS处理滚动条 前言    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了.常见场景:当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到 ...

  10. ECONOMETRICS CHAPTER2

    ♣回归函数/条件期望函数 Regression Function 前面已说过,回归分析是研究一个因变量对解释变量的依赖关系,将这种关系表示为函数形式就是回归函数,说明因变量的均值是如何随着解释变量的变 ...