MySQL5.7传输表空间——迁移分区表

Mysql 传输表空间--将InnoDB分区表复制到另一个实例(二)

实验环境:(都是mysql5.7)

源库:192.168.2.200      mysql5.7.16    zhangdb下的emp_2分区表的

目标库:192.168.2.100    mysql5.7.18    test下  (将zhangdb的emp表,导入到目标库的test schema下)

--:在源数据库中创建测试分区表emp_2,然后导入数据

MySQL [zhangdb]> CREATE TABLE emp_2(

id BIGINT unsigned NOT NULL AUTO_INCREMENT,

x VARCHAR(500) NOT NULL,

y VARCHAR(500) NOT NULL,

PRIMARY KEY(id)

)

PARTITION BY RANGE COLUMNS(id)

(

PARTITION p1 VALUES LESS THAN (1000),

PARTITION p2 VALUES LESS THAN (2000),

PARTITION p3 VALUES LESS THAN (3000)

);

(接着创建存储过程,导入测试数据)

DELIMITER //

CREATE PROCEDURE insert_batch()

begin

DECLARE num INT;

SET num=1;

WHILE num < 3000 DO

IF (num%10000=0) THEN

COMMIT;

END IF;

INSERT INTO emp_2 VALUES(NULL, REPEAT('X', 500), REPEAT('Y', 500));

SET num=num+1;

END WHILE;

COMMIT;

END //

DELIMITER ;

mysql> select TABLE_NAME,PARTITION_NAME from information_schema.partitions where table_schema='zhangdb';

+------------+----------------+

| TABLE_NAME | PARTITION_NAME |

+------------+----------------+

| emp        | NULL           |

| emp_2      | p1             |

| emp_2      | p2             |

| emp_2      | p3             |

+------------+----------------+

4 rows in set (0.00 sec)

mysql> select count(*) from emp_2 partition (p1);

+----------+

| count(*) |

+----------+

|      999 |

+----------+

1 row in set (0.00 sec)

mysql> select count(*) from emp_2 partition (p2);

+----------+

| count(*) |

+----------+

|     1000 |

+----------+

1 row in set (0.00 sec)

mysql> select count(*) from emp_2 partition (p3);

+----------+

| count(*) |

+----------+

|     1000 |

+----------+

1 row in set (0.00 sec)

从上面可以看出,emp_2分区表已经创建完成,并且有3个子分区,每个分区都有一点数据。

--:在目标数据库中,创建emp_2表的结构,不要数据(要在源库,使用show create table emp_2\G 的方法 查看创建该表的sql)

MySQL [test]> CREATE TABLE `emp_2` (

`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

`x` varchar(500) NOT NULL,

`y` varchar(500) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3000 DEFAULT CHARSET=utf8mb4

/*!50500 PARTITION BY RANGE  COLUMNS(id)

(PARTITION p1 VALUES LESS THAN (1000) ENGINE = InnoDB,

PARTITION p2 VALUES LESS THAN (2000) ENGINE = InnoDB,

PARTITION p3 VALUES LESS THAN (3000) ENGINE = InnoDB) */ ;

[[email protected] test]# ll

-rw-r----- 1 mysql mysql 98304 May 25 15:58 emp_2#P#p0.ibd

-rw-r----- 1 mysql mysql 98304 May 25 15:58 emp_2#P#p1.ibd

-rw-r----- 1 mysql mysql 98304 May 25 15:58 emp_2#P#p2.ibd

注意:

※约束条件、字符集等等也必须一致,建议使用show create table t1; 来获取创建表的SQL,否则在新服务器上导入表空间的时候会提示1808错误。

--:在目标数据库上,丢弃分区表的表空间

MySQL [test]> alter table emp_2 discard tablespace;

Query OK, 0 rows affected (0.12 sec)

[[email protected] test]# ll    ---这时候在看,刚才的3个分区的idb文件都没有了

-rw-r----- 1 mysql mysql  8604 May 25 04:14 emp_2.frm

--:在源数据库上运行FLUSH TABLES … FOR EXPORT 锁定表并生成.cfg元数据文件,最后将cfg和ibd文件传输到目标数据库中

mysql> flush tables emp_2 for export;

Query OK, 0 rows affected (0.00 sec)

[[email protected] zhangdb]# scp emp_2* [email protected]:/mysql/data/test/   --将文件cp到目标数据库

mysql> unlock tables;   ---最后将表的锁是否

--:在目标数据库中对文件授权,然后导入表空间查看数据是否完整可用

[[email protected] test]# chown mysql.mysql emp_2#*

MySQL [test]> alter table emp_2 import tablespace;

Query OK, 0 rows affected (0.96 sec)

MySQL [test]> select count(*) from emp_2;

+----------+

| count(*) |

+----------+

|     2999 |

+----------+

1 row in set (0.63 sec)

从上面的查看得知,分区表都已经导入到目标数据库中了,

另外,也可以将部分子分区导入到目标数据库中,(往往整个分区表会很大,可用只将需要用到的子分区导入到目标数据库中),

将部分子分区导入到目标数据库的方法是:

1、在创建目标表的时候,只需要创建要导入的分区即可,如: 只创建了p2 p3两个分区

CREATE TABLE `emp_2` (

`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

`x` varchar(500) NOT NULL,

`y` varchar(500) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3000 DEFAULT CHARSET=utf8mb4

/*!50500 PARTITION BY RANGE  COLUMNS(id)

(

PARTITION p2 VALUES LESS THAN (2000) ENGINE = InnoDB,

PARTITION p3 VALUES LESS THAN (3000) ENGINE = InnoDB) */

2、从源库cp到目标库的文件,当然也就是这俩的,就不需要其他分区的了,

3、其他的操作方法都一样了。

原文地址:http://blog.51cto.com/fengfeng688/2149492

时间: 2024-10-29 14:04:53

MySQL5.7传输表空间——迁移分区表的相关文章

mysql 5.6 使用传输表空间迁移表或恢复误删除的表

mysql 5.6 使用传输表空间迁移表或恢复误删除的表 http://blog.csdn.net/lidan3959/article/details/25152623 以前在网上也看过一些对5.6传输表空间的介绍,不过都写的不够具体详细,今天有空就具体操作了一把,并详细记录了一下算留个档 一,简单说明:1),传输表空间的限制:   1,mysql 版本 5.6.6 及其以上,并且版本建议源和目标版本建议都是GA版并且大版本一样   2,表引擎为innodb并且开启独立表空间  innodb_f

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

一,简单说明: 1),传输表空间的限制:  1,mysql 版本 5.6.6 及其以上,并且版本建议源和目标版本建议都是GA版并且大版本一样  2,表引擎为innodb并且开启独立表空间  innodb_file_per_table  3,处于导出状态的表只允许读也即是"read_only"状态  4,DISCARD TABLESPACE不支持分区表[5.6.17才支持] 并且当表上具有外键关系的时候需要将 foreign_key_check设置为0  5,源和目标实例的page si

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

