개발자가 작업 중 실수로 운영중인 기관의 테이블을 날려먹어 복구가 필요하다는 이야기를 들었다.

 

그나마 다행히도 MariaDB의 데이터베이스는 안날린게 어디인가. 복구 해보도록 하자

[root@db DB_BACKUP]$ cd MARIADB/
[root@db MARIADB]$ ll -rhtk | grep 20250502 
-rw-r--r-- 1 root root 4.2M  5월  2 01:00 20250502_routines.sql
-rw-r--r-- 1 root root 1.5M  5월  2 01:00 20250502_scheme.sql
-rw-r--r-- 1 root root 3.6G  5월  2 01:05 20250502_data.sql

다행히도 DB 백업본은 잘 돌고 있었으나, 용량이 3.6G이다.

이런 생각보다 데이터가 많다.

3.6GB나 되는 그 많은 양에서 데이터를 어떻게 뽑을 것인가?

파일빼는것도 오래걸리고 재가공도 귀찮은데... 열어보자

파일 받는것도 오래걸렸고, 열리지도 않는다. 

압축본으로 데이터를 추출하면 내부 문자열이 깨질것이다.

 

그렇다면 그냥 VScode나 Eclipse 뭐 이런 툴로 열면 되는거 아니냐? 할수 있는데

이관할것도 아니고 그렇게 큰 공수는 들이고 싶지 않은걸.

 

간단하게 sed -n으로 파일을 뽑아보도록 하자.


일단 백업데이터를 vi로 열어보자.

여는대만 한세월이 걸린다. 한 10초 내외

문단의 끝을 확인해 보자

Ctrl + Alt + G
10473690 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
10473691
10473692 -- Dump completed on 2025-05-02  1:05:36

이야. 10,473,692줄이나 있는것을  확인 할수 있다.

 

다시 상단으로 가보자

gg
       1 -- MariaDB dump 10.19  Distrib 10.11.7-MariaDB, for linux-systemd (x86_64)
       2 --
       3 -- Host: localhost    Database: 나눙데이터
       4 -- ------------------------------------------------------
       5 -- Server version       10.11.7-MariaDB
       6
       7 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

 

여기서 복구에 필요한 데이터베이스 내 테이블명을 개발자에게 알려달라하자.

bdg_ebdg_cpl 라는 테이블이라고 한다.

그럼 조건은 다 충족 되었다. 복구할 DB백업본 파일도 있고, 복구가 필요한 테이블도 있다.

우리가 해야할건 테이블이 시작되는 첫줄과 끝나는 마지막 줄을 확보해야한다.

 

vi 20250502_data.sql 을 들어가서

:set nu 을 쳐주도록 하자.

 

2. 복구에 필요한 테이블명을 검색한다

/bdg_ebdg_cpl

자 처음시작하는 복구테이블은 2198546번째 줄이다.

해당 테이블은 2232835번째 줄에서 끝나는 것을 알수 있다.

 

3. DB백업본에서 해당 테이블 데이터만 추출하자.

sed -n '2198546, 2232835p' 20250502_data.sql > bdg_ebdg_cpl.sql
[root@db MARIADB]# ll -rhtl | grep bdg_ebdg_cpl.sql
-rw-r--r-- 1 root root 8.5M  5월  3 14:18 bdg_ebdg_cpl.sql

파일이 잘 뽑힌것을 볼수 있다

 

해당 데이터를 개발자에게 던져주자.

.

.

.

잘 복구 되었다고 한다. 끝

+ Recent posts