Migrace databáze SQL Serveru z Windows do Linuxu pomocí zálohování a obnovení

Platí pro:SQL Server na Linuxu

Funkce zálohování a obnovení SQL Serveru je doporučeným způsobem migrace databáze z SQL Serveru ve Windows na SQL Server v Linuxu. V tomto kurzu si projdete kroky potřebné k přesunutí databáze do Linuxu pomocí technik zálohování a obnovení.

  • Vytvořte záložní soubor ve Windows pomocí SQL Server Management Studio (SSMS)
  • Instalace prostředí Bash ve Windows
  • Přesunutí záložního souboru do Linuxu z prostředí Bash
  • Obnovte zálohovací soubor na Linuxu pomocí Transact-SQL (T-SQL)
  • Spuštěním dotazu ověřte migraci.

Můžete také vytvořit skupinu dostupnosti AlwaysOn SQL Serveru pro migraci databáze SQL Serveru z Windows do Linuxu. Viz Konfigurace skupiny dostupnosti SQL Server Always On ve Windows a Linuxu (multiplatformní).

Předpoklady

K dokončení tohoto kurzu jsou vyžadovány následující požadavky:

Vytvoření zálohy ve Windows

Existuje několik způsobů, jak vytvořit záložní soubor databáze ve Windows. Následující kroky používají APLIKACI SQL Server Management Studio (SSMS).

  1. Na počítači s Windows spusťte SQL Server Management Studio.

  2. V dialogovém okně připojení zadejte localhost .

  3. V Průzkumníku objektů rozbalte Databáze.

  4. Klikněte pravým tlačítkem na cílovou databázi, vyberte Úkolya pak vyberte Zálohovat....

    snímek obrazovky s použitím aplikace SSMS k vytvoření záložního souboru

  5. V dialogu Zálohování databáze ověřte, že je možnost typu zálohyplná a možnost zálohování na disk je Záloha. Všimněte si názvu a umístění souboru. Například databáze s názvem YourDB na SQL Serveru 2019 (15.x) má výchozí záložní cestu C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

  6. Pokud chcete zálohovat databázi, vyberte OK.

Další možností je spustit T-SQL dotaz pro vytvoření zálohovacího souboru. Následující příkaz T-SQL provádí stejné akce jako předchozí kroky pro databázi nazvanou 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

Instalace prostředí Bash ve Windows

Chcete-li obnovit databázi, musíte nejprve přenést záložní soubor z počítače s Windows na cílový počítač s Linuxem. V tomto kurzu přesuneme soubor do Linuxu z prostředí Bash (okno terminálu) spuštěného na Windows.

  1. Na počítač Windows nainstalujte prostředí Bash, které podporuje příkazy scp (zabezpečená kopie) a ssh (vzdálené přihlašování). Mezi dva příklady patří:

  2. Otevřete Bash session na Windows.

Zkopírování záložního souboru do Linuxu

  1. Ve své Bash relaci přejděte do složky obsahující váš záložní soubor. Příklad:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
    
  2. Pomocí příkazu scp přeneste soubor do cílového počítače s Linuxem. Následující příklad přenese YourDB.bak do domovského adresáře user1 na serveru s Linuxem s IP adresou 192.168.2.9:

    scp YourDB.bak user1@192.168.2.9:./
    

    Tady je očekávaný výstup:

    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

Existují alternativy k použití scp pro přenos souborů. Jedna možnost je použít Samba ke konfiguraci sdílené síťové složky SMB mezi Linuxem a Windows. Pokud potřebujete návod na Ubuntu, podívejte se na Samba jako souborový server. Po vytvoření můžete k ní přistupovat jako ke sdílené síťové složce ze systému Windows, například \\machinenameorip\share.

Přesunutí záložního souboru před obnovením

