Megosztás:


Ismerkedés a naplószállítással Linuxon

A következőkre vonatkozik:SQL Server Linux rendszeren

A naplószállítás egy magas rendelkezésre állású SQL Server-konfiguráció, amely egy elsődleges kiszolgáló adatbázisát replikálja egy vagy több másodlagos kiszolgálóra. A naplószállítás lehetővé teszi a forrásadatbázis biztonsági mentési fájljainak visszaállítását a másodlagos kiszolgálóra. Az elsődleges kiszolgáló rendszeres időközönként létrehozza a tranzakciónaplók biztonsági mentéseit, és a másodlagos kiszolgálók visszaállítják azokat, és frissítik az adatbázis másodlagos másolatát.

naplószállítási munkafolyamatot bemutató diagram.

Az előző ábrán leírtak szerint a naplószállítási munkamenet a következő lépéseket foglalja magában:

  • A tranzakció naplófájljának biztonsági mentése az elsődleges SQL Server-példányon
  • A tranzakciónapló biztonsági mentési fájljának másolása a hálózaton egy vagy több másodlagos SQL Server-példányra
  • A tranzakciónapló biztonsági mentési fájljának visszaállítása a másodlagos SQL Server-példányokon

Előfeltételek

Hálózati megosztás beállítása naplószállításhoz a CIFS használatával

Jegyzet

Ez az oktatóanyag a Common Internet File System (CIFS) és a Samba használatával állítja be a hálózati megosztást.

Elsődleges kiszolgáló konfigurálása

  1. Telepítse a Samba-t a következő paranccsal:

    • Red Hat Enterprise Linuxhoz (RHEL):

      sudo yum -y install samba
      
    • Ubuntu esetén:

      sudo apt-get install samba
      
  2. Hozzon létre egy könyvtárat a naplószállítás naplóinak tárolásához, és adja meg a mssql felhasználónak a szükséges engedélyeket:

    mkdir /var/opt/mssql/tlogs
    chown mssql:mssql /var/opt/mssql/tlogs
    chmod 0700 /var/opt/mssql/tlogs
    
  3. Szerkessze a /etc/samba/smb.conf fájlt (gyökérengedélyek szükségesek), és adja hozzá a következő szakaszt:

    [tlogs]
    path=/var/opt/mssql/tlogs
    available=yes
    read only=yes
    browsable=yes
    public=yes
    writable=no
    
  4. Hozzon létre egy mssql felhasználót a Samba számára:

    sudo smbpasswd -a mssql
    
  5. Indítsa újra a Samba-szolgáltatásokat:

    sudo systemctl restart smbd.service nmbd.service
    

Másodlagos kiszolgáló konfigurálása

  1. Telepítse a CIFS-ügyfelet a következő paranccsal:

    • RHEL esetén:

      sudo yum -y install cifs-utils
      
    • Ubuntu esetén:

      sudo apt-get install cifs-utils
      
  2. Hozzon létre egy fájlt a hitelesítő adatok tárolásához. Ebben a példában /var/opt/mssql/.tlogcredshasználunk. Használja a mssql Samba-fiókhoz nemrég beállított jelszót, és cserélje le a <domain>:

    username=mssql
    domain=<domain>
    password=<password>
    
  3. Futtassa a következő parancsokat egy üres könyvtár létrehozásához a csatlakoztatáshoz, valamint az engedélyek és a tulajdonjog helyes beállításához:

    mkdir /var/opt/mssql/tlogs
    sudo chown root:root /var/opt/mssql/tlogs
    sudo chmod 0550 /var/opt/mssql/tlogs
    sudo chown root:root /var/opt/mssql/.tlogcreds
    sudo chmod 0660 /var/opt/mssql/.tlogcreds
    
  4. A megosztás megőrzéséhez adja hozzá a etc/fstab sorát. Cserélje le a <ip_address_of_primary_server> a megfelelő értékre:

    //<ip_address_of_primary_server>/tlogs /var/opt/mssql/tlogs cifs credentials=/var/opt/mssql/.tlogcreds,ro,uid=mssql,gid=mssql 0 0
    
  5. Megosztások felcsatolása:

    sudo mount -a
    

