반응형

- 그림설명

* server 1

old.nct ( old partition table)

 

* server 2

backup.nct_tmp( new temp table)

backup.nct ( new partition table)

------------------------------------------------------------------

 

- source(백업) DB

root@localhost:(none) >FLUSH TABLES old.nct for export;
Query OK, 0 rows affected (12.634 sec)

 

★ source DB에 flush table lock 먼저 걸어서 cfg 파일이 생성된 상태에서 백업(복사) 진행, 해당 세션이 종료되지 않게 유지

root@server 1:>\!  ls -al /mariadb/DATA/old/nct*
drwx------  2 mysql mysql          4096 Jun 27 16:08.
drwxr-xr-x 11 mysql mysql          4096 Jun 27 13:11 ..
-rw-rw----  1 mysql mysql            67 Jun 23 14:33 db.opt
-rw-rw----  1 mysql mysql          4503 Jun 23 16:20 nct.frm
-rw-rw----  1 mysql mysql           356 Jun 23 16:20 nct.par
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202201.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202201.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202202.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202202.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202203.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202203.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202204.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202204.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202205.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202205.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202206.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202206.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202207.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202207.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202208.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202208.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202209.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202209.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202210.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202210.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202211.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202211.ibd
-rw-rw----  1 mysql mysql          1797 Jun 27 16:08 nct#P#P202212.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202212.ibd
-rw-rw----  1 mysql mysql          1794 Jun 27 16:08 nct#P#pmax.cfg
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#pmax.ibd

=> 유지 상태로 복사 진행
=> 완료되면 unlock table; 풀어줘야함 아니면 세션 아웃하면 됨

--------------------------------------------------------------------------------------------------------------------------------
★.백업할 파일을 복원할 DB 임시 경로로 복사 (ibd파일 과 cfg 파일 두 개다 복사 진행)

 

# 복원할 파일 임시 DB 경로 복사
root@server 1 # scp /mariadb/DATA/old/nct#P#P202201.cfg root@server2:/data2/temp/
root@server 1 # scp /mariadb/DATA/old/nct#P#P202201.ibd root@server2:/data2/temp/

... 그외 다른 파티션도 동일한 방법으로 전송


 
★ 주의사항 백업 시 lock(cfg파일 생성됨) 걸지 않은 상태에서 백업을 하면 second index을 삭제하지 않으면 import가 되지 않음

(pk까지 허용됨)---------------------------------------------------------

root@localhost:(none) > alter table test.nct_bak import tablespace;
ERROR 1815 (HY000): Internal error: Drop all secondary indexes before importing table test/nct_tmp when. cfg file is missing.
Warning (Code 1810): IO Read error: (2, No such file or directory) Error opening './test/nct_tmp.cfg', will attempt to import without schema verification
Error (Code 1815): Internal error: Drop all secondary indexes before importing table test/nct_tmp when .cfg file is missing.
Warning (Code 1816): ALTER TABLE '`test`.`nct_tmp`' IMPORT TABLESPACE failed with error 11 : 'Generic error'
Error (Code 1030): Got error 168 "Unknown (generic) error from engine" from storage engine InnoDB
root@localhost:(none) 12:59:16>
root@localhost:(none ) 12:59:16> drop index test. 인덱스명;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

- target(복원) DB
root@localhost:(none) > create database backup;
Query OK, 1 row affected (0.005 sec)

root@localhost:(none) >show databases;
+--------------------+
| Database           |
+--------------------+
| backup             |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

# 복원할 DB에 임시 일반 테이블과 파티션 테이블 생성
CREATE TABLE backup.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
 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);

 

CREATE TABLE backup.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);



# 임시 테이블 파티션 여부 삭제
root@localhost:(none) > alter table backup.nct_tmp remove partitioning;
Query OK, 0 rows affected (0.118 sec)              
 
# tablespace 삭제전 확인
root@localhost:(none) > \! ls -al /data1/backup;
drwx------  2 mysql mysql   4096  6월 28 10:15.
drwxr-xr-x 13 mysql mysql   4096  6월 28 10:12 ..
-rw-rw----  1 mysql mysql     61  6월 28 10:12 db.opt

