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:
På en Windows-dator:
- SQL Server- installerat.
- SQL Server Management Studio har installerats.
- Måldatabas som ska migreras.
På en Linux-dator:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Servereller Ubuntu) med kommandoradsverktyg.
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).
Starta SQL Server Management Studio på din Windows-dator.
I anslutningsdialogrutan anger du localhost.
I Object Explorer expanderar du Databaser.
Högerklicka på måldatabasen, välj Åtgärderoch välj sedan Säkerhetskopiera....
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 avC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.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.
Installera ett bash-gränssnitt på din Windows-dator som stöder kommandona scp (säker kopia) och ssh (fjärrinloggning). Två exempel är:
- Windows-undersystemet för Linux (Windows 10)
- Git bash-gränssnittet (https://git-scm.com/downloads)
Öppna en bash-session i Windows.
Kopiera säkerhetskopieringsfilen till Linux
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\'
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öruser1
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/mssql
eftersom 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.
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ändareuser1
.ssh user1@192.168.2.9
Nu kör du kommandon på linux-fjärrservern.
Ange superanvändarläge.
sudo su
Skapa en ny säkerhetskopieringskatalog. Parametern
-p
gör ingenting om katalogen redan finns.mkdir -p /var/opt/mssql/backup
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/
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.
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
I
>1
-kommandotolken anger du följandeRESTORE DATABASE
kommando och trycker på RETUR efter varje rad (du kan inte kopiera och klistra in hela flerradskommandot samtidigt). Ersätt alla förekomster avYourDB
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 iRESTORE DATABASE
fö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 ärRESTORE 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
Kontrollera återställningen genom att visa alla databaser på servern. Den återställde databasen bör visas.
SELECT name FROM sys.databases; GO
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
När du är klar med sqlcmdskriver du
exit
.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.