Dela via


Migrera en SQL Server-databas från Windows till Linux med hjälp av säkerhetskopiering och återställning

gäller för:SQL Server – Linux

SQL Server-funktionen för säkerhetskopiering och återställning är det rekommenderade sättet att migrera en databas från SQL Server i Windows till SQL Server i Linux. I den här självstudien går du igenom de steg som krävs för att flytta en databas till Linux med tekniker för säkerhetskopiering och återställning.

  • Skapa en säkerhetskopia i Windows med SSMS
  • Installera ett bash-gränssnitt i Windows
  • Flytta säkerhetskopieringsfilen till Linux från bash-gränssnittet
  • Återställa säkerhetskopieringsfilen i Linux med Transact-SQL
  • Kör en fråga för att verifiera migreringen

Du kan också skapa en SQL Server AlwaysOn-tillgänglighetsgrupp för att migrera en SQL Server-databas från Windows till Linux. Se sql-server-linux-availability-group-cross-platform.

Förutsättningar

Följande krav krävs för att slutföra den här självstudien:

Skapa en säkerhetskopia i Windows

Det finns flera sätt att skapa en säkerhetskopia av en databas i Windows. Följande steg använder SQL Server Management Studio (SSMS).

  1. Starta SQL Server Management Studio på din Windows-dator.

  2. I anslutningsdialogrutan anger du localhost.

  3. I Object Explorer expanderar du Databaser.

  4. Högerklicka på måldatabasen, välj Åtgärderoch välj sedan Säkerhetskopiera....

    Skärmbild av hur du använder SSMS för att skapa en säkerhetskopia.

  5. I dialogrutan Säkerhetskopiering av databas kontrollerar du att typ av säkerhetskopiering är Full och Säkerhetskopiera till är Disk. Notera namn och plats för filen. Till exempel har en databas med namnet YourDB på SQL Server 2019 (15.x) en standardsökväg för säkerhetskopiering av C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

  6. Välj OK för att säkerhetskopiera databasen.

Ett annat alternativ är att köra en Transact-SQL fråga för att skapa säkerhetskopian. Följande Transact-SQL-kommando utför samma åtgärder som föregående steg för en databas med namnet 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

Installera ett bash-gränssnitt i Windows

För att återställa databasen måste du först överföra säkerhetskopieringsfilen från Windows-datorn till linux-måldatorn. I den här självstudien flyttar vi filen till Linux från ett bash-gränssnitt (terminalfönster) som körs i Windows.

  1. Installera ett bash-gränssnitt på din Windows-dator som stöder kommandona scp (säker kopia) och ssh (fjärrinloggning). Två exempel är:

  2. Öppna en bash-session i Windows.

Kopiera säkerhetskopieringsfilen till Linux

  1. I bash-sessionen navigerar du till katalogen som innehåller din säkerhetskopia. Till exempel:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
    
  2. Använd kommandot scp för att överföra filen till Linux-måldatorn. I följande exempel överförs YourDB.bak till startkatalogen för user1 på Linux-servern med en IP-adress på 192.168.2.9:

    scp YourDB.bak user1@192.168.2.9:./
    

    Här är de förväntade utdata:

    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
    

Tips

Det finns alternativ till att använda scp- för filöverföring. Ett sätt är att använda Samba för att konfigurera en SMB-nätverksresurs mellan Windows och Linux. För en genomgång av Ubuntu, se Samba som en filserver. När du har upprättat den kan du komma åt den som en nätverksfilresurs från Windows, till exempel \\machinenameorip\share.

Flytta säkerhetskopieringsfilen innan du återställer

Nu finns säkerhetskopieringsfilen på Linux-servern i användarens hemkatalog. Innan du återställer databasen till SQL Server måste du placera säkerhetskopian i en underkatalog till /var/opt/mssqleftersom den ägs av användaren mssql och gruppen mssql. Om du vill ändra standardplatsen för säkerhetskopiering läser du artikeln Konfigurera med mssql-conf.

  1. I samma Windows bash-session ansluter du via fjärranslutning till din Linux-måldator med ssh-. Följande exempel ansluter till Linux-datorn 192.168.2.9 som användare user1.

    ssh user1@192.168.2.9
    

    Nu kör du kommandon på linux-fjärrservern.

  2. Ange superanvändarläge.

    sudo su
    
  3. Skapa en ny säkerhetskopieringskatalog. Parametern -p gör ingenting om katalogen redan finns.

    mkdir -p /var/opt/mssql/backup
    
  4. Flytta säkerhetskopieringsfilen till den katalogen. I följande exempel finns säkerhetskopieringsfilen i hemkatalogen för user1. Ändra kommandot så att det matchar platsen och filnamnet för din säkerhetskopia.

    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
    
  5. Avsluta superanvändarläget.

    exit
    

Återställa databasen i Linux

Om du vill återställa databassäkerhetskopian kan du använda kommandot RESTORE DATABASE Transact-SQL (TQL).

Följande steg använder verktyget sqlcmd. Om du inte har installerat SQL Server-verktyg kan du läsa Installera SQL Server-kommandoradsverktygen sqlcmd och bcp på Linux.

  1. Starta sqlcmdi samma terminal. Följande exempel ansluter till den lokala SQL Server-instansen med sa-kontot. Ange lösenordet när du uppmanas till det eller ange lösenordet genom att lägga till parametern -P.

    sqlcmd -S localhost -U sa
    
  2. I >1-kommandotolken anger du följande RESTORE DATABASE kommando och trycker på RETUR efter varje rad (du kan inte kopiera och klistra in hela flerradskommandot samtidigt). Ersätt alla förekomster av YourDB med namnet på databasen.

    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
    

    Du bör få ett meddelande om att databasen har återställts.

    RESTORE DATABASE kan returnera ett fel som i följande exempel:

    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.).
    

    I det här fallet innehåller databasen sekundära filer. Om dessa filer inte anges i MOVE-satsen i RESTORE DATABASEförsöker återställningsproceduren skapa dem på samma sökväg som den ursprungliga servern.

    Du kan visa en lista över alla filer som ingår i säkerhetskopieringen:

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

    Du bör få en lista som i följande exempel (endast de två första kolumnerna visas):

    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      ..............
    

    Du kan använda den här listan för att skapa MOVE-satser för de extra filerna. I det här exemplet är 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. Kontrollera återställningen genom att visa alla databaser på servern. Den återställde databasen bör visas.

    SELECT name
    FROM sys.databases;
    GO
    
  4. Kör andra frågor i din migrerade databas. Följande kommando växlar kontexten till YourDB-databasen och väljer rader från en av dess tabeller.

    USE YourDB;
    
    SELECT *
    FROM YourTable;
    GO
    
  5. När du är klar med sqlcmdskriver du exit.

  6. När du är klar med att arbeta i fjärrsessionen ssh skriver du exit igen.

Nästa steg

I den här självstudien har du lärt dig hur du säkerhetskopierar en databas i Windows och flyttar den till en Linux-server som kör SQL Server. Du har lärt dig att:

  • Använda SSMS och Transact-SQL för att skapa en säkerhetskopia i Windows
  • Installera ett Bash-gränssnitt i Windows
  • Använd scp för att flytta säkerhetskopierade filer från Windows till Linux
  • Använda ssh- för att fjärransluta till din Linux-dator
  • Flytta säkerhetskopieringsfilen för att förbereda för återställning
  • Använd sqlcmd för att köra Transact-SQL kommandon
  • Återställa databassäkerhetskopian med kommandot RESTORE DATABASE
  • Kör frågan för att verifiera migreringen

Utforska sedan andra migreringsscenarier för SQL Server i Linux.