다음을 통해 공유


백업 및 복원을 사용하여 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 컴퓨터:

  • 다음이 설치된 Linux 컴퓨터:

Windows에서 백업 만들기

Windows에서 데이터베이스의 백업 파일을 만드는 방법에는 여러 가지가 있습니다. 다음 단계에서는 SSMS(SQL Server Management Studio)를 사용합니다.

  1. Windows 컴퓨터에서 SQL Server Management Studio를 시작합니다.

  2. 연결 대화 상자에서localhost를 입력합니다.

  3. 개체 탐색기에서 데이터베이스를 확장합니다.

  4. 대상 데이터베이스를 마우스 오른쪽 단추로 클릭하고 태스크를 선택한 다음 백업...을 클릭합니다.

    SSMS를 사용하여 백업 파일 만들기

  5. 데이터베이스 백업 대화 상자에서 백업 유형전체이고 백업할 위치디스크인지 확인합니다. 파일의 이름 및 위치를 기록해 둡니다. 예를 들어 SQL Server 2016의 YourDB 데이터베이스는 기본 백업 경로가 C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak입니다.

  6. 확인을 선택하여 데이터베이스를 백업합니다.

참고 항목

또 다른 옵션은 Transact-SQL 쿼리를 실행하여 백업 파일을 만드는 것입니다. 다음 Transact-SQL 명령은 YourDB라는 데이터베이스에 대해 이전 단계와 동일한 작업을 수행합니다.

BACKUP DATABASE [YourDB] TO  DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.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로 파일을 이동합니다.

  1. scp(보안 복사) 및 ssh(원격 로그인) 명령을 지원하는 Bash 셸을 Windows 컴퓨터에 설치합니다. 다음 두 가지 예가 있습니다.

  2. Windows에서 Bash 세션을 엽니다.

백업 파일을 Linux로 복사

  1. Bash 세션에서 백업 파일이 포함된 디렉터리로 이동합니다. 예시:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\'
    
  2. scp 명령을 사용하여 파일을 대상 Linux 머신으로 전송합니다. 다음 예시에서는 IP 주소가 192.0.2.9인 Linux 서버에 있는 user1의 홈 디렉터리로 YourDB.bak을 전송합니다.

    scp YourDB.bak user1@192.0.2.9:./
    

    scp command

파일 전송에 scp 대신 사용할 수 있는 여러 가지 방법이 있습니다. Samba를 사용하여 Windows와 Linux 간에 SMB 네트워크 공유를 구성하는 것도 이러한 방법 중 하나입니다. Ubuntu에 대한 연습은 Samba를 통해 네트워크 공유를 만드는 방법을 참조하세요. 설정되고 나면, Windows에서 \\machinenameorip\share와 같이 네트워크 파일 공유로 액세스할 수 있습니다.

복원하기 전에 백업 파일 이동

이 시점에서 백업 파일은 Linux 서버의 사용자 홈 디렉터리에 있습니다. 데이터베이스를 SQL Server로 복원하기 전에 사용자 mssql 및 그룹 mssql이 소유하고 있는 /var/opt/mssql의 하위 디렉터리에 백업을 넣어야 합니다. 기본 백업 위치를 변경하려는 경우 mssql-conf를 사용하여 구성 문서를 참조하세요.

  1. 동일한 Windows Bash 세션에서 ssh를 사용하여 대상 Linux 컴퓨터에 원격으로 연결합니다. 다음 예시에서는 Linux 시스템 192.0.2.9에 사용자 user1로 연결합니다.

    ssh user1@192.0.2.9
    

    이제 원격 Linux 서버에서 명령을 실행할 수 있습니다.

  2. 슈퍼 사용자 모드로 전환합니다.

    sudo su
    
  3. 새 백업 디렉터리를 만듭니다. -p 매개 변수는 디렉터리가 이미 있는 경우 아무 작업도 수행하지 않습니다.

    mkdir -p /var/opt/mssql/backup
    
  4. 백업 파일을 해당 디렉터리로 이동합니다. 다음 예시에서 백업 파일은 user1의 홈 디렉터리에 있습니다. 백업 파일의 위치 및 파일 이름과 일치하도록 명령을 변경합니다.

    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
    
  5. 슈퍼 사용자 모드를 종료합니다.

    exit
    

Linux에서 데이터베이스 복원

데이터베이스 백업을 복원하려면 RESTORE DATABASE Transact-SQL (TQL) 명령을 사용할 수 있습니다.

참고 항목

다음 단계에서는 sqlcmd 도구를 사용합니다. SQL Server 도구를 설치하지 않은 경우 Linux에 SQL Server 명령줄 도구 설치를 참조하세요.

  1. 동일한 터미널에서 sqlcmd를 시작 합니다. 다음 예제에서는 SA 사용자로 로컬 SQL Server 인스턴스에 연결합니다. 메시지가 표시되면 암호를 입력하거나 -P 매개 변수를 추가하여 암호를 지정합니다.

    sqlcmd -S localhost -U SA
    
  2. >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\MSSQL11.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\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).
    

    이 경우 데이터베이스에는 보조 파일이 포함되어 있습니다. 이러한 파일이 RESTORE DATABASEMOVE 절에 지정되지 않은 경우 복원 절차는 원래 서버와 동일한 경로에 파일을 만들려고 시도합니다.

    다음 명령을 실행하여 백업에 포함된 모든 파일을 나열할 수 있습니다.

    RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
    GO
    

    아래와 같은 목록이 표시됩니다(첫 번째 열 두 개만 나열).

    LogicalName         PhysicalName                                                                 ..............
    ----------------------------------------------------------------------------------------------------------------------
    YourDB              Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf          ..............
    YourDB_Product      Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf  ..............
    YourDB_Customer     Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf ..............
    YourDB_log          Z:\Microsoft SQL Server\MSSQL11.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
    
  3. 서버에 있는 데이터베이스를 모두 나열하여 복원을 확인합니다. 복원된 데이터베이스가 나열되어야 합니다.

    SELECT Name FROM sys.Databases
    GO
    
  4. 마이그레이션된 데이터베이스에서 다른 쿼리를 실행합니다. 다음 명령은 컨텍스트를 YourDB 데이터베이스로 전환하고 해당 테이블 중 하나에서 행을 선택합니다.

    USE YourDB
    SELECT * FROM YourTable
    GO
    
  5. sqlcmd사용을 마쳤으면 exit를 입력합니다.

  6. 원격 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에 대한 다른 마이그레이션 시나리오를 살펴봅니다.