How to Migrate to different Endian Platform Using Transportable Tablespaces With RMAN (Doc ID 371556.1) APPLIES TO: Oracle Database - Enterprise Edition - Version 12.1.0.2 to 12.2.0.1 [Release 12.1 to 12.2]Oracle Database - Enterprise Edition - Versi

Oracle传输表空间迁移数据库

本文是通过exp/imp方式实现,需要将数据库表空间处于只读模式,对于实时应用的生产数据库,可以采用rman方式进行传输表空间.   执行表空间传输有以下限制条件:    (1)源数据库和目标数据库必须处于相同的平台,10g以后可以用RMAN命令修改数据文件实现跨平台移动表空间.    (2)对于源数据库和目标数据库版本不同时,源数据库的版本必须低于目标数据库.    (3)两边数据库字符集和国家字符集必须一致.    (4)目标数据库不能存在同名的表空间. 1. 查询oracle支持的平台转换

使用传输表空间迁移数据

一.检查是否满足传输表空间的条件1.检查源库与目标库的平台支持 源库: SQL> select d.name,i.version,d.platform_name,endian_format from v$transportable_platform tp,v$database d,v$instance i 2 where tp.PLATFORM_NAME=d.platform_name; NAME VERSION PLATFORM_NAME ENDIAN_FORMAT --------- ---

利用10g传输表空间实现AIX平台到LINUX平台数据迁移

在 oracle10g 之前,数据文件是不能跨平台传输使用的,从oracle 10g 开始,oracle支持跨平台表空间传输(transport tablespace). 数据文件 不能跨平台的原因是:不同平台操作系统的字.字节存储顺序不同 如果将 4567 这个数据存储到不同的系统中,那么就会出现如下的顺序: little-endian:存储的顺序是7654 , 小数在前 (windows平台,LINUX平台) big-endian:   存储的顺序是 4567 ,大数在前  (solaris

Oracle网络公开课《请搭载我们的雷霆战机进行跨平台的数据迁移-可传输表空间》

雷霆战机是最近火热的空战射击游戏,刘老师说:请搭载我们的雷霆战机进行跨平台的数据迁移-可传输表空间,还犹豫什么,请立即登机,开启无尽挑战模式! 可以使用可传输表空间功能将表空间的集合从一个数据库拷贝到另一个数据库. 可传输表示空间在很多场景下都很有用: ■导出和导入数据仓库表的分区 ■在CD上发布结构化的数据 ■在多个数据库上拷贝表空间的多个只读 ■归档历史数据 ■执行表空间时间点恢复(TSPITR)Table Space point in time recovery 传输表空间有2种方法: ■

可传输表空间

oracle2271 对于可传输表空间有一个重要概念:自包含(Self-Contained). 在表空间传输的中,要求表空间集为自包含的,自包含表示用于传输的内部表空间集没有引用指向外部表空间集.自包含分为两种:一般自包含表空间集和完全(严格)自包含表空间集. 常见的以下情况是违反自包含原则的:  索引在内部表空间集,而表在外部表空间集(相反地,如果表在内部表空间集,而索引在外部表空间集,则不违反自包含原则).  分区表一部分区在内部表空间集,一部分在外部表空间集(对于分区表,要么全部包含在

【TTS】传输表空间AIX asm -&gt; linux asm

[TTS]传输表空间AIX asm -> linux asm 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 异构平台下传输表空间的实施 ② 传输表空间基于表空间的read only和rman2种方式 ③ 平台字节序.自包含概念 ④ expdp/impdp的应用     Tips:        ① 若文章代码格式有错乱,推荐使用搜狗或3