반응형

- 그림 설명

old.nct ( partition table)

new.nct_tmp ( table)

new.nct ( partition table)

 

- 같은 서버 내 DB(schema) 명만 변경

- 파티션 exchange 과정

old.nct -> new.nct_tmp -> new.nct

 

## 이관할 신규 데이터베이스 생성
root@localhost:(none) > create database new;
Query OK, 1 row affected (0.003 sec)

old partition table -> temp table -> new partition table


## tmp성 임시 테이블 생성
root@localhost:(none) >CREATE TABLE new.nct_tmp (
  `sid` int(11) NOT NULL,
  `read_dt` bigint(14) unsigned NOT NULL,
  `f1` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `test` varchar(20) DEFAULT NULL,
  `test1` int(12) DEFAULT NULL,
  PRIMARY KEY (`sid`,`read_dt`),
  KEY `INNN` (`f1`,`test`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Query OK, 0 rows affected (0.035 sec)

또는 (기존 파티션 테이블 생성 후 파티션 영역만 삭제해도 된다)
root@localhost:(none) > CREATE TABLE new.nct_tmp like old.nct;
Query OK, 0 rows affected (0.369 sec)

파티션 영역 삭제 하여 일반 테이블로 변경
root@localhost:(none) > alter table new.nct_tmp remove partitioning;
Query OK, 0 rows affected (0.107 sec) 

 


## 신규 DB에  nct 파티션 테이블 생성
CREATE TABLE new.nct (
  `sid` int(11) NOT NULL,
  `read_dt` bigint(14) unsigned NOT NULL,
  `f1` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `test` varchar(20) DEFAULT NULL,
  `test1` int(12) DEFAULT NULL,
  PRIMARY KEY (`sid`,`read_dt`),
  KEY `INNN` (`f1`,`test`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
 PARTITION BY RANGE (`read_dt`)
(PARTITION `P202201` VALUES LESS THAN (20220201000000) ENGINE = InnoDB,
 PARTITION `P202202` VALUES LESS THAN (20220301000000) ENGINE = InnoDB,
 PARTITION `P202203` VALUES LESS THAN (20220401000000) ENGINE = InnoDB,
 PARTITION `P202204` VALUES LESS THAN (20220501000000) ENGINE = InnoDB,
 PARTITION `P202205` VALUES LESS THAN (20220601000000) ENGINE = InnoDB,
 PARTITION `P202206` VALUES LESS THAN (20220701000000) ENGINE = InnoDB,
 PARTITION `P202207` VALUES LESS THAN (20220801000000) ENGINE = InnoDB,
 PARTITION `P202208` VALUES LESS THAN (20220901000000) ENGINE = InnoDB,
 PARTITION `P202209` VALUES LESS THAN (20221001000000) ENGINE = InnoDB,
 PARTITION `P202210` VALUES LESS THAN (20221101000000) ENGINE = InnoDB,
 PARTITION `P202211` VALUES LESS THAN (20221201000000) ENGINE = InnoDB,
 PARTITION `P202212` VALUES LESS THAN (20230101000000) ENGINE = InnoDB,
 PARTITION `pmax` VALUES LESS THAN MAXVALUE ENGINE = InnoDB);


## 파티션별 exchange
★★★ 동일한 작업을 할 경우 기존 파티션 테이블로 데이터가 원복이 된다
★★★ tmp성 일반 테이블 하나로 할 경우 다른 테이블과 중첩될 경우 기존 exchange 한 데이터가 날아감 신중하게 작업 또는 따로따로 일반 테이블 만들어서 진행

★★★ replication slave 서버내에서 exchagne 할 경우 stop slave 쳐놓고 진행 완료되면 start slave; 

★★★ partition table -> partition table 로 바로는 exchange 가 안된다.

 

- 파티션 exchange 과정

old.nct -> new.nct_tmp -> new.nct

 

root@localhost:(none) > alter table old.nct exchange partition P202201 with table new.nct_tmp;
Query OK, 0 rows affected (0.023 sec)
root@localhost:(none) >alter table new.nct exchange partition P202201 with table new.nct_tmp;
Query OK, 0 rows affected (0.358 sec)
........
root@localhost:(none) >alter table old.nct exchange partition P202202 with table new.nct_tmp;
Query OK, 0 rows affected (0.023 sec)
root@localhost:(none) >alter table new.nct exchange partition P202202 with table new.nct_tmp;
Query OK, 0 rows affected (0.358 sec)

+ Recent posts