对于大表的迁移,如果使用mysqldump进行导出,然后重新导入到其它环境,速度是非常缓慢的。如果使用传输表空间,则可以解决这个问题。

测试使用传输表空间迁移表,基础环境如下:

  源库 目标库
IP地址 192.168.10.11 192.168.10.12
数据库版本 5.7.24 5.7.24
数据库名称 db1 db2
待迁移的表 test01  

(1)在目标库创建和源库相同的表test01

先在主库db1上查看表信息,并生成创建表的语句

mysql> select count(*) from test01;
+----------+
| count(*) |
+----------+
| 10000 |
+----------+
1 row in set (0.00 sec) mysql> show create table test01;
+--------+--------------------------------------------------------+
| Table | Create Table |
+--------+-------------------------------------------------------+
| test01 | CREATE TABLE `test01` (
`id1` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id1`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 |
+--------+-----------------------------------------------------+
1 row in set (0.00 sec)

在目标数据库db2上创建表test01

mysql> CREATE TABLE `test01` (
-> `id1` int(11) NOT NULL AUTO_INCREMENT,
-> `name` varchar(30) DEFAULT NULL,
-> PRIMARY KEY (`id1`)
-> ) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 ;
Query OK, 0 rows affected (0.00 sec)

(2)目标数据库db2上丢弃表空间

在丢弃表空间后,test01表的ibd文件会被删除

[root@slavedb db2]# pwd
/mysql/data/db2
[root@slavedb db2]# ls
db.opt test01.frm test01.ibd mysql> alter table test01 discard tablespace;
Query OK, 0 rows affected (0.01 sec) [root@slavedb db2]# ls
db.opt test01.frm

此时,test01表还在db2中,但是已经无法访问

mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| test01 |
+---------------+
1 row in set (0.00 sec) mysql> select * from test01;
ERROR 1814 (HY000): Tablespace has been discarded for table 'test01'

(3)导出源库db1上的test01表

先对表db1.test01加上读锁,此时,db1.test01可读,但是不可写

mysql> flush table test01 for export;
Query OK, 0 rows affected (0.00 sec)

执行完export后,会生成一个test01.cfg文件

[root@masterdb db1]# pwd
/mysql/data/db1
[root@masterdb db1]# ls -l
total 18472
-rw-r----- 1 mysql mysql 61 Feb 11 14:28 db.opt
-rw-r----- 1 mysql mysql 388 Feb 11 15:06 test01.cfg
-rw-r----- 1 mysql mysql 8588 Feb 11 14:29 test01.frm
-rw-r----- 1 mysql mysql 9437184 Feb 11 14:29 test01.ibd

将test01.ibd和test01.cfg文件拷贝到目标数据库db2的数据文件路径下

[root@masterdb db1]# scp test01.cfg test01.ibd root@192.168.10.12:/mysql/data/db2/
root@192.168.10.12's password:
test01.cfg 100% 388 324.4KB/s 00:00
test01.ibd 100% 9216KB 59.6MB/s 00:00

传输结束后,释放test01表的读锁

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

(4)修改目标数据库db2的test01.ibd和test01.cfg文件权限

[root@slavedb db2]# chown mysql:mysql test01.ibd test01.cfg
[root@slavedb db2]# ls -l
total 9236
-rw-r----- 1 mysql mysql 61 Feb 11 14:30 db.opt
-rw-r----- 1 mysql mysql 388 Feb 11 15:10 test01.cfg
-rw-r----- 1 mysql mysql 8588 Feb 11 14:58 test01.frm
-rw-r----- 1 mysql mysql 9437184 Feb 11 15:10 test01.ibd

(5)在db2上加载test01表

mysql> alter table test01 import tablespace;
Query OK, 0 rows affected (0.02 sec) mysql> select count(*) from test01;
+----------+
| count(*) |
+----------+
| 10000 |
+----------+
1 row in set (0.00 sec)

可以看到,test01表数据已经正常传输过来。

【完】

使用MySQL传输表空间迁移数据的更多相关文章

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

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

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

    实验环境: 源数据库:oracle 10g(Release 10.2.0.1.0) 目标数据库:oracle 10g(Release 10.2.0.1.0) 待传输的表空间:TEST 1.在tes ...

  3. mysql5.6之 传输表空间迁移表或恢复误删除的表

    一,简单说明: 1),传输表空间的限制:  1,mysql 版本 5.6.6 及其以上,并且版本建议源和目标版本建议都是GA版并且大版本一样  2,表引擎为innodb并且开启独立表空间  innod ...

  4. 如何通过RMAN使用传输表空间迁移到不同的Endian平台 (Doc ID 371556.1)

    How to Migrate to different Endian Platform Using Transportable Tablespaces With RMAN (Doc ID 371556 ...

  5. MySQL传输表空间使用方法

    1.目标端创建同样的表结构 CREATE TABLE `test` (       `id` int(11) DEFAULT NULL     ) ENGINE=InnoDB DEFAULT CHAR ...

  6. oracle操作之传输表空间

    一.传输表空间概述 什么是传输表空间,传输表空间技术始于oracle9i,不论是数据字典管理的表空间还是本地管理的表空间,都可以使用传输表空间技术:传输表空间不需要在源数据库和目标数据库之间具有同样的 ...

  7. [20170623]利用传输表空间恢复部分数据.txt

    [20170623]利用传输表空间恢复部分数据.txt --//昨天我测试使用传输表空间+dblink,上午补充测试发现表空间设置只读才能执行impdp导入原数据,这个也很好理解.--//这样的操作模 ...

  8. 转 Oracle Transportable TableSpace(TTS) 传输表空间 说明

    ############1   迁移数据库的集中方法 三.相关技术 迁移方式 优势 不足1 Export and import • 对数据库版本,以及系统平台没有要求 • 不支持并发,速度慢• 停机时 ...

  9. 【TTS】传输表空间AIX asm -> linux asm

    [TTS]传输表空间AIX asm -> linux asm 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌 ...

随机推荐

  1. 在远程服务器上执行本地的shell脚本

    在远程服务器上执行本地的shell脚本 [root@localhost zzx]# sh echoip.sh 192.168.67.131[root@localhost zzx]# ssh root@ ...

  2. 洛谷 三月月赛 B

    搞出每一位与前一位的差,然后区间修改只是会影响区间的端点,所以只修改一下端点的值就好. %%%高一神犇线段树 #include<bits/stdc++.h> #define N 10000 ...

  3. IDEA 分屏显示

    效果: 步骤: 对着某个标签页单击右键,选择Split Vertically或者Split Horizontally即可.

  4. Thread start0 启动分析 一图看懂

    参考文章: https://segmentfault.com/a/1190000017255007 https://segmentfault.com/a/1190000020194154 1.线程启动 ...

  5. 七十四、SAP中内表的4中删除方法

    一.代码如下 二.效果如下 *&---------------------------------------------------------------------* *& Re ...

  6. 深度解析高分Essay写作组成部分

    很多留学生在国外呆了好几个学期对于怎么写Essay还是不太了解,今天小编大致总结了以下一些技巧,相信同学们可以尝试着自己完成一篇Essay写作!一起来看看吧! 与你的导师沟通 你的导师对于你的Essa ...

  7. MongoDB 教程

    版权所有,未经许可,禁止转载 章节 MongoDB 入门 MongoDB 优势 MongoDB 安装 MongoDB 数据建模 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB ...

  8. Tornado中的Cookie设置

    Tornado中的cookie分为两种--普通cookie和安全cookie 普通cookie 1.创建cookie 原型 self.set_cookie(name, value, domain=No ...

  9. c++ opencv显示对话框

    IplImage *pl = cvLoadImage("e:\\3.bmp", 1); cvNamedWindow("123", 1); cvShowImage ...

  10. 知乎live - 三年从前端小工到架构

    王利华   刚毕业 在高德 携程 淘宝    0-3年如何发展 1 技能和能力的区别    css js 抽象     切勿好高骛远 要重视基础 2 人和人的差距是什么    注意个人品牌    提高 ...