Een SQL Server-database migreren van Windows naar Linux met behulp van back-up en herstel

Van toepassing op:SQL Server op Linux

De functie voor back-up en herstel van SQL Server is de aanbevolen manier om een database te migreren van SQL Server in Windows naar SQL Server op Linux. In deze zelfstudie doorloopt u de stappen die nodig zijn voor het verplaatsen van een database naar Linux met back-up- en hersteltechnieken.

  • Maak een back-upbestand aan op Windows met SQL Server Management Studio (SSMS)
  • Een Bash-shell installeren in Windows
  • Het back-upbestand verplaatsen naar Linux vanuit de Bash-shell
  • Herstel het back-upbestand op Linux met Transact-SQL (T-SQL)
  • Een query uitvoeren om de migratie te controleren

U kunt ook een SQL Server AlwaysOn-beschikbaarheidsgroep maken om een SQL Server-database van Windows naar Linux te migreren. Zie de SQL Server Always On beschikbaarheidsgroep configureren op Windows en Linux (cross-platform).

Prerequisites

De volgende vereisten zijn vereist om deze zelfstudie te voltooien:

Een back-up maken in Windows

Er zijn verschillende manieren om een back-upbestand van een database in Windows te maken. In de volgende stappen wordt SQL Server Management Studio (SSMS) gebruikt.

  1. Start SQL Server Management Studio- op uw Windows-computer.

  2. Voer in het verbindingsdialoog de tekst localhostin.

  3. Vouw Databases uit in Objectverkenner.

  4. Klik met de rechtermuisknop op de doeldatabase, selecteer Takenen selecteer vervolgens Back-up maken....

    Schermopname van het gebruik van SSMS om een back-upbestand te maken.

  5. Controleer in het dialoogvenster Back-updatabase of de optie Back-uptype is ingesteld op Volledig en dat de optie Back-up maken naar is ingesteld op Schijf. Noteer de naam en locatie van het bestand. Een database met de naam YourDB op SQL Server 2019 (15.x) heeft bijvoorbeeld een standaardback-uppad van C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

  6. Selecteer OK- om een back-up van uw database te maken.

Een andere optie is om een T-SQL-query uit te voeren om het back-upbestand aan te maken. Het volgende T-SQL-commando voert dezelfde acties uit als de vorige stappen voor een database genaamd 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

Een Bash-shell installeren in Windows

Als u de database wilt herstellen, moet u eerst het back-upbestand van de Windows-computer overbrengen naar de Linux-doelcomputer. In deze zelfstudie verplaatsen we het bestand naar Linux vanuit een Bash-shell (terminalvenster) dat wordt uitgevoerd op Windows.

  1. Installeer een Bash-shell op uw Windows-computer die ondersteuning biedt voor de opdrachten scp (veilig kopiëren) en ssh (externe aanmelding). Twee voorbeelden zijn:

  2. Open een Bash-sessie op Windows.

Het back-upbestand kopiëren naar Linux

  1. Navigeer in je Bash-sessie naar de map met je back-upbestand. Voorbeeld:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
    
  2. Gebruik de opdracht scp om het bestand over te dragen naar de Linux-doelcomputer. In het volgende voorbeeld worden YourDB.bak overgedragen naar de basismap van user1 op de Linux-server met een IP-adres van 192.168.2.9:

    scp YourDB.bak user1@192.168.2.9:./
    

    Dit is de verwachte uitvoer:

    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
    

Tip

Er zijn alternatieven voor het gebruik van scp- voor bestandsoverdracht. Een is het gebruik van Samba om een SMB-netwerkshare tussen Windows en Linux te configureren. Zie Samba als bestandsservervoor een overzicht van Ubuntu. Zodra dit is ingesteld, kunt u deze openen als een netwerkbestandsshare vanuit Windows, zoals \\machinenameorip\share.

Het back-upbestand verplaatsen voordat u het herstelt

