Teilen über


Migrieren einer SQL Server-Datenbank von Windows zu Linux mithilfe der Funktion Sichern und Wiederherstellen

Gilt für:SQL Server unter Linux

Wenn Sie eine Datenbank von SQL Server unter Windows zu SQL Server unter Linux migrieren möchten, wird die Verwendung der SQL Server-Funktion Sichern und Wiederherstellen empfohlen. In diesem Tutorial werden Sie die erforderlichen Schritte durchlaufen, um eine Datenbank mit Hilfe von Sicherungs- und Wiederherstellungstechniken auf Linux zu verschieben.

  • Erstellen einer Sicherungsdatei unter Windows mit SSMS
  • Installieren einer Bash-Shell unter Windows
  • Verschieben der Sicherungsdatei von der Bash-Shell zu Linux
  • Wiederherstellen der Sicherungsdatei unter Linux mit Transact-SQL
  • Ausführen einer Abfrage zur Überprüfung der Migration

Eine weitere Möglichkeit zur Migration einer SQL Server-Datenbank von Windows zu Linux besteht darin, eine SQL Server Always On-Verfügbarkeitsgruppe zu erstellen. Informationen hierzu finden Sie unter sql-server-linux-availability-group-cross-platform.

Voraussetzungen

Zur Durchführung dieses Tutorials ist Folgendes erforderlich:

Erstellen einer Sicherung unter Windows

Es gibt mehrere Möglichkeiten, unter Windows eine Sicherungsdatei einer Datenbank zu erstellen. In den folgenden Schritten wird hierzu SQL Server Management Studio (SSMS) verwendet:

  1. Starten Sie auf Ihrem Windows-Computer SQL Server Management Studio.

  2. Geben Sie im Verbindungsdialogfeld localhost ein.

  3. Erweitern Sie im Objekt-Explorer den Eintrag Datenbanken.

  4. Klicken Sie mit der rechten Maustaste auf Ihre Zieldatenbank, wählen Sie Aufgaben aus und dann Back Up....

    Screenshot der Verwendung von SSMS zur Erstellung einer Sicherungsdatei.

  5. Vergewissern Sie sich im Dialog Datenbank sichern, dass die Option Sicherungstyp auf Vollständig und die Option Sichern auf auf Festplatte steht. Notieren Sie sich Name und Speicherort der Datei. Eine Datenbank mit dem Namen YourDB auf SQL Server 2019 (15.x) hat zum Beispiel den Standard-Sicherungspfad C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

  6. Wählen Sie OK aus, um die Datenbank zu sichern.

Eine weitere Möglichkeit zum Erstellen der Sicherungsdatei besteht darin, eine Transact-SQL-Abfrage auszuführen. Der folgende Transact-SQL-Befehl führt die gleichen Aktionen wie die vorherigen Schritte für eine Datenbank namens YourDB aus:

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

Installieren einer Bash-Shell unter Windows

Übertragen Sie zum Wiederherstellen der Datenbank zunächst die Sicherungsdatei vom Windows-Computer auf den Linux-Zielcomputer. In diesem Tutorial wird die Datei von einer Bash-Shell (Terminalfenster), die unter Windows läuft, nach Linux verschoben.

  1. Installieren Sie eine Bash-Shell auf Ihrem Windows-Rechner, die die Befehle scp (sichere Kopie) und ssh (Fernanmeldung) unterstützt. Zwei Beispiele hierfür sind:

  2. Öffnen Sie eine Bash-Sitzung unter Windows.

Kopieren der Sicherungsdatei zu Linux

  1. Navigieren Sie in Ihrer Bash-Sitzung zum Verzeichnis, das die Sicherungsdatei enthält. Zum Beispiel:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
    
  2. Übertragen Sie mit dem Befehl scp die Datei auf den Linux-Zielcomputer. Das folgende Beispiel überträgt YourDB.bak in das Home-Verzeichnis von user1 auf dem Linux-Server mit der IP-Adresse 192.168.2.9:

    scp YourDB.bak user1@192.168.2.9:./
    

    Die Ausgabe sollte der folgenden ähneln:

    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
    

Tipp

Es gibt Alternativen zur Verwendung von scp für die Dateiübertragung. So können Sie beispielsweise mit Samba eine SMB-Netzwerkfreigabe zwischen Windows und Linux konfigurieren. Eine Anleitung für Ubuntu finden Sie unter Samba als Dateiserver. Nachdem Sie die Freigabe erstellt haben, können Sie darauf von Windows aus wie auf eine Netzwerkdateifreigabe zugreifen (z. B. mit \\machinenameorip\share).

Verschieben der Sicherungsdatei vor der Wiederherstellung

