- 그림 설명
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)
'DBMS > MySQL&Mariadb' 카테고리의 다른 글
mariadb HA 구성도별 설명 (0) | 2022.07.11 |
---|---|
mariadb partition table 다른 서버로 partition 이관(복원) (0) | 2022.07.11 |
mariadb,mysql partition table 조회 (0) | 2022.06.16 |
replication 깨질때 skip 방법 (0) | 2022.06.16 |
procedure, function 목록 조회 (0) | 2022.06.16 |