MySQL Dump 사용법: AWS 데이터베이스를 로컬에서 Docker로 실행하기

박지섭·2025년 1월 22일

db

목록 보기
1/1
post-thumbnail

1. 개요

이 글에서는 AWS RDS에 있는 MySQL 데이터베이스를 로컬로 덤프하고, Docker 환경에서 실행하는 과정을 다룹니다. 이를 통해 로컬 환경에서 AWS 데이터베이스를 복제하고 테스트할 수 있습니다. 이 과정에서 제가 겪었던 문제와 해결 방법도 함께 공유합니다.
개인적으로는 다른 분들은 이미 알고 계셨을수도 있으나, 저같은 경우에는 덤프를 떠와서 사용하는거까지 모두 처음이였기 때문에, 다른 분들이 해당 글을 보시고 좀 더 이해가 쉬우실거라 생각합니다.
덤프를 한 이유는 현재 운영되고 있는 db가 존재하고, 이를 로컬에서 똑같이 사용하면서 코드 로직을 확인함에 있습니다.

1. mysqldump를 사용한 AWS RDS 데이터베이스 덤프

mysqldump란?

mysqldump는 MySQL 데이터베이스를 .SQL 파일 형식으로 내보내는 유틸리티입니다. 데이터베이스 구조와 데이터를 백업하거나 다른 환경으로 복원할 때 유용합니다.

AWS RDS 데이터베이스 덤프 방법

AWS RDS의 데이터베이스를 덤프하려면 MySQL 클라이언트를 사용해야 합니다.

명령어 형식

mysqldump -h [AWS_RDS_ENDPOINT] -u [사용자명] -p [데이터베이스명] > [로컬_파일명].sql
  • 여기서 aws_rds_Endpoint는 따로 rds에 대한 정보를 넣어주시면 되고 ap-northeast-2.rds.amazonaws.com 과 같이 생겼습니다. 이후 rds에 있는 mysql 을 접근하기 위한 사용자이름과 dump를 뜨고 싶은 데이터 베이스 이름을 넣고 로컬에 만들고 싶은 파일 이름을 넣으면 되겠습니다.

  • -h: AWS RDS의 엔드포인트.

  • -u: MySQL 사용자 이름.

  • -p: 비밀번호를 입력받기 위한 옵션.

  • new_auto: 덤프하려는 데이터베이스 이름.

  • new_auto_dump.sql: 덤프 파일의 이름.

이후 덤프 파일이 생성됐는지 아래 명령어를 통해 확인합니다.
ls -lh dump_file.sql

2. 덤프 파일을 Docker에서 실행하기

Docker Compose 설정

AWS에서 덤프한 SQL 파일을 Docker MySQL 컨테이너에 넣으려면 docker-compose.yml 파일을 설정해야 합니다.

**docker-compose.yml** 예제

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql #default가 mysql이라서 따로 변경할 거 아니면 바꾸시지 않아도 됩니다.
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: password!
    ports:
      - "3306:3306"
    volumes:
      - ./data:/var/lib/mysql
      - ./dump_file.sql:/docker-entrypoint-initdb.d/dump_file.sql
    restart: always

이떄 dump_file은 위의 docker-compose.yml파일이 위치한 디렉토리에 동일하게 넣어주시면 되겠습니다.

  • MYSQL_DATABASE: 초기화할 데이터베이스 이름.
  • MYSQL_USERMYSQL_PASSWORD: MySQL 접속 정보.
  • volumes: 덤프 파일을 MySQL 컨테이너 내부의 /docker-entrypoint-initdb.d/에 복사.

이후 docker compose up 으로 해당 파일을 실행해주시면 되겠습니다.

3. 문제와 해결 방법

  • 아래는 간단하게 겪었던 문제들입니다.

1. **mysqldump** 명령이 동작하지 않음

문제

  • zsh: command not found: mysqldump 오류 발생.

원인

  • 로컬에 MySQL 클라이언트가 설치되지 않음.

해결 방법

  1. Homebrew로 MySQL 클라이언트 설치:

    brew install mysql-client
  2. PATH 환경 변수 설정:

    echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc
  3. mysqldump 버전 확인:

    mysqldump --version
  • 여기서 mysqldump --version을 확인했는데 나오지 않았다라는 것은 path 환경 변수 설정이 잘못됐을 가능성이 큽니다. 해당 부분은 다시 확인해주시길 바랍니다.

2. 덤프 파일에 데이터가 없는 문제

문제

  • 덤프 파일이 생성되었지만 데이터가 포함되지 않음.

원인

  • 데이터베이스 이름을 잘못 입력했거나, MySQL 사용자 계정에 권한 부족. => 원인 불명

해결 방법

  1. 데이터베이스 이름 확인:

    mysql -h [AWS_RDS_ENDPOINT] -u admin -p
    SHOW DATABASES;
  2. 사용자 권한 확인 및 부여:

    GRANT SELECT ON new_auto.* TO 'admin'@'%';
    FLUSH PRIVILEGES;
  3. 정확한 명령으로 덤프 재실행:

    mysqldump -h [AWS_RDS_ENDPOINT] -u admin -p new_auto > new_auto_dump.sql
  • 저같은 경우에는 덤프가 안되서 위와 같이 다시 확인해봤을 떄 모두 문제가 없어서 혹시나 하고 다시 덤프를 실행했는데 정상적으로 동작하였습니다.

3. 변경된 Docker Compose 설정이 반영되지 않음

문제

  • Docker 컨테이너를 재실행했지만 이전 설정이 적용됨.

원인

  • 기존 MySQL 데이터가 남아 있어 초기화 스크립트가 실행되지 않음.

해결 방법

  1. 기존 컨테이너 중지 및 삭제:

    docker-compose down
  2. MySQL 데이터 볼륨 삭제:

    rm -rf ./data
  3. 컨테이너 재생성:

    docker-compose up --build -d
  • 해당 문제도 data폴더를 지우니 다시 정상적으로 동작하였습니다. 따로 Invalidate cache나 이런 것을 하지 않고, 도커 실행시 생성되는 MYSQL 데이터 볼륨을 제거 하면 될 듯 합니다.

이상으로 간단하게 aws rds에서 로컬로 데이터베이스 자체를 dump해서 도커에서 적용할 수 있는 방법에 대해서 알아보았습니다. 감사합니다.

profile
프론트 + 백엔드 개발자

0개의 댓글