Op dit moment bevindt het back-upbestand zich op uw Linux-server in de basismap van uw gebruiker. Voordat u de database herstelt in SQL Server, moet u de back-up in een submap van /var/opt/mssql plaatsen, omdat deze submap eigendom is van de gebruiker mssql en groep mssql. Als u de standaardback-uplocatie wilt wijzigen, raadpleegt u het artikel Configureren met mssql-conf.

  1. In dezelfde Windows Bash-sessie verbind je op afstand met je doel-Linux-machine met ssh. In het volgende voorbeeld wordt verbinding gemaakt met de Linux-machine 192.168.2.9 als gebruiker user1.

    ssh user1@192.168.2.9
    

    U voert nu opdrachten uit op de externe Linux-server.

  2. Schakel over naar de supergebruikermodus.

    sudo su
    
  3. Maak een nieuwe back-upmap. De parameter -p doet niets als de map al bestaat.

    mkdir -p /var/opt/mssql/backup
    
  4. Verplaats het back-upbestand naar die map. In het volgende voorbeeld bevindt het back-upbestand zich in de basismap van user1. Wijzig de opdracht zodat deze overeenkomt met de locatie en bestandsnaam van het back-upbestand.

    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
    
  5. Superusermodus afsluiten.

    exit
    

Uw database herstellen in Linux

Om de database-back-up te herstellen, kun je het RESTORE DATABASE T-SQL-commando gebruiken.

In de volgende stappen wordt het sqlcmd hulpprogramma gebruikt. Zie SqlCmd en bcp SQL Server-opdrachtregelprogramma's installeren op Linux als u geen SQL Server-hulpprogramma's hebt geïnstalleerd.

  1. Start sqlcmdin dezelfde terminal. In het volgende voorbeeld wordt verbinding gemaakt met het lokale SQL Server-exemplaar met het sa-account. Voer het wachtwoord in wanneer u hierom wordt gevraagd of geef het wachtwoord op door de parameter -P toe te voegen.

    sqlcmd -S localhost -U sa
    
  2. Voer bij de >1 prompt de volgende RESTORE DATABASE opdracht in en druk na elke regel op Enter (u kunt de volledige opdracht met meerdere regels niet tegelijk kopiëren en plakken). Vervang alle voorkomens van YourDB door de naam van uw database.

    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
    

    Je zou een bericht moeten krijgen dat de database succesvol is hersteld.

    RESTORE DATABASE kan een fout retourneren zoals het volgende voorbeeld laat zien:

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

    In dit geval bevat de database secundaire bestanden. Als deze bestanden niet zijn opgegeven in de MOVE component van RESTORE DATABASE, probeert de herstelprocedure deze te maken in hetzelfde pad als de oorspronkelijke server.

    U kunt alle bestanden in de back-up weergeven:

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

    Je zou een lijst moeten krijgen zoals het volgende voorbeeld (met alleen de eerste twee kolommen):

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

    U kunt deze lijst gebruiken om MOVE clausules te maken voor de extra bestanden. In dit voorbeeld is de 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. Controleer het herstel door alle databases op de server te vermelden. De herstelde database moet worden vermeld.

    SELECT name
    FROM sys.databases;
    GO
    
  4. Voer andere query's uit op uw gemigreerde database. Met de volgende opdracht wordt de context overgeschakeld naar de YourDB-database en worden rijen uit een van de tabellen geselecteerd.

    USE YourDB;
    
    SELECT *
    FROM YourTable;
    GO
    
  5. Wanneer u klaar bent met het gebruik van sqlcmd, typt u exit.

  6. Wanneer u klaar bent met werken in de externe ssh sessie, typt u exit opnieuw.

Volgende stap

In deze zelfstudie hebt u geleerd hoe u een back-up maakt van een database in Windows en deze verplaatst naar een Linux-server met SQL Server. U hebt geleerd hoe u het volgende kunt doen:

  • Gebruik SSMS en T-SQL om een back-upbestand aan te maken op Windows
  • Een Bash-shell installeren in Windows
  • Gebruik scp- om back-upbestanden van Windows naar Linux te verplaatsen
  • Gebruik ssh- om op afstand verbinding te maken met uw Linux-computer
  • Het back-upbestand verplaatsen om de herstelbewerking voor te bereiden
  • Gebruik sqlcmd om T-SQL-commando's uit te voeren
  • De databaseback-up herstellen met de opdracht RESTORE DATABASE
  • Een query uitvoeren om de migratie te controleren

Bekijk vervolgens andere migratiescenario's voor SQL Server in Linux.