ETC/MacOS,Rancher
RDS에서 docker db에 import하기
건담아빠
2025. 1. 21. 16:45
AWS RDS에서 Export 받아서 macOS상의 도커 컨네이너 MariaDB에 Import 하는 과정을 정리해 둔다.
예전에도 정리했는데 이런 저런 작업을 하다보니 내용이 정리가 잘 안된듯 하여 마무리 정리 함 하자!
1. 쉘스크립트 만들기
1.1. MariaDB 컨테이너 실행 스크립트 작성
- build-mariaDB.sh
#!/bin/sh
IMAGE_NAME=mariadb
IMAGE_VERSION=10.6.8
usage(){
if [ -z "$1" ]; then
echo "사용법: $0 help|up|down|rm|createVolume"
echo "명령어: ./build-mariaDB.sh up"
exit
fi
}
up() {
echo ""
echo "############### [RUN] - docker run ##### - STARTED"
down
echo ""
rm
echo ""
echo "##### [RUN] - docker run $IMAGE_NAME-$IMAGE_VERSION ...options"
docker run -d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=test1234@ \
-v ${PWD}/config/conf.d:/etc/mysql/conf.d \
-v ${PWD}/dump:/dump \
-v mariadb-data:/var/lib/mysql \
--name "$IMAGE_NAME-$IMAGE_VERSION" \
$IMAGE_NAME:$IMAGE_VERSION
docker ps -a
echo "############### [RUN] - docker run ##### - ENDED"
echo ""
}
down() {
echo "##### [STOP] - docker stop $IMAGE_NAME-$IMAGE_VERSION"
docker stop "$IMAGE_NAME-$IMAGE_VERSION"
}
rm() {
echo "##### [RM] - docker rm $IMAGE_NAME-$IMAGE_VERSION"
docker rm "$IMAGE_NAME-$IMAGE_VERSION"
}
createVolume() {
docker volume create mariadb-data
docker volume ls
}
main() {
local cmd=${1:-''}
case "${cmd}" in
"up")
up
;;
"down")
down
;;
"rm")
rm
;;
"createVolume")
createVolume
;;
"help"|*)
usage
exit
;;
esac
}
main ${@}
- conf/conf.d/my.conf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqldump]
default-character-set = utf8mb4
[mysqld]
require_secure_transport=OFF
skip-character-set-client-handshake
init_connect="SET collation_connection = utf8mb4_unicode_ci"
init_connect="SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-time-zone = "+09:00"
1.2. RDS Export 스크립트 작성
- dump/dump-export.sh
mariadb-dump -h aaaaaaaaa.rds.amazonaws.com \
-u test-user \
-p \
--ignore-table-data=test-user.TEST_LOG \
--ignore-table-data=test-user.TEST_TOKEN \
test-user > nf_dump.sql
echo "UPDATE TEST SET VIRTUAL_TEL_NO = '999-9999-9999';" >> nf_dump.sql
echo "UPDATE TEST SET HP_NO = '999-9999-9999';" >> nf_dump.sql
echo "UPDATE TEST SET TEL_NO = '999-9999-9999';" >> nf_dump.sql
echo "UPDATE TEST_APPROVE SET HP_NO = '999-9999-9999';" >> nf_dump.sql
echo "UPDATE ADVERTISE SET BILLING_KEY = NULL;" >> nf_dump.sql
echo "UPDATE TEST SET HP_NO = '010-1111-2222', AUTH_CD = 'AUTHA12345' WHERE LOGIN_ID = 'test1';" >> nf_dump.sql
echo "UPDATE MEMBER SET HP_NO = '010-1111-3333', AUTH_CD = 'AUTHA12345' WHERE LOGIN_ID = 'test2';" >> nf_dump.sql
sed -i 's/DEFINER=[^*]*\*/\*/g' test_dump.sql
# sed -i'' 's/DEFINER=[^*]*\*/\*/g' test_dump.sql
2. 데이터 베이스 컨테이너 실행
2.1. 도커 볼륨 생성
맥의 파일시스템이 리눅스와 달라서 맥 폴더 자체를 볼륨 마운트 하게 되면 캐릭터셋 에러등등 기타 많은 에러들이 발생한다.
볼륨을 생성하고 해야함
$ ./build-mariaDB.sh createVolume
2.2. 데이터 베이스 실행
$ ./build-mariaDB.sh up
3. 데이터 베이스 생성
3.1. 데이터 베이스 생성
- 실행된 도커 컨테이너 확인
$ docker ps -a
- 컨테이너 접속
$ docker exec -it mariadb-10.6.8 /bin/bash
- root 계정으로 접속
# 아래 실행 후 패스워드를 입력한다.
$ mysql -u root -p
- test-db 생성
CREATE DATABASE `test-db`;
- test-user 사용자 생성
CREATE USER 'test-user'@'%' IDENTIFIED BY 'test1234@';
- 접속권한 부여
GRANT ALL PRIVILEGES ON `test-db`.* TO 'test-user'@'%';
flush privileges;
4. RDS에서 Export하고 Import하기
4.1. Export
- 컨테이너 접속
$ docker exec -it mariadb-10.6.8 /bin/bash
- 도커실행시 볼륨 마운트된 dump 폴더로 이동 후 RDS에서 DB를 export하는 쉘을 실행한다.
$ ls -al
$ cd dump
# 아래 실행 후 패스워드 입력
$ ./dump_export.sh
실행이 종료되면 test_dump.sql이 생성되어 있다. (/dump/backup/test_dump.sql)
4.2. Import
export 받은 `test_dump.sql` 덤프 파일을 root계정으로 접속해서 적용해 준다.
- root 계정으로 접속
# 아래 실행 후 패스워드를 입력한다.
$ mysql -u root -p
- 덤프파일 적용
source /dump/backup/test_dump.sql
끝