백업 및 복원을 사용하여 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. 대상 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업을 선택한 다음 백업을 클릭합니다.

    Use SSMS to create a backup file

  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 를 사용자 사용자 1로 연결합니다.

    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 TQL(Transact-SQL) 명령을 사용할 수 있습니다.

참고 항목

다음 단계에서는 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에 대한 다른 마이그레이션 시나리오를 살펴봅니다.