Delen via


Aan de slag met logboekverzending in Linux

van toepassing op:SQL Server- - Linux

Logboekverzending is een hoge beschikbaarheidsconfiguratie van SQL Server waarbij een database van een primaire server wordt gerepliceerd naar een of meer secundaire servers. Met logboekverzending kunnen back-upbestanden van de brondatabase worden hersteld naar de secundaire server. De primaire server maakt periodiek back-ups van transactielogboeken en de secundaire servers herstellen ze, waarbij de secundaire kopie van de database wordt bijgewerkt.

diagram met de werkstroom voor logboekverzending.

Zoals beschreven in het vorige diagram, omvat een logboekverzendingssessie de volgende stappen:

  • Een back-up maken van het transactielogboekbestand op het primaire SQL Server-exemplaar
  • Het back-upbestand van het transactielogboek kopiĆ«ren naar een of meer secundaire SQL Server-exemplaren
  • Het back-upbestand van het transactielogboek herstellen op de secundaire SQL Server-exemplaren

Voorwaarden

Een netwerkshare instellen voor logboekverzending met behulp van CIFS

Notitie

In deze tutorial wordt CIFS + Samba gebruikt om de netwerkshare op te zetten.

Primaire server configureren

  1. Installeer Samba met de volgende opdracht:

    • Voor Red Hat Enterprise Linux (RHEL):

      sudo yum -y install samba
      
    • Voor Ubuntu:

      sudo apt-get install samba
      
  2. Maak een map om de logboeken voor logboekverzending op te slaan en geef de mssql gebruiker de vereiste machtigingen:

    mkdir /var/opt/mssql/tlogs
    chown mssql:mssql /var/opt/mssql/tlogs
    chmod 0700 /var/opt/mssql/tlogs
    
  3. Bewerk het /etc/samba/smb.conf bestand (u hebt hoofdmachtigingen nodig) en voeg de volgende sectie toe:

    [tlogs]
    path=/var/opt/mssql/tlogs
    available=yes
    read only=yes
    browsable=yes
    public=yes
    writable=no
    
  4. Maak een mssql gebruiker voor Samba:

    sudo smbpasswd -a mssql
    
  5. Start de Samba-services opnieuw:

    sudo systemctl restart smbd.service nmbd.service
    

Secundaire server configureren

  1. Installeer de CIFS-client met de volgende opdracht:

    • Voor RHEL:

      sudo yum -y install cifs-utils
      
    • Voor Ubuntu:

      sudo apt-get install cifs-utils
      
  2. Maak een bestand om uw referenties op te slaan. In dit voorbeeld gebruiken we /var/opt/mssql/.tlogcreds. Gebruik het wachtwoord dat u onlangs hebt ingesteld voor uw mssql Samba-account en vervang <domain>:

    username=mssql
    domain=<domain>
    password=<password>
    
  3. Voer de volgende commando's uit om een lege map te maken voor het koppelen en machtigingen en eigendom correct in te stellen.

    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. Voeg de regel toe aan etc/fstab om de share te behouden. Vervang <ip_address_of_primary_server> door de juiste waarde:

    //<ip_address_of_primary_server>/tlogs /var/opt/mssql/tlogs cifs credentials=/var/opt/mssql/.tlogcreds,ro,uid=mssql,gid=mssql 0 0
    
  5. Koppel de netwerkshares.

    sudo mount -a
    

Logboekverzending instellen met behulp van Transact-SQL

  1. Maak een back-up van de database op de primaire server:

    BACKUP DATABASE SampleDB
        TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak';
    GO
    
  2. Configureer logboekverzending op de primaire server:

    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. De database op de secundaire server herstellen:

    RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak'
        WITH NORECOVERY;
    
  4. Configureer logboekverzending op de secundaire server:

    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
    

Controleren of de verzending van logboeken werkt

  1. Controleer of de verzending van logboeken werkt door de volgende taak op de primaire server te starten:

    USE msdb;
    GO
    
    EXECUTE dbo.sp_start_job N'LSBackup_SampleDB';
    GO
    
  2. Controleer of de verzending van logboeken werkt door de volgende taak op de secundaire server te starten:

    USE msdb;
    GO
    
    EXECUTE dbo.sp_start_job N'LSCopy_SampleDB';
    GO
    
    EXECUTE dbo.sp_start_job N'LSRestore_SampleDB';
    GO
    
  3. Controleer of de failover voor logboekverzending werkt door de volgende opdracht uit te voeren:

    Waarschuwing

    Met deze opdracht wordt de secundaire database online gebracht en wordt de configuratie voor logboekverzending verbroken. U moet de logboekverzending opnieuw configureren nadat u deze opdracht hebt uitgevoerd.

    RESTORE DATABASE SampleDB
        WITH RECOVERY;