반응형

파티션 테이블 유무에 따라 사용법이 나뉩니다.

 

 

1. Non 파티션 테이블 백업

 

- 대상 데이터베이스 : test

- 대상 테이블 : ZIPDB

 

a. FLASH TABLES 권한이 있는 계정으로 접속합니다. (어려우면 root 접속)

   

    MariaDB [TEST]> FLUSH TABLES test.ZIPDB FOR EXPORT;

    Query OK, 0 rows affected (0.013 sec)

 

b. 위의 명령어가 정상적으로 끝나면 기본 데이터 저장하는 곳에 파일 생성됩니다.

   (기본 yum 설치시 : /var/lib/mysql 이며 그 밑에 데이터베이스 명 폴더로 갑니다.)

   cd /var/lib/mysql/test

   ls -lsa를 수행하면 

 

 

  일반적으로 보이지 않는 zipdb.cfg 파일이 하나더 생성됨을 알 수 있습니다.

   ※ 현재 이상태는 백업을 위해 TABLE LOCK을 한 상태입니다.

 

c. 테이블 이동을 위한 복사 작업을 수행합니다

   cp /var/lib/mysql/test/zipdb.ibd /tmp

   cp /var/lib/mysql/test/zipdb.cfg /tmp

 

d. 복사가 정상적으로 끝나면 TABLE LOCK을 풀어줍니다.

  MariaDB [TEST]> UNLOCK TABLES;
  Query OK, 0 rows affected (0.019 sec)

 

위의 작업을 마치면 정상적으로 해당 테이블을 백업 받은 상태입니다.

 

2. Non 파티션 테이블 복구하기

복구할 Database로 2개의 파일(zipdb.ibd, zipdb.cfg)을 복사합니다.

복사시에는 같은 망인 경우 scp를 사용하면 편리합니다.

(scp /tmp/zipdb.* root@대상hostIP:/tmp)

 

a. 먼저 테이블 생성 구문을 동일하게 수행합니다.   

CREATE TABLE `zipdb` (
`ZONE_NO` VARCHAR(5) NOT NULL COMMENT '구역번호(우편번호)',
`CTPRVN` VARCHAR(20) NULL DEFAULT NULL COMMENT '시도',
`CTPRVN_ENG` VARCHAR(40) NULL DEFAULT NULL COMMENT '시도영문',
`SIGNGU` VARCHAR(20) NULL DEFAULT NULL COMMENT '시군구',
`SIGNGU_ENG` VARCHAR(40) NULL DEFAULT NULL COMMENT '시군구영문',
`EUP_MYEON` VARCHAR(20) NULL DEFAULT NULL COMMENT '읍면',
`EUP_MYEON_ENG` VARCHAR(40) NULL DEFAULT NULL COMMENT '읍면영문',
`RN_CODE` VARCHAR(12) NULL DEFAULT NULL COMMENT '도로명코드',
`RN` VARCHAR(80) NULL DEFAULT NULL COMMENT '도로명',
`RN_ENG` VARCHAR(80) NULL DEFAULT NULL COMMENT '도로명영문',
`UNDGRND_AT` VARCHAR(1) NULL DEFAULT NULL COMMENT '지하여부(0:지상, 1:지하)',
`BDNBR_MNNM` INT(5) NULL DEFAULT NULL COMMENT '건물번호본번',
`BDNBR_DUCA` INT(5) NULL DEFAULT NULL COMMENT '건물번호부번',
`BULD_MANAGE_NO` VARCHAR(25) NULL DEFAULT NULL COMMENT '건물관리번호',
`MUCH_DLVR_OFFIC_NM` VARCHAR(40) NULL DEFAULT NULL COMMENT '다량배달처명(null)',
`SIGNGU_BDNBR_NM` VARCHAR(200) NULL DEFAULT NULL COMMENT '시군구용건물명',
`LEGALDONG_CODE` VARCHAR(10) NULL DEFAULT NULL COMMENT '법정동코드',
`LEGALDONG_NM` VARCHAR(20) NULL DEFAULT NULL COMMENT '법정동명',
`LI_NM` VARCHAR(20) NULL DEFAULT NULL COMMENT '리명',
`ADSTRD_NM` VARCHAR(40) NULL DEFAULT NULL COMMENT '행정동명',
`MNTN_AT` VARCHAR(1) NULL DEFAULT NULL COMMENT '산여부(0:토지, 1:산)',
`LNM_MNNM` INT(4) NULL DEFAULT NULL COMMENT '지번본번',
`EMD_SN` VARCHAR(2) NULL DEFAULT NULL COMMENT '읍면동일련번호',
`LNM_DUCA` INT(4) NULL DEFAULT NULL COMMENT '지번부번',
`OLD_ZIP` VARCHAR(6) NULL DEFAULT NULL COMMENT '구 우편번호(null)',
`ZIP_SN` VARCHAR(3) NULL DEFAULT NULL COMMENT '우편번호일련번호(null)', INDEX `ZIPDB_IX1` (`ZONE_NO`), INDEX `ZIPDB_IX2` (`CTPRVN`, `SIGNGU`, `EUP_MYEON`), INDEX `ZIPDB_IX3` (`RN_CODE`), INDEX `ZIPDB_IX4` (`RN`)
) COLLATE='utf8_general_ci' ENGINE=InnoDB
;

b. 생성후에는 ALTER TABLE ... DISCARD TABLESPACE 명령을 사용하여 새로운 테이블의 테이블스페이스를 폐기합니다.

MariaDB [TEST]> ALTER TABLE test.zipdb DISCARD TABLESPACE;

c. ibd 파일과 cfg 파일을 데이터베이스 (test) 폴더에 붙여 넣습니다.

복구할 서버 데이터베이스 저장 위치 : /var/lib/mysql/test

 

# cp /tmp/zipdb.* /var/lib/mysql/test/

 

root 권한으로 복사시에는 아래의 퍼미션을 부여합니다.

# chown -R mysql:mysql /var/lib/mysql/test/zipdb.*

 

.ibd 파일 만으로도 테이블 스페이스로 파일을 가지고 올 수 있습니다.   

(.cfg 파일은 테이블 스페이스 정보 가지고 있음)

 

d. 다음 명령을 사용하여 새 테이블에 데이터를 가지고 옵니다.

 

MariaDB [(none)]> ALTER TABLE test.zipdb IMPORT TABLESPACE;

퍼미션이 맞지 않는 경우 다음의 에러가 발생

ERROR 1030 (HY000): Got error 194 "Tablespace is missing for a table" from storage engine InnoDB

 

 

e. 복구 결과

   정상적으로 모든 데이터 건수가 일치하는 것을 알 수 있습니다.

 

파티셔닝 복구 방식

https://mariadb.com/kb/en/library/innodb-file-per-table-tablespaces/

 

InnoDB File-Per-Table Tablespaces

InnoDB file-per-table tablespaces: what they are, where they're located, how to copy them, and other details.

mariadb.com

 

반응형

'Database > MYSQL' 카테고리의 다른 글

MariaDB connect 설치  (0) 2019.11.07
MariaDB JSON 컬럼 및 함수들  (0) 2019.11.04
MariaDB 우편번호 Import 하기  (0) 2019.11.01
MariaDB SHA2 512 방식으로 암호화 예제  (0) 2019.10.25
Mysql & MariaDB 튜닝 쉘  (0) 2019.08.14

+ Recent posts