내가 sql 테이블을 수정하다가 잘못하고 drop 코드를 같이 돌려버렸다....
DB 구축했는데 확인해보니 empty set이라고 썼을 때의 그 가슴 두근거림이란...
잊을 수 없지만 금방 복구가 가능한 일이다
핵심 원인: DROP TABLE IF EXISTS
sql
복사편집
DROP TABLE IF EXISTS question;
DROP TABLE IF EXISTS book;
DROP TABLE IF EXISTS user;
- 이 구문은 테이블이 존재하면 완전히 삭제
- 테이블 구조 + 안에 들어있던 모든 데이터도 삭제됨.
- 이후
CREATE TABLE로 재생성되긴 했지만, 데이터는 다시 insert 하지 않으면 없음.
요약
| 단계 | 결과 |
|---|
DROP TABLE | 기존의 데이터 전부 삭제됨.... |
CREATE TABLE | 빈 테이블이 다시 만들어짐 |
| 외래키 재설정 | 구조는 완벽해졌지만 데이터는 없음 |
| 복구 시도 | 백업 없으면 불가능, 재수집만 가능 |
대응 방법
| 항목 | 대응 방법 |
|---|
| 도서 데이터 | POST /api/books/import 호출로 재수집 |
| 질문, 사용자 데이터 | 백업 없으면 수동 입력하거나 seed 파일 만들어야 함 |
| 해결방안 | DROP TABLE 실행 전엔 mysqldump 필수 |
배운 점...
mysqldump -u root -p qnb_database > backup_qnb.sql
ALTER TABLE question ADD COLUMN status VARCHAR(255);
> 백업을 생활화하자