Sdílet prostřednictvím


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

platí pro:SQL Server – Linux

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ření záložního souboru ve Windows pomocí SSMS
  • Instalovat prostředí Bash na Windows
  • Přesunutí záložního souboru do Linuxu z prostředí Bash
  • Obnovení záložního souboru v Linuxu pomocí Transact-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 sql-server-linux-availability-group-multiplatformní.

Požadavky

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 položku 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 dialogovém okně Zálohovat databázi ověřte, že je možnost Typ zálohováníúplná a možnost Zálohovat nadisk. Poznamenejte si název 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 Transact-SQL dotaz pro vytvoření záložního souboru. Následující příkaz Transact-SQL provede stejné akce jako předchozí kroky pro databázi s názvem 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

Instalovat prostředí Bash na 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 ve Windows.

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

  2. Otevřete relaci Bash ve Windows.

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

  1. V relaci Bash přejděte do adresáře obsahujícího záložní soubor. Napří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
    

Spropitné

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é relaci Bash ve Windows se vzdáleně připojte k cílovému počítači s Linuxem pomocí 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

K obnovení zálohy databáze můžete použít příkaz RESTORE DATABASE Transact-SQL (TQL).

Následující kroky používají nástroj sqlcmd. 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ěla by se zobrazit zpráva, že se databáze úspěšně obnovila.

    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 získat seznam podobný následujícímu příkladu (výpis pouze dvou prvních sloupců):

    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 pomocí 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žití SSMS a Transact-SQL k vytvoření záložní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 ke spuštění příkazů Transact-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.