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.
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
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
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
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
Skapa en
mssql
användare för Samba:sudo smbpasswd -a mssql
Starta om Samba-tjänsterna:
sudo systemctl restart smbd.service nmbd.service
Konfigurera sekundär server
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
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 dittmssql
Samba-konto och ersätt<domain>
:username=mssql domain=<domain> password=<password>
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
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
Montera resurserna:
sudo mount -a
Konfigurera loggleverans med hjälp av Transact-SQL
Säkerhetskopiera databasen på den primära servern:
BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak'; GO
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;
Återställ databasen på den sekundära servern:
RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak' WITH NORECOVERY;
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
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
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
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;
Relaterat innehåll
- Om loggöverföring (SQL Server)
- Konfigurera för loggöverföring (SQL Server)