개별 DB 복구(innoDB 기준)
- 현재 DB 위치 (/var/lib/mysql/사이트명)
e.g. /var/lib/mysql/example
1. mysql 접속 (mysql -uroot -p) 후, 삭제 처리
mysql> ALTER TABLE DB명.테이블명 DISCARD TABLESPACE;
e.g. ALTER TABLE example.posts DISCARD TABLESPACE;
!실행시, 디렉토리내 테이블명.ibd 파일 삭제처리 + 해당 DB테이블의 데이터도 전부 삭제처리됨
결과문 : Query OK, 0 rows affected (0.01 sec)
- 백업 DB 위치 (/db-data/fullbackup/백업일자/사이트명)
e.g. /db-data/fullbackup/20210416/example
2. 해당 백업 테이블 파일(ibd) 가져오기
cp /db-data/fullbackup/백업일자/사이트명/테이블명.ibd /var/lib/mysql/사이트명/테이블명.ibd
e.g. cp /db-data/fullbackup/20210416/example/posts.ibd /var/lib/mysql/example/posts.ibd
3. 소유자 변경(root > mysql) 개별
e.g. chown mysql:mysql posts.ibd
소유자 변경(root > mysql) 전체
e.g. chown -R mysql:mysql example/
!소유자를 변경하지 않으면, 접근 권한이 없어 missing 처리됨
4. mysql 접속 (mysql -uroot -p) 후, 로드하기
mysql> ALTER TABLE DB명.테이블명 IMPORT TABLESPACE;
e.g. ALTER TABLE example.posts IMPORT TABLESPACE;
결과문 : Query OK, 0 rows affected, 1 warning (0.08 sec)
5. 정상적으로 복구되었는지 DB 확인
* DISCARD 하지 않고, IMPORT하면 생기는 오류 문구 (이미 존재함)
(ERROR 1813 (HY000): Tablespace 'example/posts' exists.)
* 소유자 변경 하지 않으면 생기는 오류 문구 (접근 권한이 없어, 해당 ibd를 찾을 수 없음)
(ERROR 1812 (HY000): Tablespace is missing for table `example`.`posts`.)