-
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