👋 들어가며
안녕하세요 Noah입니다.
데이터베이스 운영 중 DB 이름을 변경해야 하는 상황이 종종 발생합니다. 당연히 지원될 줄 알았던 RENAME DATABASE 명령어가 MySQL에서는 작동하지 않아 당황했던 경험과, 이를 안전하게 우회하는 방법을 정리해 보겠습니다.
1. RENAME DATABASE가 없는 이유와 대안
과거 MySQL 버전에서는 RENAME DATABASE 명령어를 지원한 적이 있었으나, 보안 및 데이터 손실 위험 등의 이유로 곧 제거되었습니다. 따라서 현재 MySQL에서 데이터베이스 이름을 직접 변경하는 명령어는 존재하지 않습니다.
대신, 새로운 이름의 데이터베이스를 만들고 기존 데이터베이스 안의 테이블을 하나씩 새 데이터베이스로 이동시키는 방식을 사용해야 합니다. 이때 사용하는 핵심 명령어가 RENAME TABLE입니다.
flowchart LR
subgraph Old_DB ["기존 DB (old_db)"]
T1["Table A"]
T2["Table B"]
end
subgraph New_DB ["새 DB (new_db)"]
direction BT
end
T1 -->|"RENAME TABLE"| New_DB
T2 -->|"RENAME TABLE"| New_DB
⚠️ WARNING
RENAME TABLE은 테이블을 복사하는 것이 아니라 물리적으로 이동(Move)시키는 명령어입니다.
명령어가 실행되면 기존 DB에서는 해당 테이블이 즉시 사라집니다.
2. 마이그레이션 절차와 외래 키(FK) 문제
테이블을 다른 DB로 옮길 때 가장 주의해야 할 점은 외래 키(Foreign Key) 제약 조건입니다. 테이블 간에 참조 관계가 얽혀 있다면, 어떤 테이블을 먼저 옮기느냐에 따라 무결성 에러가 발생할 수 있습니다.
이 문제를 해결하기 위해 테이블을 이동하는 동안 외래 키 검사를 임시로 비활성화하는 foreign_key_checks 옵션을 활용합니다.
-- 옮겨 담을 새로운 데이터베이스(그릇) 생성
CREATE DATABASE new_db;
-- 외래 키 제약 조건 검사 임시 비활성화
SET foreign_key_checks = 0;
-- 테이블 이동 (기존 DB -> 새 DB)
RENAME TABLE old_db.table1 TO new_db.table1;
RENAME TABLE old_db.table2 TO new_db.table2;
-- 외래 키 제약 조건 검사 다시 활성화 (필수)
SET foreign_key_checks = 1;
-- 비어있는 기존 데이터베이스 삭제 (선택 사항)
DROP DATABASE old_db;
❗ IMPORTANT
작업이 끝난 후에는 반드시 SET foreign_key_checks = 1;을 실행하여 데이터베이스의 참조 무결성 검사를 원래대로 돌려놓아야 합니다.
3. 대용량 테이블에서의 성능 고려사항
학습을 진행하며 "수십 GB에 달하는 대형 테이블에서도 RENAME TABLE이 성능 저하 없이 빠르게 동작할까?"라는 의문이 생길 수 있습니다.
결론부터 말하자면, 동일한 파일 시스템(디스크) 내에서 이동하는 경우 데이터 크기에 상관없이 매우 빠르게 동작합니다. RENAME TABLE은 실제 데이터를 복사하고 옮기는 작업이 아니라, MySQL의 데이터 딕셔너리(메타데이터)에서 경로 이름만 변경하는 작업이기 때문입니다. 따라서 대형 테이블이라도 순식간에 이동이 완료됩니다.
💡 TIP
테이블 개수가 너무 많아 일일이 쿼리를 작성하기 힘들다면, MySQL의 information_schema.tables 뷰를 조회하여 RENAME TABLE 쿼리 문자열을 자동으로 생성(CONCAT 활용)하는 스크립트를 작성하여 한 번에 실행할 수 있습니다.
🏁 마무리
MySQL에서 데이터베이스 이름 자체를 바꾸는 마법 같은 명령어는 없지만, RENAME TABLE과 외래 키 제약 조건 제어를 통해 안전하게 데이터를 이관할 수 있습니다.
'개발 노트' 카테고리의 다른 글
| JPA 동작 원리와 영속성 컨텍스트 완벽 이해하기 (0) | 2026.02.10 |
|---|---|
| MySQL 데이터베이스 이름 변경 불가 문제와 RENAME TABLE로 안전하게 마이그레이션하는 방법 (0) | 2026.02.10 |
| Docker 컨테이너 가상화 원리와 Docker Compose Watch 실전 설정 가이드 (0) | 2026.02.10 |