메뉴 닫기

InnoDB 테이블 데이터 복원

InnoDB 테이블 데이터 복원

InnoDB mysql 데이터가 손상되어도 frm , ibd 파일이 존재하면 복구가 가능합니다.

Frm : 테이블의 테이블 구조를 보관

Ibd : 테이블의 데이터가 저장되어있는 파일

frm , ibd 파일을 이용한 테이블 복구를 알아보겠습니다.

1)현재 상태

행하기전 테이블 컬럼확인입니다. /data/Innodb_test2/에 들어있는 frm, ibd 파일을 볼수있습니다.

———– 해당 table data가 불러오지 못한다고 생각하고 복원진행하겠습니다.——

# systemctl stop mysql [작업전 mysql 구동 중지.]

# netstat -nltp [데몬이 내려갔는지 확인.]

2)Frm 파일 복원 (컬럼 축출)

새로운 테이블을 만들게 되면 frm , ibd 파일은 자동생성됩니다.

다른 databases 같은 이름으로 테이블 생성 하였습니다.

새로운 테이블 생성 시 구조를 잘모를 경우 대비해서 아래 명령어를 입력해주면 테이블 구조를 알수있습니다.

Frm 파일 복원은 두가지 방법이 있습니다.

방법 1) 아래 명어를 실행하여 테이블을 그대로 새로 만들어주는 방법입니다.

mysqlfrm –diagnostic /usr/local/mysql/data/Innodb_test2/profile.frm

/ 해당 내용으로 새로운 테이블 생성 . 

# systemctl start mysql [작업전 mysql 구동 .]

# netstat -nltp [데몬 실행 확인.]

 위에서 mysqlfrm –diagnostic 로 추출한 테이블 컬럼으로 다른 DB에 생성해줍니다.

mysql> use Innodb_test

Database changed

mysql> CREATE TABLE `profile` (

`_id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(64) NOT NULL,

`belong` varchar(24) DEFAULT NULL,

`phone` varchar(24) DEFAULT NULL RIMARY KEY `PRIMARY` (`_id’)) ENGINE=InnoDB;

방법2) Frm 파일이 살아있다면 축출하여 저장할수있습니다.

 

, 해당 frm 파일이 있으면 테이블 스키마가 남겨져있어 테이블 구조를 추출합니다. (이경우가 쉽다.)

#mysqlfrm –server=root:******@@localhost /usr/local/mysql/data/Innodb_test2/profile .frm –port=3011 –user=root > backup.sql [port 는 사용하지 않는 포트를 하나 정해주면됩니다.]

#mv /usr/local/mysql/data/Innodb_test2/backup.sql /usr/local/mysql/data/Innodb_test/profile.frm [frm 파일로 변형.]

#chown mysql:mysql /usr/local/mysql/data/Innodb_test/profile.frm

#chmod ??? /usr/local/mysql/data/Innodb_test/profile.frm

[이전 파일과 동일하게 변경해주면 됩니다. 여기에선 644 가 동일함으로 실행하진않았습니다.]

현재까지 Innodb_test에는 이전에만들어놓은 컬럼만 확인할수있고 data는 옮기지 않았기 때문에 확인 할 수 없습니다.

3)Ibd 파일 복사 및 수정.

cp -arp /usr/local/mysql/data/Innodb_test2/profile.ibd /usr/local/mysql/data/Innodb_test

[ibd 파일을 새로운 DB에 옮겨 줍니다.] cp,mv 둘다 사용해도 됩니다.

#mysql – u root -p

mysql> use Innodb_test2 [기존에 저장되어있던 DB로 선택해 줍니다.]

[이작업을 수행하면 ibd 파일은 삭제 됩니다. 꼭 작업전에 ibd파일을 새로운 DB로 옮겨주세요. ]

mysql> ALTER TABLE profile DISCARD TABLESPACE; [DBprofile 데이터 정보 연결을 끊어줍니다.]

mysql> desc profile; [컬럼은 조회가능합니다. frm파일이 있기때문에.조회가 안될수도 있지만 상관없습니다. 이미 이전 방법1, 2로 이전을 완료 하였기 때문입니다.]

mysql> SELECT * FROM profile;

[실행시 이미 ibd가 삭제되었기 때문에 데이터를 불러올수 없습니다.]

mysql> ALTER TABLE profile IMPORT TABLESPACE;

[IMPORT진행시 Warning이 나오면서 테이블 복구가 성공됩니다. 이내용은 기존에 있던 테이블 형상 정보가 담긴 메타데이터 정합성을 미리 확인하지 않고 파일을 불러오면 그럴수 있습니다. 만약 cfg 파일을 미리 구성해놓으면 정합성을 유지하면서 복가가능하나, 테이블 형상병동이 없고 , ibd 파일에서 메타 데이터를 추출할 필요가 없다면 상관없습니다. ] *메타데이터 : (테이블,칼럼,인덱스 등의 모든 스키마 정보,)

#ll 

확인시 

[기존 DB Innodb_test2 가 아닌Innodb_test로 잘 옮겨진 파일들을 볼수있습니다. ]

[데이터 파일도 잘읽히는것을 볼수있습니다.]

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x