ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RDS에서 docker db에 import하기
    ETC/MacOS,Rancher 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가 진행중이다.

     

    댓글

Designed by Tistory.