Een SQL Server-database migreren van Windows naar Linux met behulp van back-up en herstel
van toepassing op:SQL Server- - 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.
- Een back-upbestand maken in Windows met SSMS
- Een bash-shell installeren in Windows
- Het back-upbestand verplaatsen naar Linux vanuit de bash-shell
- Het back-upbestand in Linux herstellen met Transact-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 sql-server-linux-availability-group-cross-platform.
Voorwaarden
De volgende vereisten zijn vereist om deze zelfstudie te voltooien:
Op een Windows-computer:
- SQL Server geïnstalleerd.
- SQL Server Management Studio geïnstalleerd.
- Doeldatabase om te migreren.
Op een Linux-computer:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server, of Ubuntu) met opdrachtregelprogramma's.
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.
Start SQL Server Management Studio- op uw Windows-computer.
Voer in het verbindingsdialoog de tekst localhostin.
Vouw in Objectverkenner Databasesuit.
Klik met de rechtermuisknop op de doeldatabase, selecteer Takenen selecteer vervolgens Back-up maken....
Controleer in het dialoogvenster Back-up maken van database of back-uptype is Volledige en Back-up maken naar is 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 vanC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.Selecteer OK- om een back-up van uw database te maken.
Een andere optie is om een Transact-SQL query uit te voeren om het back-upbestand te maken. Met de volgende Transact-SQL opdracht worden dezelfde acties uitgevoerd als de vorige stappen voor een database met de naam 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) die wordt uitgevoerd in Windows.
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:
- Het Windows-subsysteem voor Linux (Windows 10)
- De Git bash-shell (https://git-scm.com/downloads)
Open een bash-sessie in Windows.
Het back-upbestand kopiëren naar Linux
Navigeer in uw bash-sessie naar de map met uw back-upbestand. Bijvoorbeeld:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
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 vanuser1
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 naar SQL Server, moet u de back-up in een submap van /var/opt/mssql
plaatsen, omdat deze eigendom is van de gebruiker mssql
en groep mssql
. Als u de standaardback-uplocatie wilt wijzigen, raadpleegt u het artikel Configureren met mssql-conf.
Maak in dezelfde Windows bash-sessie op afstand verbinding met uw linux-doelcomputer met ssh-. In het volgende voorbeeld wordt verbinding gemaakt met de Linux-machine
192.168.2.9
als gebruikeruser1
.ssh user1@192.168.2.9
U voert nu opdrachten uit op de externe Linux-server.
Voer de supergebruikersmodus in.
sudo su
Maak een nieuwe back-upmap. De parameter
-p
doet niets als de map al bestaat.mkdir -p /var/opt/mssql/backup
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/
Sluit de supergebruikersmodus af.
exit
Uw database herstellen in Linux
Als u de databaseback-up wilt herstellen, kunt u de opdracht RESTORE DATABASE
Transact-SQL (TQL) gebruiken.
In de volgende stappen wordt het hulpprogramma sqlcmd gebruikt. Als u SQL Server-hulpprogramma's nog niet hebt geïnstalleerd, raadpleegt u Sql Server-opdrachtregelprogramma's sqlcmd en bcp installeren op Linux.
Start in dezelfde terminal sqlcmd. 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
Voer bij de
>1
prompt de volgendeRESTORE 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 vanYourDB
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
U krijgt een bericht dat de database 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 vanRESTORE 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
U ziet een lijst zoals in het volgende voorbeeld (alleen de twee eerste kolommen worden weergegeven):
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 deRESTORE 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
Controleer het herstel door alle databases op de server te vermelden. De herstelde database moet worden vermeld.
SELECT name FROM sys.databases; GO
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
Wanneer u klaar bent met het gebruik van sqlcmd-, typt u
exit
.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:
- SSMS en Transact-SQL gebruiken om een back-upbestand te maken in 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 Transact-SQL opdrachten uit te voeren
- De databaseback-up herstellen met de opdracht
RESTORE DATABASE
- Voer de query uit om de migratie te controleren
Bekijk vervolgens andere migratiescenario's voor SQL Server in Linux.