.sql 백업파일이 없는경우 복구는 참 난감하다. 구조를 잘 몰라서 2주간 고생했다.

 

서버에서 MariaDB나 Mysql을 삭제한 경우가 아니라면 다음을 시도해볼 수 있다. 

리눅스에서 진행

 

0. MariaDB 또는 Mysql 버전을 확인한다. (필수)

버전이 확인되지 않는 경우 3. 을 참고한다.

 

1. mysql 폴더 경로를 들어가 본다. mysql 폴더 경로는 다를수 있다.

$ cd /var/lib/mysql

 

2. mysql 폴더 경로에 있는 다음 파일 및 폴더를 백업한다.

ib_logfile0 , ib_logfile1, ibdata1, [복구하고자하는 데이터베이스 폴더]

 

3. [복구하고자하는 데이터베이스 폴더명] 으로 들어가보면, .frm파일과 .ibd파일을 볼 수 있다.

frm파일은 테이블의 구조(스키마)를 저장하는 파일이고, ibd는 실제 데이터(로우)가 들어간다.

frm파일에는 MariaDB 또는 Mysql 의 버전이 표시되는 경우가 있다.

mysqlfrm 도구나 dbsake를 이용하여 frm 파일을  읽어 보자. 필자는 dbsake를 이용했다.

 

 # dbsake 설치 (설치하면 디렉토리가 생성됨)

 $ curl -s  http://get.dbsake.net > dbsake 

 

 # dbsake 700 권한 부여

 $ chmod 700 dbsake

 

 # dbsake 버전 확인

 $ ./dbsake --version

 

4. MariaDB 또는 Mysql 를 삭제한 후 버전에 맞추어 재설치

(클린삭제, 삭제 판단은 본인에게 있다. [복구하고자하는 데이터베이스 폴더] 만 삭제해봐도 좋을 것 같음) 

 

5. mysql에 접속하여 복구하고자 했던 데이터베이스를 만든다.

 $ sudo mysql -uroot -p

 

 # 데이터베이스가 없는지 확인

 $ show databases; 

 

 # 데이터베이스 생성

 $ create database [데이터베이스명];

 

6. 백업해둔 frm파일을 이용해 테이블을 생성한다. 테이블을 생성하면 ibd가 신규로 생성된다.

frm파일을 하나의 .sql파일로 만들 수 있다. 

$ dbsake frmdump --type-codes [frm파일 경로/* ] > [SAVE_NAME].sql     (dbsake 디렉토리 경로에서 실행)

 

만들어진 .sql 파일로 테이블을 생성한 후 다음 명령어를 이용해 ibd(빈 데이터)와의 연동을 해제한다. (주의) 

$ sudo mysql -uroot -p

$ use [데이터베이스명];

$ ALTER TABLE table_name DISCARD TABLESPACE;   (테이블 하나씩)

 

7. 백업한 ibd파일을 새로 만들어진 [데이터베이스 폴더]에 복사붙여넣기한다.

 

8. 복사 붙여넣기한 ibd파일의 권한을 mysql로 바꿔줘야한다.

 # 폴더 통째로 mysql 권한부여

 $ chown -R mysql:mysql [폴더경로]

 

9. mysql에 접속하여 데이터들을 테이블 하나씩 연동한다. (끝)

$ ALTER TABLE table_name IMPORT TABLESPACE;

 

여기서 에러가 나는 경우는 mysql or mariadb 버전이 다른 경우다.

버전이 다르게 설치되면 위 방법이 안되는 경우가 있다. ibd,frm 연동방식이 다름으로 추정

 

 

질문

1.  ib_logfile0 , ib_logfile1, ibdata1 는 어디에 쓰나요?

데이터를 ibdata1과 ibd를 연관지어 저장하는 경우가 있다고 한다. (my.cnf..... xxxx.cnf의 방식에 따라 정해짐)

이 경우에는 위와 다른 복구를 해봐야한다.. 다만 매우 어려워보임.

해당 케이스의 경우,  ib_logfile0 와 ib_logfile1파일이 혹시 필요할 수 있으니 백업한 것임.

 

 

 

DB 는 자주 백업해 두자.

 

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

[MYSQL] 그룹별 카운트  (0) 2022.08.17
[MYSQL] 트리거 작성  (0) 2022.07.01
[MYSQL] 계정 생성 및 외부 접속 허용  (0) 2022.06.23
MYSQL DB 백업하기  (0) 2022.04.18
mariadb 완벽제거  (0) 2022.03.13
MYSQL sql_mode 세팅  (0) 2022.03.12

+ Recent posts