이 글에서는 AWS RDS에 있는 MySQL 데이터베이스를 로컬로 덤프하고, Docker 환경에서 실행하는 과정을 다룹니다. 이를 통해 로컬 환경에서 AWS 데이터베이스를 복제하고 테스트할 수 있습니다. 이 과정에서 제가 겪었던 문제와 해결 방법도 함께 공유합니다.
개인적으로는 다른 분들은 이미 알고 계셨을수도 있으나, 저같은 경우에는 덤프를 떠와서 사용하는거까지 모두 처음이였기 때문에, 다른 분들이 해당 글을 보시고 좀 더 이해가 쉬우실거라 생각합니다.
덤프를 한 이유는 현재 운영되고 있는 db가 존재하고, 이를 로컬에서 똑같이 사용하면서 코드 로직을 확인함에 있습니다.
mysqldump는 MySQL 데이터베이스를 .SQL 파일 형식으로 내보내는 유틸리티입니다. 데이터베이스 구조와 데이터를 백업하거나 다른 환경으로 복원할 때 유용합니다.
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에서 실행하기
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_USER 및 MYSQL_PASSWORD: MySQL 접속 정보.volumes: 덤프 파일을 MySQL 컨테이너 내부의 /docker-entrypoint-initdb.d/에 복사.이후 docker compose up 으로 해당 파일을 실행해주시면 되겠습니다.
**mysqldump** 명령이 동작하지 않음zsh: command not found: mysqldump 오류 발생.Homebrew로 MySQL 클라이언트 설치:
brew install mysql-client
PATH 환경 변수 설정:
echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
mysqldump 버전 확인:
mysqldump --version
데이터베이스 이름 확인:
mysql -h [AWS_RDS_ENDPOINT] -u admin -p
SHOW DATABASES;
사용자 권한 확인 및 부여:
GRANT SELECT ON new_auto.* TO 'admin'@'%';
FLUSH PRIVILEGES;
정확한 명령으로 덤프 재실행:
mysqldump -h [AWS_RDS_ENDPOINT] -u admin -p new_auto > new_auto_dump.sql
기존 컨테이너 중지 및 삭제:
docker-compose down
MySQL 데이터 볼륨 삭제:
rm -rf ./data
컨테이너 재생성:
docker-compose up --build -d
이상으로 간단하게 aws rds에서 로컬로 데이터베이스 자체를 dump해서 도커에서 적용할 수 있는 방법에 대해서 알아보았습니다. 감사합니다.