Dela via


Kom igång med loggöverföring på Linux

gäller för:SQL Server – Linux

Loggleverans är en KONFIGURATION med hög tillgänglighet för SQL Server där en databas från en primär server replikeras till en eller flera sekundära servrar. Loggleverans gör att säkerhetskopieringsfiler från källdatabasen kan återställas till den sekundära servern. Den primära servern skapar säkerhetskopior av transaktionsloggar regelbundet och de sekundära servrarna återställer dem och uppdaterar den sekundära kopian av databasen.

diagram som visar arbetsflödet för loggöverföring.

Enligt beskrivningen i föregående diagram omfattar en loggöverföringssession följande steg:

  • Säkerhetskopiera transaktionsloggfilen på den primära SQL Server-instansen
  • Kopiera säkerhetskopieringsfilen för transaktionsloggen i nätverket till en eller flera sekundära SQL Server-instanser
  • Återställa säkerhetskopieringsfilen för transaktionsloggen på de sekundära SQL Server-instanserna

Förutsättningar

Konfigurera en nätverksdelning för loggöverföring med CIFS

Notera

I den här handledningen används CIFS + Samba för att ställa in nätverksresursen.

Konfigurera primär server

  1. Installera Samba med följande kommando:

    • För Red Hat Enterprise Linux (RHEL):

      sudo yum -y install samba
      
    • För Ubuntu:

      sudo apt-get install samba
      
  2. Skapa en katalog för att lagra loggarna för loggleverans och ge användaren mssql de behörigheter som krävs.

    mkdir /var/opt/mssql/tlogs
    chown mssql:mssql /var/opt/mssql/tlogs
    chmod 0700 /var/opt/mssql/tlogs
    
  3. Redigera /etc/samba/smb.conf -filen (du behöver rotbehörigheter) och lägg till följande avsnitt:

    [tlogs]
    path=/var/opt/mssql/tlogs
    available=yes
    read only=yes
    browsable=yes
    public=yes
    writable=no
    
  4. Skapa en mssql användare för Samba:

    sudo smbpasswd -a mssql
    
  5. Starta om Samba-tjänsterna:

    sudo systemctl restart smbd.service nmbd.service
    

Konfigurera sekundär server

  1. Installera CIFS-klienten med följande kommando:

    • För RHEL:

      sudo yum -y install cifs-utils
      
    • För Ubuntu:

      sudo apt-get install cifs-utils
      
  2. Skapa en fil för att lagra dina autentiseringsuppgifter. I det här exemplet använder vi /var/opt/mssql/.tlogcreds. Använd lösenordet som du nyligen angav för ditt mssql Samba-konto och ersätt <domain>:

    username=mssql
    domain=<domain>
    password=<password>
    
  3. Kör följande kommandon för att skapa en tom katalog för montering och ange behörighet och ägarskap korrekt

    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. Lägg till raden i etc/fstab för att behålla delningen. Ersätt <ip_address_of_primary_server> med lämpligt värde:

    //<ip_address_of_primary_server>/tlogs /var/opt/mssql/tlogs cifs credentials=/var/opt/mssql/.tlogcreds,ro,uid=mssql,gid=mssql 0 0
    
  5. Montera resurserna:

    sudo mount -a
    

Konfigurera loggleverans med hjälp av Transact-SQL

  1. Säkerhetskopiera databasen på den primära servern:

    BACKUP DATABASE SampleDB
        TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak';
    GO
    
  2. Konfigurera loggleverans på den primära servern:

    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. Återställ databasen på den sekundära servern:

    RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak'
        WITH NORECOVERY;
    
  4. Konfigurera loggöverföring på den sekundära servern:

    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
    

Kontrollera att loggöverföringen fungerar

  1. Kontrollera att loggöverföringen fungerar genom att starta följande jobb på den primära servern:

    USE msdb;
    GO
    
    EXECUTE dbo.sp_start_job N'LSBackup_SampleDB';
    GO
    
  2. Kontrollera att loggöverföringen fungerar genom att starta följande jobb på den sekundära servern:

    USE msdb;
    GO
    
    EXECUTE dbo.sp_start_job N'LSCopy_SampleDB';
    GO
    
    EXECUTE dbo.sp_start_job N'LSRestore_SampleDB';
    GO
    
  3. Kontrollera att redundansväxling av loggöverföring fungerar genom att köra följande kommando:

    Varning

    Det här kommandot kommer att göra den sekundära databasen tillgänglig online och bryta loggskickningskonfigurationen. Du måste konfigurera om loggöverföring när du har kört det här kommandot.

    RESTORE DATABASE SampleDB
        WITH RECOVERY;