Migrieren einer SQL Server-Datenbank von Windows zu Linux mithilfe der Funktion Sichern und Wiederherstellen
Gilt für: SQL Server – 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. Dieses Tutorial enthält die erforderlichen Schritte, um eine Datenbank mithilfe von Sicherungs- und Wiederherstellungsmethoden zu 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:
Auf einem Windows-Computer:
- Installierte SQL Server-Instanz
- Installiertes SQL Server Management Studio
- Zieldatenbank, die migriert werden soll
Auf einem Linux-Computer:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server oder Ubuntu) mit Befehlszeilentools.
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:
Starten Sie auf Ihrem Windows-Computer SQL Server Management Studio.
Geben Sie im Verbindungsdialogfeld localhost ein.
Erweitern Sie im Objekt-Explorer den Eintrag Datenbanken.
Klicken Sie mit der rechten Maustaste auf die Zieldatenbank, wählen Sie Aufgaben aus, und wählen Sie dann Sichern....
Vergewissern Sie sich, dass im Dialogfeld Datenbank sichern die Option Sicherungstyp auf Vollständig und die Option Sichern auf auf Datenträger festgelegt ist. Notieren Sie sich Name und Speicherort der Datei. Eine Datenbank mit dem Namen
YourDB
in SQL Server 2019 (15.x) besitzt beispielsweise den StandardsicherungspfadC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.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. Mit dem folgenden Transact-SQL-Befehl werden für eine Datenbank namens YourDB
dieselben Aktionen ausgeführt wie durch die vorherigen Schritte:
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 aus einer Bash-Shell (Terminalfenster), die unter Windows ausgeführt wird, zu Linux verschoben.
Installieren Sie auf Ihrem Windows-Computer eine Bash-Shell, die die Befehle scp (sicheres Kopieren) und ssh (Remoteanmeldung) unterstützt. Zwei Beispiele hierfür sind:
- Windows-Subsystem für Linux (Windows 10)
- Bash-Shell von Git (https://git-scm.com/downloads)
Öffnen Sie eine Bash-Sitzung unter Windows.
Kopieren der Sicherungsdatei zu Linux
Navigieren Sie in Ihrer Bash-Sitzung zum Verzeichnis, das die Sicherungsdatei enthält. Beispiel:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
Übertragen Sie mit dem Befehl scp die Datei auf den Linux-Zielcomputer. Im folgenden Beispiel wird die Datei
YourDB.bak
in das Basisverzeichnis vonuser1
auf dem Linux-Server mit der IP-Adresse 192.0.2.9 übertragen:scp YourDB.bak user1@192.0.2.9:./
Tipp
Für die Übertragung der Datei mit scp gibt es Alternativen. So können Sie beispielsweise mit Samba eine SMB-Netzwerkfreigabe zwischen Windows und Linux konfigurieren. Eine exemplarische Vorgehensweise unter 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. \\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 in SQL Server wiederherstellen, müssen Sie die Sicherung in ein Unterverzeichnis von /var/opt/mssql
verschieben, da dies im Besitz von Benutzer mssql
und Gruppe mssql
ist. Wenn Sie den standardmäßigen Sicherungsspeicherort ändern möchten, nutzen Sie die Informationen im Artikel Ändern des Standardspeicherorts für das Sicherungsverzeichnis.
Stellen Sie in derselben Bash-Sitzung unter Windows eine Remoteverbindung mit Ihrem Linux-Zielcomputer über ssh her. Im folgenden Beispiel wird eine Verbindung mit dem Linux-Computer
192.0.2.9
für den Benutzeruser1
hergestellt.ssh user1@192.0.2.9
Jetzt führen Sie Befehle auf dem Linux-Remoteserver aus.
Wechseln Sie in den Administratormodus.
sudo su
Erstellen Sie ein neues Sicherungsverzeichnis. Der Parameter „
-p
“ hat keine Auswirkungen, sollte das Verzeichnis bereits vorhanden sein.mkdir -p /var/opt/mssql/backup
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/
Beenden Sie den Administratormodus.
exit
Wiederherstellen der Datenbank unter Linux
Verwenden Sie zum Wiederherstellen der Datenbanksicherung den Transact-SQL-Befehl (TQL) RESTORE DATABASE
.
In den folgenden Schritten wird das Tool sqlcmd verwendet. Wenn Sie SQL Server-Tools noch nicht installiert haben, finden Sie Informationen zur Vorgehensweise unter Install SQL Server command-line tools on Linux (Installieren von SQL Server-Befehlszeilentools sqlcmd und bcp unter Linux).
Starten Sie im selben Terminal das Tool sqlcmd. Im folgenden Beispiel wird für den
SA
-Benutzer eine Verbindung mit der lokalen SQL Server-Instanz hergestellt. Geben Sie das Kennwort ein, wenn Sie dazu aufgefordert werden. Alternativ dazu können Sie das Kennwort angeben, indem Sie den Parameter-P
hinzufügen.sqlcmd -S localhost -U SA
Geben Sie bei der Eingabeaufforderung
>1
den folgenden Befehl vom TypRESTORE DATABASE
ein, und drücken Sie nach jeder Zeile die EINGABETASTE (der mehrzeilige Befehl kann nicht auf einmal kopiert und eingefügt werden). Ersetzen SieYourDB
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.
Möglicherweise gibt
RESTORE DATABASE
einen Fehler zurück, der etwa wie folgt aussieht: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. Sind diese Dateien nicht in der
MOVE
-Klausel vonRESTORE DATABASE
angegeben, wird im Wiederherstellungsverfahren versucht, sie im gleichen 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
Die angezeigte Liste sollte in etwa wie das folgende Beispiel aussehen (nur die beiden ersten Spalten werden angezeigt):
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 ..............
Mit dieser Liste können Sie
MOVE
-Klauseln für die zusätzlichen Dateien erstellen. In diesem Beispiel siehtRESTORE 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
Ü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
Führen Sie für die migrierte Datenbank weitere Abfragen aus. Mit dem folgenden Befehl wird ein Kontextwechsel zur Datenbank
YourDB
durchgeführt und Zeilen aus einer der Tabellen daraus ausgewählt.USE YourDB SELECT * FROM YourTable GO
Wenn Sie das Tool sqlcmd beenden möchten, geben Sie
exit
ein.Wenn Sie die Remotesitzung über ssh beenden möchten, geben Sie noch einmal
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.