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

import가 진행중이다.