상황
개발자, 관리자 실수로 인한 데이터 삭제시 전날 DB,Table 복원 필요 (Full 백업이용)
- 원리
Mysql 스키마 생성(.frm) 후 백업된 데이터 파일(.idb) 을 물리적으로 이동시켜 복원
( discard / import 이용)
- innodb 파일구조
mysql innodb 관리 운영상 innodb_file_per_tables=1(yes) 를 defalut 로 운영
이럴경우 각각의 테이블 마다 테이블 스페이스가 할당되는 구조 (file-per-table tablespace)
- 상황예시
전달 데이터를 복원해주세요
- 원리
discard / import
- 진행순서
- Full 백업 압축 파일 리스트 확인
- 해당 DB 파일 압축해제
- discard 명렁어로 테이블 스페이스만 유지
- ibd 파일 복사
- 권한 변경
- import 명렁어로 데이터 복원
- 해당 DB 파일 압축해제
[root@Fullbackup]# tar tvf Fullbackup.tar.gz
-rw-rw---- 0/0 131072 2022-05-31 05:35 abc/tb_abc_history.ibd
-rw-rw---- 0/0 114688 2022-09-14 09:07 abc/tb_xxxx_history.ibd
-rw-rw---- 0/0 294912 2024-01-09 03:06 abc/tb_xxxxd_history.ibd
- discard 명렁어로 테이블 스페이스만 유지
SELECT CONCAT('ALTER TABLE `', table_name, '` DISCARD TABLESPACE;')
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='abc'
ALTER TABLE `tb_abc_history` DISCARD TABLESPACE;
ALTER TABLE `tb_xxxx_history` DISCARD TABLESPACE;
ALTER TABLE `tb_xxx_history` DISCARD TABLESPACE;
- idb 파일복사
[root@abc]# cp *.ibd /DB/Data/abc_20240125/
[root@abc]# ls -lsh
128K -rw-r----- 1 root root 128K Jan 26 02:00 tb_abc_history.ibd
12K -rw-r----- 1 mysql dba 9.0K Jan 26 01:34 tb_abc_history.frm
16K -rw-r----- 1 mysql dba 14K Jan 26 01:34 tb_xxx_history.frm
112K -rw-r----- 1 root root 112K Jan 26 02:00 tb_xxx_history.ibd
176K -rw-r----- 1 root root 176K Jan 26 02:00 tb_xxxx_history.ibd
16K -rw-r----- 1 mysql dba 14K Jan 26 01:34 tb_xxxx_history.frm
- 소유자 변경후 idb파일 import
SELECT CONCAT('ALTER TABLE `', table_name, '` IMPORT TABLESPACE;')
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='abc'
ALTER TABLE `tb_abc_history` IMPORT TABLESPACE;
ALTER TABLE `tb_xxx_history` IMPORT TABLESPACE;
ALTER TABLE `tb_xxxd_history` IMPORT TABLESPACE;