-rw-rw----  1 mysql mysql          4503 Jun 23 16:20 nct.frm
-rw-rw----  1 mysql mysql           356 Jun 23 16:20 nct.par
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202201.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202202.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202203.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202204.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202205.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202206.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202207.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202208.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202209.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202210.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202211.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202212.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#pmax.ibd
-rw-rw----  1 mysql mysql   4553  6월 28 10:15 nct_tmp.frm
-rw-rw----  1 mysql mysql 163840  6월 28 10:15 nct_tmp.ibd

 

# tablespace 삭제
root@localhost:(none) > alter table backup.nct_tmp discard tablespace;
Query OK, 0 rows affected (0.007 sec)

 

# tablespace 삭제 확인
root@localhost:(none) > \! ls -al /data1/backup;
drwx------  2 mysql mysql 4096  6월 28 10:17.
drwxr-xr-x 13 mysql mysql 4096  6월 28 10:12 ..
-rw-rw----  1 mysql mysql   61  6월 28 10:12 db.opt

-rw-rw----  1 mysql mysql          4503 Jun 23 16:20 nct.frm
-rw-rw----  1 mysql mysql           356 Jun 23 16:20 nct.par
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202201.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202202.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202203.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202204.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202205.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202206.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202207.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202208.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202209.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202210.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202211.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#P202212.ibd
-rw-rw----  1 mysql mysql        180224 Jun 24 13:30 nct#P#pmax.ibd
-rw-rw----  1 mysql mysql 4553  6월 28 10:15 nct_tmp.frm

root@localhost:(none) 15:17:36>\q
Bye

 

# file move 및 rename

root@server 2 # mv /data2/temp/nct#P#P202201.cfg /data1/backup/nct_tmp.cfg
root@server 2 # mv /data2/temp/nct#P#P202201.ibd /data1/backup/nct_tmp.ibd

 

# 권한 변경( server 2)
root@server 2 # chown mysql:mysql /data1/backup/nct_tmp*

 

# tablepsace import
root@localhost:backup > alter table backup.nct_tmp import tablespace;
Query OK, 0 rows affected, 1 warning (0.609 sec)
 
# 파티션 테이블로 전환
root@localhost:backup > alter table backup.nct exchange partition P202201 with table backup.nct_bak;

# 그 뒤 파일은 이어서 진행
root@localhost:backup > alter table backup.nct_tmp discard tablespace;
root@localhost:backup >\! mv /data2/temp/nct#P#P202202.cfg /data1/backup/nct_tmp.cfg
root@localhost:backup >\! mv /data2/temp/nct#P#P202202.ibd /data1/backup/nct_tmp.ibd
root@localhost:backup >\! chown mysql:mysql /data1/backup/nct_tmp*
root@localhost:backup >alter table nct_tmp import tablespace;
root@localhost:backup >alter table backup.nct exchange partition P202202 with table nct_tmp;

root@localhost:backup > alter table backup.nct_tmp discard tablespace;
root@localhost:backup >\! mv /data2/temp/nct#P#P202203.cfg /data1/backup/nct_tmp.cfg
root@localhost:backup >\! mv /data2/temp/nct#P#P202203.ibd /data1/backup/nct_tmp.ibd
root@localhost:backup >\! chown mysql:mysql /data1/backup/nct_tmp*
root@localhost:backup >alter table nct_tmp import tablespace;
root@localhost:backup >alter table backup.nct exchange partition P202203 with table nct_tmp;

...

root@localhost:backup > alter table backup.nct_tmp discard tablespace;
root@localhost:backup >\! mv /data2/temp/nct#P#P202212.cfg /data1/backup/nct_tmp.cfg
root@localhost:backup >\! mv /data2/temp/nct#P#P202212.ibd /data1/backup/nct_tmp.ibd
root@localhost:backup >\! chown mysql:mysql /data1/backup/nct_tmp*
root@localhost:backup >alter table nct_tmp import tablespace;
root@localhost:backup >alter table backup.nct exchange partition P202212 with table nct_tmp;

 

 

완료

+ Recent posts