기존에 있던 서버가 하드가 맛이 가면서 안에 있던 인증 내용이랑 웹서버 복구를 하게 되었다 -_-

다행이 하드가 아예 맛이 간건 아니고 일부 블록에 문제가 생기면서 커널 패닉이 발생하는 상황

원래 교체작업이 예정에 있었던 터라 부랴부랴 신규 서버를 셋팅하기로 했습니다.

우분투를 설치하고 아파치 셋팅 파일을 옮겨와서 설정 해주고 나니 남은건 디비 복구!

기존에 설치되어있던 mysql이 고스란히 있긴 한데 어어어어엄청 옛날 서버라서 그냥 데이터 파일을 가지고 복구를 진행해보기로 했습니다.


MySQL의 기본 데이터 저장소는 /var/lib/mysql 이며, 해당 디렉토리 내부에 데이터베이스 별로 디렉토리가 생성되어 있습니다.

해당 디렉토리 내부에 테이블 별로 frm및 ibd 파일이 존재하고 이 파일을 이용해서 복구를 하면되는데, mysqlfrm 커맨드로 frm 파일들을 조사해서 스키마 정보를 뽑아올 수 있습니다.

mysqlfrm커맨드는 기본 mysql패키지에는 포함 되어있지 않고, mysql-utilities 패키지를 설치해야 사용할 수 있습니다.



스키마 정보로 테이블을 생성 후, 테이블 스페이스를 폐기하고 기존의 ibd파일을 옮겨 다시 import하면 끝입니다.



$ sudo apt-get install mysql-utilities


$ sudo /var/lib/mysql/[Database]/*.frm > create_table.sql

$ mysql -r root -p


mysql> source create_table.sql;

mysql> alter table [Database].[Table] discard tablespace;

mysql> quit;


$ sudo cp /old_mysql/*.ibd /var/lib/mysql/[Database]

$ sudo chown mysql:mysql /var/lib/mysql/[Database]/*.ibd

$ mysql -u root -p


mysql> alter table [Database].[Table] import tablespace;



기존 row_format과 값이 다른 경우
ERROR 1808 (HY000): Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.)
라는 오류가 발생할 수 있습니다. 이럴 경우 테이블을 생성할 때 row_format=compact 값을 넣어주면 됩니다.


CREATE TABLE `table` (

  `no` bigint(20) NOT NULL AUTO_INCREMENT,

  `id` varchar(150) NOT NULL,

PRIMARY KEY `PRIMARY` (`no`)

) ENGINE=InnoDB row_format=compact;


+ Recent posts