Nun befindet sich die Sicherungsdatei auf dem Linux-Server im Basisverzeichnis Ihres Benutzers. Bevor Sie die Datenbank auf SQL Server wiederherstellen, müssen Sie die Sicherung in einem Unterverzeichnis von /var/opt/mssql platzieren, da dieses Verzeichnis dem Benutzer mssql und der Gruppe mssql gehört. Wenn Sie den Standard-Sicherungsort ändern möchten, lesen Sie den Artikel Konfiguration mit mssql-conf.

  1. Verbinden Sie sich in derselben Windows-Bash-Sitzung per Fernzugriff mit Ihrem Linux-Zielrechner mit ssh. Das folgende Beispiel stellt eine Verbindung zum Linux-Rechner 192.168.2.9 als Benutzer user1 her.

    ssh user1@192.168.2.9
    

    Sie führen jetzt Befehle auf dem Remote-Linux-Server aus.

  2. Wechseln Sie in den Administratormodus.

    sudo su
    
  3. Erstellen Sie ein neues Sicherungsverzeichnis. Der Parameter -p bewirkt nichts, wenn das Verzeichnis bereits existiert.

    mkdir -p /var/opt/mssql/backup
    
  4. Verschieben Sie die Sicherungsdatei in dieses Verzeichnis. Im folgenden Beispiel befindet sich die Sicherungsdatei im Basisverzeichnis von user1. Ändern Sie den Befehl so, dass er mit dem Speicherort und dem Dateinamen Ihrer Sicherungsdatei übereinstimmt.

    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
    
  5. Beenden Sie den Administratormodus.

    exit
    

Wiederherstellen der Datenbank unter Linux

Um die Datenbanksicherung wiederherzustellen, können Sie den Befehl RESTORE DATABASE Transact-SQL (TQL) nutzen.

In den folgenden Schritten wird das Tool sqlcmd verwendet. Wenn Sie keine SQL Server-Tools installiert haben, lesen Sie "Installieren der sqlcmd- und bcp SQL Server-Befehlszeilentools unter Linux".

  1. Starten Sie im selben Terminal das Tool sqlcmd. Das folgende Beispiel stellt eine Verbindung zur lokalen SQL Server-Instanz mit dem Konto sa her. Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden, oder geben Sie das Passwort durch Hinzufügen des Parameters -P an.

    sqlcmd -S localhost -U sa
    
  2. Geben Sie an der Eingabeaufforderung >1 den folgenden RESTORE DATABASE-Befehl ein und drücken Sie nach jeder Zeile ENTER (Sie können nicht den gesamten mehrzeiligen Befehl auf einmal kopieren und einfügen). Ersetzen Sie YourDB jedes Mal durch den Namen Ihrer Datenbank.

    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
    

    Nun sollten Sie die Meldung erhalten, dass die Datenbank erfolgreich wiederhergestellt wurde.

    RESTORE DATABASE könnte einen Fehler wie im folgenden Beispiel zurückgeben:

    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 diesem Fall enthält die Datenbank sekundäre Dateien. Wenn diese Dateien nicht in der MOVE-Klausel von RESTORE DATABASE angegeben sind, versucht die Wiederherstellungsprozedur, sie unter demselben Pfad wie der ursprüngliche Server zu erstellen.

    Sie können alle in der Sicherung enthaltenen Dateien auflisten:

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

    Sie sollten eine Liste wie das folgende Beispiel erhalten (in der nur die ersten beiden Spalten aufgeführt sind):

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

    Sie können diese Liste verwenden, um MOVE-Klauseln für die zusätzlichen Dateien zu erstellen. In diesem Beispiel sieht RESTORE DATABASE folgendermaßen aus:

    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. Überprüfen Sie die Wiederherstellung, indem Sie alle Datenbanken auf dem Server auflisten. Dabei sollte die wiederhergestellte Datenbank aufgeführt werden.

    SELECT name
    FROM sys.databases;
    GO
    
  4. Führen Sie für die migrierte Datenbank weitere Abfragen aus. Der folgende Befehl wechselt den Kontext zur Datenbank YourDB und wählt Zeilen aus einer ihrer Tabellen aus.

    USE YourDB;
    
    SELECT *
    FROM YourTable;
    GO
    
  5. Wenn Sie sqlcmd beendet haben, geben Sie exit ein.

  6. Wenn Sie die Arbeit in der remote ssh-Sitzung beendet haben, geben Sie erneut exit ein.

Nächster Schritt

In diesem Tutorial haben Sie erfahren, wie Sie eine Datenbank unter Windows sichern und auf einen Linux-Server mit SQL Server verschieben. Sie haben Folgendes gelernt:

  • Erstellen einer Sicherungsdatei unter Windows mit SSMS und Transact-SQL
  • Installieren einer Bash-Shell unter Windows
  • Verschieben von Sicherungsdateien von Windows zu Linux mit scp
  • Herstellen einer Remoteverbindung mit Ihrem Linux-Computer über ssh
  • Verschieben der Sicherungsdatei als Vorbereitung für die Wiederherstellung
  • Ausführen von Transact-SQL-Befehlen mit sqlcmd
  • Wiederherstellen der Datenbanksicherung mit dem Befehl RESTORE DATABASE
  • Ausführen der Abfrage zur Überprüfung der Migration

Lernen Sie als Nächstes weitere Migrationsszenarios für SQL Server unter Linux kennen.