--source include/have_partition.inc --source include/have_innodb.inc --source include/have_s3.inc --source include/have_sequence.inc --source create_database.inc # # The purpose of this test is to show how to move an partition from an existing # InnoDB partitioned table (t1) to a partitioned table in S3 (archive) # # # We start by creating a partioned table in S3 with one existing partion p0 # CREATE TABLE p0 ( c1 int primary key, c2 int DEFAULT NULL ) ENGINE=InnoDB; insert into p0 select seq,seq from seq_1_to_99; alter table p0 engine=s3 , rename to archive PARTITION BY RANGE (c1) (PARTITION p0 VALUES LESS THAN (100)); show create table archive; # # Then we create the table t1 that contains multiple partitions. # Partition p1 is the one that we want to move to 'archive' # CREATE TABLE t1 ( c1 int primary key, c2 int DEFAULT NULL ) ENGINE=InnoDB PARTITION BY RANGE (c1) (PARTITION p1 VALUES LESS THAN (200), PARTITION p2 VALUES LESS THAN (300), PARTITION p3 VALUES LESS THAN (400)); insert into t1 select seq,seq from seq_100_to_399; # # Then it's time to do the real work. # # First we move partition p1 to a normal InnoDB table create table p1 like t1; alter table p1 remove partitioning; alter table t1 exchange partition p1 with table p1; alter table t1 drop partition p1; show create table p1; select count(*) from p1; # Then change the table engine to s3 and move it into archive alter table p1 engine=s3; alter table archive add partition (partition p1 values less than (200)); alter table archive exchange partition p1 with table p1; # p1 will be empty as this was the new partition that we just created select count(*) from p1; drop table p1; # # The p1 partition has now been moved from t1 to archive. Check the result # show create table t1; show create table archive; select count(*) from t1; select count(*) from archive; drop table t1,archive; # # clean up # --source drop_database.inc