본문 바로가기
Tool/docker

docker / SQLServer 2019 / 설치 / 백업

by 하하IT 2024. 2. 27.

docker-compose.yaml

version: '3.8'

services:
  sql-server:
    image: mcr.microsoft.com/mssql/server:2019-latest
    container_name: sql-server-container
    environment:
      SA_PASSWORD: YourPassword123!
      ACCEPT_EULA: Y
    ports:
      - "11433:1433"
    networks:
      - sql-net
    volumes:
      - sql-data:/var/opt/mssql
        ### 백업파일저장을위해 호스트의 저장위치(/BACKUP/mssql) 와 컨터이너 내부의 경로(/var/opt/mssql/backup) 연결 ########
        ### 호스트 저장위치의 저장권한확인필요( chmod 777 /BACKUP/mssql )
      - /BACKUP/mssql:/var/opt/mssql/backup
    restart: always

networks:
  sql-net:
    driver: bridge

volumes:
  sql-data:

 

run.sh

docker-compose -f docker-compose.yaml -p sql-server up

 

backup.sh (DB백업 Script)

 

#!/bin/bash

# Docker 컨테이너 이름 또는 ID
container_name="bc9586e4629e"

# SQL Server 연결 정보 설정
server_name="localhost"  # SQL Server 인스턴스 이름 또는 IP 주소(포트는 기본포트가 아니라도 상관없음)
database_name="TEST"  # 백업할 데이터베이스 이름
backup_path="/var/opt/mssql/backup/"  # 백업 파일을 저장할 경로
backup_filename="${database_name}_$(date +'%Y%m%d_%H%M%S').bak"  # 백업 파일 이름

# SQL Server 백업 스크립트 실행
docker exec -it $container_name /opt/mssql-tools/bin/sqlcmd -S $server_name -d $database_name -U sa -P 'YourPassword123!' -Q "BACKUP DATABASE [$database_name] TO DISK='$backup_path/$backup_filename' WITH FORMAT, MEDIANAME='DatabaseBackup', NAME='Full Backup';"

if [ $? -eq 0 ]; then
	    echo "Backup completed successfully. Backup file: $backup_path/$backup_filename"
    else
	        echo "Backup failed."
fi