Database
Docker-compose MySQL 연동 및 백업, 복구
foxlee
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