백업 및 복원을 사용하여 Windows에서 Linux로 SQL Server 데이터베이스 마이그레이션
적용 대상: SQL Server - Linux
SQL Server의 백업 및 복원 기능은 Windows의 SQL Server에서 Linux의 SQL Server로 데이터베이스를 마이그레이션하는 데 권장되는 방법입니다. 이 자습서에서는 백업 및 복원 기술을 사용하여 데이터베이스를 Linux로 이동하는 데 필요한 단계를 안내합니다.
- SSMS를 사용하여 Windows에서 백업 파일 만들기
- Windows에 Bash 셸 설치
- 백업 파일을 Bash 셸에서 Linux로 이동
- Transact-SQL을 사용하여 Linux에서 백업 파일 복원
- 쿼리를 실행하여 마이그레이션 확인
SQL Server Always On 가용성 그룹을 만들어 Windows에서 Linux로 SQL Server 데이터베이스를 마이그레이션할 수도 있습니다. sql-server-linux-availability-group-cross-platform을 참조하세요.
필수 조건
다음은 이 자습서를 완료하는 데 필요한 전제 조건입니다.
Windows 컴퓨터:
- SQL Server가 설치되어 있습니다.
- SQL Server Management Studio
- 마이그레이션할 대상 데이터베이스입니다.
Linux 컴퓨터:
- 명령줄 도구를 사용하는 SQL Server(Red Hat Enterprise Linux, SUSE Linux Enterprise Server 또는 Ubuntu).
Windows에서 백업 만들기
Windows에서 데이터베이스의 백업 파일을 만드는 방법에는 여러 가지가 있습니다. 다음 단계에서는 SSMS(SQL Server Management Studio)를 사용합니다.
Windows 컴퓨터에서 SQL Server Management Studio를 시작합니다.
연결 대화 상자에서localhost를 입력합니다.
개체 탐색기에서 데이터베이스를 확장합니다.
대상 데이터베이스를 마우스 오른쪽 단추로 클릭하고 태스크를 선택한 다음 백업...을 선택합니다.
데이터베이스 백업 대화 상자에서 백업 유형이 전체이고 백업할 위치가 디스크인지 확인합니다. 파일의 이름 및 위치를 기록해 둡니다. 예를 들어, SQL Server 2019(15.x)에서
YourDB
라는 이름의 데이터베이스는 기본 백업 경로가C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
입니다.확인을 선택하여 데이터베이스를 백업합니다.
또 다른 옵션은 Transact-SQL 쿼리를 실행하여 백업 파일을 만드는 것입니다. 다음 Transact-SQL 명령은 YourDB
라는 데이터베이스에 대해 이전 단계와 동일한 작업을 수행합니다.
BACKUP DATABASE [YourDB]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO
Windows에 Bash 셸 설치
데이터베이스를 복원하려면 먼저 Windows 컴퓨터에서 대상 Linux 컴퓨터로 백업 파일을 전송해야 합니다. 이 자습서에서는 Windows에서 실행되는 Bash 셸(터미널 창)에서 Linux로 파일을 이동합니다.
scp(보안 복사) 및 ssh(원격 로그인) 명령을 지원하는 Bash 셸을 Windows 컴퓨터에 설치합니다. 다음 두 가지 예가 있습니다.
- Linux용 Windows 하위 시스템(Windows 10)
- Git Bash 셸(https://git-scm.com/downloads)
Windows에서 Bash 세션을 엽니다.
백업 파일을 Linux로 복사
Bash 세션에서 백업 파일이 포함된 디렉터리로 이동합니다. 예시:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
scp 명령을 사용하여 파일을 대상 Linux 머신으로 전송합니다. 다음 예제에서는 IP 주소가 192.168.2.9인 Linux 서버의 홈 디렉터리
user1
로 전송YourDB.bak
합니다.scp YourDB.bak user1@192.168.2.9:./
예상되는 출력은 다음과 같습니다.
The authenticity of host 192.168.2.9(192.168.2.9)' can't be established. ECDSA key fingerprint is SHA256: aB1cD2eF-3gH4iJ5kL6-mN7oP8qR= Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.9' (ECDSA) to the list of known hosts. Password: YourDB.bak 100% 8960KB 7.4MB/s 00:01
팁
파일 전송에 scp 대신 사용할 수 있는 여러 가지 방법이 있습니다. Samba를 사용하여 Windows와 Linux 간에 SMB 네트워크 공유를 구성하는 것도 이러한 방법 중 하나입니다. Ubuntu에 대한 연습은 파일 서버로서의 Samba를 참조하세요. 설정되고 나면, Windows에서 \\machinenameorip\share
와 같이 네트워크 파일 공유로 액세스할 수 있습니다.
복원하기 전에 백업 파일 이동
이 시점에서 백업 파일은 Linux 서버의 사용자 홈 디렉터리에 있습니다. 데이터베이스를 SQL Server로 복원하기 전에 사용자 /var/opt/mssql
및 그룹 mssql
이 소유하고 있는 mssql
의 하위 디렉터리에 백업을 넣어야 합니다. 기본 백업 위치를 변경하려는 경우 mssql-conf를 사용하여 구성 문서를 참조하세요.
동일한 Windows Bash 세션에서 ssh를 사용하여 대상 Linux 컴퓨터에 원격으로 연결합니다. 다음 예시에서는 Linux 시스템
192.168.2.9
에 사용자user1
로 연결합니다.ssh user1@192.168.2.9
이제 원격 Linux 서버에서 명령을 실행할 수 있습니다.
슈퍼 사용자 모드로 전환합니다.
sudo su
새 백업 디렉터리를 만듭니다.
-p
매개 변수는 디렉터리가 이미 있는 경우 아무 작업도 수행하지 않습니다.mkdir -p /var/opt/mssql/backup
백업 파일을 해당 디렉터리로 이동합니다. 다음 예시에서 백업 파일은
user1
의 홈 디렉터리에 있습니다. 백업 파일의 위치 및 파일 이름과 일치하도록 명령을 변경합니다.mv /home/user1/YourDB.bak /var/opt/mssql/backup/
슈퍼 사용자 모드를 종료합니다.
exit
Linux에서 데이터베이스 복원
데이터베이스 백업을 복원하려면 RESTORE DATABASE
Transact-SQL (TQL) 명령을 사용할 수 있습니다.
다음 단계에서는 sqlcmd 도구를 사용합니다. SQL Server 도구를 설치하지 않은 경우 Linux에 SQL Server 명령줄 도구 sqlcmd 및 bcp 설치를 참조하세요.
동일한 터미널에서 sqlcmd를 시작 합니다. 다음 예제에서는 계정을 사용하여 로컬 SQL Server 인스턴스에 연결합니다
sa
. 메시지가 표시되면 암호를 입력하거나-P
매개 변수를 추가하여 암호를 지정합니다.sqlcmd -S localhost -U sa
>1
프롬프트에서 다음RESTORE DATABASE
명령을 입력하고 각 줄 뒤에 Enter 키를 누릅니다(전체 여러 줄 명령을 한 번에 복사하여 붙여넣을 수 없음).YourDB
의 모든 항목을 데이터베이스의 이름으로 바꿉니다.RESTORE DATABASE YourDB FROM DISK = '/var/opt/mssql/backup/YourDB.bak' WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'; GO
데이터베이스가 성공적으로 복원되었다는 메시지가 표시됩니다.
RESTORE DATABASE
는 다음 예시와 같은 오류를 반환할 수 있습니다.File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf'. Use WITH MOVE to identify a valid location for the file. Msg 5133, Level 16, State 1, Server servername, Line 1 Directory lookup for the file "Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).
이 경우 데이터베이스에는 보조 파일이 포함되어 있습니다. 이러한 파일이
RESTORE DATABASE
의MOVE
절에 지정되지 않은 경우 복원 절차는 원래 서버와 동일한 경로에 파일을 만들려고 시도합니다.다음 명령을 실행하여 백업에 포함된 모든 파일을 나열할 수 있습니다.
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'; GO
다음 예제와 같은 목록을 가져와야 합니다(처음 두 열만 나열).
LogicalName PhysicalName .............. ------------------- ---------------------------------------------------------------------------- --------------- YourDB Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf .............. YourDB_Product Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf .............. YourDB_Customer Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf .............. YourDB_log Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf ..............
이 목록을 사용하여 추가 파일에 대한
MOVE
절을 만들 수 있습니다. 이 예시에서RESTORE DATABASE
는 다음과 같습니다.RESTORE DATABASE YourDB FROM DISK = '/var/opt/mssql/backup/YourDB.bak' WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_Product' TO '/var/opt/mssql/data/YourDB_Product.ndf', MOVE 'YourDB_Customer' TO '/var/opt/mssql/data/YourDB_Customer.ndf', MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'; GO
서버에 있는 데이터베이스를 모두 나열하여 복원을 확인합니다. 복원된 데이터베이스가 나열되어야 합니다.
SELECT name FROM sys.databases; GO
마이그레이션된 데이터베이스에서 다른 쿼리를 실행합니다. 다음 명령은 컨텍스트를
YourDB
데이터베이스로 전환하고 해당 테이블 중 하나에서 행을 선택합니다.USE YourDB; SELECT * FROM YourTable; GO
sqlcmd 사용을 마쳤으면
exit
를 입력합니다.원격 ssh 세션 작업이 끝나면 다시
exit
를 입력합니다.
다음 단계
이 자습서에서는 Windows에서 데이터베이스를 백업하고 이를 SQL Server를 실행하는 Linux 서버로 이동하는 방법을 알아보았습니다. 다음 방법에 대해 알아보았습니다.
- SSMS 및 Transact-SQL을 사용하여 Windows에서 백업 파일 만들기
- Windows에 Bash 셸 설치
- scp를 사용하여 Windows에서 Linux로 백업 파일 이동
- ssh를 사용하여 Linux 컴퓨터에 원격으로 연결
- 복원 준비를 위해 백업 파일 재배치
- sqlcmd를 사용하여 Transact-SQL 명령 실행
RESTORE DATABASE
명령을 사용하여 데이터베이스 백업 복원- 쿼리를 실행하여 마이그레이션 확인
다음으로, SQL Server on Linux에 대한 다른 마이그레이션 시나리오를 살펴봅니다.