V tomto okamžiku se záložní soubor nachází na vašem linuxovém serveru v domovském adresáři uživatele. Před obnovením databáze na SQL Server je nutné umístit zálohu do podadresáře /var/opt/mssql, protože tento adresář vlastní uživatel mssql a skupina mssql. Pokud chcete změnit výchozí umístění zálohování, přečtěte si článek Konfigurace pomocí nástroje mssql-conf.

  1. Ve stejné Windows Bash relaci se připojte vzdáleně ke svému cílovému linuxovému stroji přes ssh. Následující příklad se připojí k počítači s Linuxem 192.168.2.9 jako uživatel user1.

    ssh user1@192.168.2.9
    

    Teď spouštíte příkazy na vzdáleném serveru s Linuxem.

  2. Přejděte do režimu superuživatele.

    sudo su
    
  3. Vytvořte nový záložní adresář. Parametr -p nedělá nic, pokud adresář již existuje.

    mkdir -p /var/opt/mssql/backup
    
  4. Přesuňte záložní soubor do daného adresáře. V následujícím příkladu se záložní soubor nachází v domovském adresáři user1. Změňte příkaz tak, aby odpovídal umístění a názvu souboru záložního souboru.

    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
    
  5. Ukončete režim superuživatele.

    exit
    

Obnovení databáze v Linuxu

Pro obnovení zálohy databáze můžete použít RESTORE DATABASE příkaz T-SQL.

Následující kroky používají sqlcmd nástroj. Pokud jste nenainstalovali nástroje SQL Serveru, přečtěte si téma Instalace nástrojů sqlcmd a bcp SQL Serveru příkazového řádku v Linuxu.

  1. Ve stejném terminálu spusťte sqlcmd. Následující příklad se připojí k místní instanci SQL Serveru pomocí účtu sa. Po zobrazení výzvy zadejte heslo nebo zadejte heslo přidáním parametru -P.

    sqlcmd -S localhost -U sa
    
  2. Na příkazovém řádku >1 zadejte následující příkaz RESTORE DATABASE a po každém řádku stiskněte klávesu ENTER (nemůžete zkopírovat a vložit celý příkaz s více řádky najednou). Nahraďte všechny výskyty YourDB názvem vaší databáze.

    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
    

    Měli byste dostat zprávu, že databáze byla úspěšně obnovena.

    RESTORE DATABASE může vrátit chybu jako v následujícím příkladu:

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

    V tomto případě databáze obsahuje sekundární soubory. Pokud nejsou tyto soubory zadány v klauzuli MOVE v rámci RESTORE DATABASE, postup obnovení se je pokusí vytvořit ve stejné složce jako původní server.

    Můžete zobrazit seznam všech souborů zahrnutých do zálohy:

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

    Měli byste dostat seznam jako v následujícím příkladu (uvádějící pouze první dva sloupce):

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

    Tento seznam můžete použít k vytvoření MOVE klauzulí pro extra soubory. V tomto příkladu je 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. Ověřte obnovení výpisem všech databází na serveru. Obnovená databáze by měla být uvedená.

    SELECT name
    FROM sys.databases;
    GO
    
  4. Spusťte další dotazy na migrovanou databázi. Následující příkaz přepne kontext do databáze YourDB a vybere řádky z jedné z jejích tabulek.

    USE YourDB;
    
    SELECT *
    FROM YourTable;
    GO
    
  5. Až budete hotovi s používáním sqlcmd, zadejte exit.

  6. Až budete hotovi s prací ve vzdálené relaci ssh, zadejte příkaz exit znovu.

Další krok

V tomto kurzu jste zjistili, jak zálohovat databázi ve Windows a přesunout ji na linuxový server s SQL Serverem. Naučili jste se:

  • Použijte SSMS a T-SQL k vytvoření zálohovacího souboru ve Windows
  • Instalace prostředí Bash ve Windows
  • Přesunutí záložních souborů z Windows do Linuxu pomocí scp
  • Použití ssh k vzdálenému připojení k počítači s Linuxem
  • Přemístění záložního souboru pro přípravu na obnovení
  • Použití sqlcmd pro spouštění příkazů T-SQL
  • Obnovení zálohy databáze pomocí příkazu RESTORE DATABASE
  • Spuštěním dotazu ověřte migraci.

Dále prozkoumejte další scénáře migrace SQL Serveru v Linuxu.