ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker-compose MySQL 연동 및 백업, 복구
    Database 2022. 2. 7. 21:19

    * Docker 이미지로 실행된 MySQL 데이터를 연동, 백업 및 복구하자

    * 백업의 경우 도커 컨테이너로 백업 명령어를 실행하여 호스트에 ***.sql 로 저장

    * 복구의 경우 ***.sql 를 도커 컨테이너로 복구 명령어 실행

     

    MySQL 연결 및 백업, 복구 Shell script

    # 변수는 ./.env
    version: "3"
    
    services:
      flask:
        container_name: "${FLASK}"
        restart: always
        build: ./flask
        volumes:
          - ./flask/logs:/usr/src/flask_app/logs
        expose:
          - "${FLASK_PORT}"
        env_file:
          - ./.env
        command: gunicorn -c ./gunicorn.conf.py "app:create_app('prod')"
        depends_on:
          - mysql
    
    
      mysql:
        image: mysql:5.7
        restart: always
        container_name: "${MYSQL}"
        ports:
          - "${MYSQL_EXTERNAL_PORT}:${MYSQL_PORT}" # External port 는 DB 툴로 접속하기 위함 # MySQL port는 flask 앱에서 EXTERNAL PORT이 아닌 PORT로 URL 설정해야함  
        environment:
          - MYSQL_DATABASE=${MYSQL_DATABASE}
          - MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
          - TZ=Asia/Seoul
        command:
          - --lower_case_table_names=1
          - --default-authentication-plugin=mysql_native_password
          - --character-set-server=utf8mb4
          - --collation-server=utf8mb4_unicode_ci
        volumes:
          - ./mysql/data:/var/lib/mysql  # 볼륨 설정
     
     other servieces...
    
    
    
    # backup.sh, restore.sh  # ../.env 변수들 사용
    if [ -f ../.env ]; then
      export $(echo $(cat ../.env | sed 's/#.*//g'| xargs) | envsubst)
    fi
    # docker exec [cotainer_name] /usr/bin/mysqldump -uroot --password=[password] [targatDatabase] > [saveto].sql
    docker exec $MYSQL /usr/bin/mysqldump -uroot --password=$MYSQL_PASSWORD $MYSQL_DATABASE >  backup/$(date '+%Y-%m-%d_%H:%M:%S').sql
    
    # cat [saved].sql | docker exec -i [container_name] /usr/bin/mysql -uroot --password=[password] [targetDatabase]
    cat ./backup/20220209.sql | docker exec -i $MYSQL /usr/bin/mysql -uroot --password=$MYSQL_PASSWORD backup_db

     

    'Database' 카테고리의 다른 글

    몽고 디비 튜닝  (0) 2022.08.22
    몽고 디비 Replicaset  (0) 2022.05.20
    MongoDB - 기본 쿼리/인덱스  (0) 2022.03.02
    [DATABASE] Raw SQL에서 ORM으로 바꾸자  (0) 2021.11.01
Designed by Tistory.