Naplótovábbítás beállítása Transact-SQL

  1. Az adatbázis biztonsági mentése az elsődleges kiszolgálón:

    BACKUP DATABASE SampleDB
        TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak';
    GO
    
  2. Naplókiszállítás konfigurálása az elsődleges szerveren:

    DECLARE @LS_BackupJobId AS UNIQUEIDENTIFIER;
    DECLARE @LS_PrimaryId AS UNIQUEIDENTIFIER;
    DECLARE @SP_Add_RetCode AS INT;
    
    EXECUTE
        @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database
        @database = N'SampleDB',
        @backup_directory = N'/var/opt/mssql/tlogs',
        @backup_share = N'/var/opt/mssql/tlogs',
        @backup_job_name = N'LSBackup_SampleDB',
        @backup_retention_period = 4320,
        @backup_compression = 2,
        @backup_threshold = 60,
        @threshold_alert_enabled = 1,
        @history_retention_period = 5760,
        @backup_job_id = @LS_BackupJobId OUTPUT,
        @primary_id = @LS_PrimaryId OUTPUT,
        @overwrite = 1;
    
    IF (@@ERROR = 0
        AND @SP_Add_RetCode = 0)
        BEGIN
            DECLARE @LS_BackUpScheduleUID AS UNIQUEIDENTIFIER;
            DECLARE @LS_BackUpScheduleID AS INT;
                    EXECUTE msdb.dbo.sp_add_schedule
                @schedule_name = N'LSBackupSchedule',
                @enabled = 1,
                @freq_type = 4,
                @freq_interval = 1,
                @freq_subday_type = 4,
                @freq_subday_interval = 15,
                @freq_recurrence_factor = 0,
                @active_start_date = 20170418,
                @active_end_date = 99991231,
                @active_start_time = 0,
                @active_end_time = 235900,
                @schedule_uid = @LS_BackUpScheduleUID OUTPUT,
                @schedule_id = @LS_BackUpScheduleID OUTPUT;
                    EXECUTE msdb.dbo.sp_attach_schedule
                @job_id = @LS_BackupJobId,
                @schedule_id = @LS_BackUpScheduleID;
                    EXECUTE msdb.dbo.sp_update_job
                @job_id = @LS_BackupJobId,
                @enabled = 1;
        END
    
    EXECUTE master.dbo.sp_add_log_shipping_alert_job;
    
    EXECUTE master.dbo.sp_add_log_shipping_primary_secondary
        @primary_database = N'SampleDB',
        @secondary_server = N'<ip_address_of_secondary_server>',
        @secondary_database = N'SampleDB',
        @overwrite = 1;
    
  3. Az adatbázis visszaállítása a másodlagos kiszolgálón:

    RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak'
        WITH NORECOVERY;
    
  4. Naplószállítás konfigurálása a másodlagos kiszolgálón:

    DECLARE @LS_Secondary__CopyJobId AS UNIQUEIDENTIFIER;
    DECLARE @LS_Secondary__RestoreJobId AS UNIQUEIDENTIFIER;
    DECLARE @LS_Secondary__SecondaryId AS UNIQUEIDENTIFIER;
    DECLARE @LS_Add_RetCode AS INT;
    
    EXECUTE
        @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary
        @primary_server = N'<ip_address_of_primary_server>',
        @primary_database = N'SampleDB',
        @backup_source_directory = N'/var/opt/mssql/tlogs/',
        @backup_destination_directory = N'/var/opt/mssql/tlogs/',
        @copy_job_name = N'LSCopy_SampleDB',
        @restore_job_name = N'LSRestore_SampleDB',
        @file_retention_period = 4320,
        @overwrite = 1,
        @copy_job_id = @LS_Secondary__CopyJobId OUTPUT,
        @restore_job_id = @LS_Secondary__RestoreJobId OUTPUT,
        @secondary_id = @LS_Secondary__SecondaryId OUTPUT;
    
    IF (@@ERROR = 0
        AND @LS_Add_RetCode = 0)
        BEGIN
            DECLARE @LS_SecondaryCopyJobScheduleUID AS UNIQUEIDENTIFIER;
            DECLARE @LS_SecondaryCopyJobScheduleID AS INT;
                    EXECUTE msdb.dbo.sp_add_schedule
                @schedule_name = N'DefaultCopyJobSchedule',
                @enabled = 1,
                @freq_type = 4,
                @freq_interval = 1,
                @freq_subday_type = 4,
                @freq_subday_interval = 15,
                @freq_recurrence_factor = 0,
                @active_start_date = 20170418,
                @active_end_date = 99991231,
                @active_start_time = 0,
                @active_end_time = 235900,
                @schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT,
                @schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT;
                    EXECUTE msdb.dbo.sp_attach_schedule
                @job_id = @LS_Secondary__CopyJobId,
                @schedule_id = @LS_SecondaryCopyJobScheduleID;
            DECLARE @LS_SecondaryRestoreJobScheduleUID AS UNIQUEIDENTIFIER;
            DECLARE @LS_SecondaryRestoreJobScheduleID AS INT;
                    EXECUTE msdb.dbo.sp_add_schedule
                @schedule_name = N'DefaultRestoreJobSchedule',
                @enabled = 1,
                @freq_type = 4,
                @freq_interval = 1,
                @freq_subday_type = 4,
                @freq_subday_interval = 15,
                @freq_recurrence_factor = 0,
                @active_start_date = 20170418,
                @active_end_date = 99991231,
                @active_start_time = 0,
                @active_end_time = 235900,
                @schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT,
                @schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT;
                    EXECUTE msdb.dbo.sp_attach_schedule
                @job_id = @LS_Secondary__RestoreJobId,
                @schedule_id = @LS_SecondaryRestoreJobScheduleID;
        END
    
    DECLARE @LS_Add_RetCode2 AS INT;
    
    IF (@@ERROR = 0
        AND @LS_Add_RetCode = 0)
        BEGIN
                    EXECUTE
                @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database
                @secondary_database = N'SampleDB',
                @primary_server = N'<ip_address_of_primary_server>',
                @primary_database = N'SampleDB',
                @restore_delay = 0,
                @restore_mode = 0,
                @disconnect_users = 0,
                @restore_threshold = 45,
                @threshold_alert_enabled = 1,
                @history_retention_period = 5760,
                @overwrite = 1;
        END
    
    IF (@@ERROR = 0
        AND @LS_Add_RetCode = 0)
        BEGIN
                    EXECUTE msdb.dbo.sp_update_job
                @job_id = @LS_Secondary__CopyJobId,
                @enabled = 1;
                    EXECUTE msdb.dbo.sp_update_job
                @job_id = @LS_Secondary__RestoreJobId,
                @enabled = 1;
        END
    

Ellenőrizze, hogy a naplófájlok továbbítása működik-e

  1. Ellenőrizze, hogy működik-e a naplószállítás az alábbi feladat elindításával az elsődleges kiszolgálón:

    USE msdb;
    GO
    
    EXECUTE dbo.sp_start_job N'LSBackup_SampleDB';
    GO
    
  2. Ellenőrizze, hogy működik-e a naplószállítás a következő feladat elindításával a másodlagos kiszolgálón:

    USE msdb;
    GO
    
    EXECUTE dbo.sp_start_job N'LSCopy_SampleDB';
    GO
    
    EXECUTE dbo.sp_start_job N'LSRestore_SampleDB';
    GO
    
  3. Ellenőrizze, hogy a napló szállítási feladat-átvétel megfelelően működik-e az alábbi parancs végrehajtásával:

    Figyelmeztetés

    Ez a parancs online állapotba helyezi a másodlagos adatbázist, és megszakítja a napló szállítási konfigurációját. A parancs futtatása után újra kell konfigurálnia a naplószállítást.

    RESTORE DATABASE SampleDB
        WITH RECOVERY;