본문으로 건너뛰기
  • 노아(Noah)
    노아의 우당탕탕 생존기
    노아(Noah)
  • 전체
    오늘
    어제
    • 전체 (4)
      • 개발 노트 (4)
      • 문제 풀이 (0)
      • 삽질 로그 (0)
      • 프로젝트 (0)
      • 회고 (0)
      • 기타 (0)
  • 태그

    데이터베이스
    hibernate
    인프라
    ORM
    MYSQL
    docker compose
    마이그레이션
    컨테이너
    SQL
    db 설치
    가상화
    java
    영속성 컨텍스트
    rename table
    JPA
    docker
    docker desktop
    로컬 개발 환경
    spring boot
  • hELLO· Designed By정상우.
노아의 우당탕탕 생존기
개발 노트

Docker로 로컬 환경에 MySQL 설치하고 접속하는 방법

2026. 2. 10. 09:42

👋 들어가며

안녕하세요 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

    '개발 노트' 카테고리의 다른 글
    • JPA 동작 원리와 영속성 컨텍스트 완벽 이해하기
    • MySQL 데이터베이스 이름 변경 불가 문제와 RENAME TABLE로 안전하게 마이그레이션하는 방법
    • Docker 컨테이너 가상화 원리와 Docker Compose Watch 실전 설정 가이드
    노아(Noah)
    노아(Noah)
    이름만 미덕인 노아의 우당탕탕 생존기

    티스토리툴바