본문 바로가기
DB/SQL Server

docker / SQLSERVER / MSSQL / 데이터베이스복원 / 계정생성 / 권한부여 / 백업스크립트 실행

by 하하IT 2024. 2. 29.

1. docker CONTAINER ID 확인 

user@PC:/$ docker ps
CONTAINER ID   IMAGE                                        COMMAND                  CREATED         STATUS         PORTS                                                             NAMES
ab11426a70ce   mcr.microsoft.com/mssql/server:2019-latest   "/opt/mssql/bin/perm…"   9 minutes ago   Up 9 minutes   0.0.0.0:11433->1433/tcp, :::11433->1433/tcp                       sql-server-container
user@PC:/$

 

 

2. sqlcmd 실행 
2.1 docker 내부 Container console 실행 

user@PC:/$            docker exec -it ab11426a70ce /opt/mssql-tools/bin/sqlcmd -S localhost -d master -U sa -P 'YourPassword123!'

 

2.2 docker 내부 Container console 실행 

user@PC:/$ docker exec -it ab11426a70ce /bin/bash
mssql@ab11426a70ce:/$
mssql@ab11426a70ce:/$
mssql@ab11426a70ce:/$ /opt/mssql-tools/bin/sqlcmd -S localhost  -U sa -P 'YourPassword123!'
1>
2>

 

3. bak파일 서버 볼륨으로 복사 ( c/Temp/20240229/TEST_Backup_2024022910001.bak  이 존재하는경우 ...   /mnt/c/WSL/DOCKER/VOLUMES/SQLSERVER/ (docker sqlserver의 volumn) 으로 복사하기 
  WSL CLI에서 실행

user@PC:/mnt/c/Temp/20240229$
user@PC:/mnt/c/Temp/20240229$cp /mnt/c/Temp/20240229/TEST_Backup_2024022910001.bak    /mnt/c/WSL/DOCKER/VOLUMES/SQLSERVER/

 

4. 데이터베이스 복원
  SSMS > sa 로그인 >  "데이터베이스" > "데이터베이스복원" >  [일반] "디바이스" ..파일선택 >  [옵션] "기존 데이터베이스 덮어쓰기" , "복제 설정유지" ,"복원된 데이터베이스에 대한 액세스 제한"

 

5. sqlcmd 접속후(sa) 데이터베이스생성 / 계정생성 / 권한부여

USE TEST; --데이터베이스 선택
GO   --명령을 사용하여 명령을 실행 및 트랜잭션종료

CREATE LOGIN TEST WITH PASSWORD = 'YourPassword123!';
GO   --명령을 사용하여 명령을 실행 및 트랜잭션종료
CREATE USER TEST_LOGIN FOR LOGIN TEST;
GO   --명령을 사용하여 명령을 실행 및 트랜잭션종료
EXEC sp_addrolemember 'db_owner', 'TEST_LOGIN';
GO   --명령을 사용하여 명령을 실행 및 트랜잭션종료
ALTER SERVER ROLE dbcreator ADD MEMBER TEST;
GO   --명령을 사용하여 명령을 실행 및 트랜잭션종료

 

 

6. 생성된 계정(TEST)으로 자료조회 확인..

 

7. 백업스크립트 생성 

user@PC:/mnt/c/WSL/DOCKER/VOLUMES/SQLSERVER$vi backup.sh

#!/bin/bash
# Docker 컨테이너 이름 또는 ID
container_name="a8fbc0321256"
# 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

 

 

8. 백업스크립트 실행 후 결과 확인 

user@PC:/mnt/c/WSL/DOCKER/VOLUMES/SQLSERVER$ ./backup.sh
Processed 95224 pages for database 'TEST', file 'TEST' on file 1.
Processed 2 pages for database 'TEST', file 'TEST_log' on file 1.
BACKUP DATABASE successfully processed 95226 pages in 1.146 seconds (649.170 MB/sec).
Backup completed successfully. Backup file: /var/opt/mssql/backup//TEST_20240229_145121.bak
user@PC:/mnt/c/WSL/DOCKER/VOLUMES/SQLSERVER$
user@PC:/mnt/c/WSL/DOCKER/VOLUMES/SQLSERVER$ ls -lrth
total 2.2G
-rwxrwxrwx 1 user user 745M Feb 29 14:47 TEST_Backup_2024022910001.bak
-rwxrwxrwx 1 user user  939 Feb 29 14:51 backup.sh
-rwxrwxrwx 1 user user 746M Feb 29 14:51 TEST_20240229_145110.bak
-rwxrwxrwx 1 user user 746M Feb 29 14:51 TEST_20240229_145121.bak
user@PC:/mnt/c/WSL/DOCKER/VOLUMES/SQLSERVER$