Erste Schritte mit dem Protokollversand unter Linux
Gilt für: SQL Server – Linux
Der Protokollversand ist eine SQL Server-Hochverfügbarkeitskonfiguration, bei der eine Datenbank von einem primären Server auf einem oder mehreren sekundären Servern repliziert wird. Mit dem Protokollversand können Sicherungsdateien aus der Quelldatenbank auf dem sekundären Server wiederhergestellt werden. Der primäre Server erstellt regelmäßig Transaktionsprotokollsicherungen, die von den sekundären Servern wiederhergestellt werden, wobei die sekundäre Kopie der Datenbank aktualisiert wird.
Wie in der vorherigen Abbildung gezeigt, umfasst eine Protokollversandsitzung die folgenden Schritte:
- Sichern der Transaktionsprotokolldatei auf der primären SQL Server-Instanz.
- Kopieren der Transaktionsprotokoll-Sicherungsdatei über das Netzwerk in eine oder mehrere sekundäre SQL Server-Instanzen.
- Wiederherstellen der Transaktionsprotokoll-Sicherungsdatei auf der sekundären SQL Server-Instanz.
Voraussetzungen
Einrichten einer Netzwerkfreigabe für den Protokollversand mithilfe von CIFS
Hinweis
In diesem Tutorial werden CIFS und Samba zum Einrichten der Netzwerkfreigabe verwendet.
Konfigurieren des primären Servers
Installieren Sie Samba mithilfe des folgenden Befehls:
Für Red Hat Enterprise Linux (RHEL)
sudo yum -y install samba
Für Ubuntu:
sudo apt-get install samba
Erstellen Sie ein Verzeichnis zum Speichern der Protokolle für den Protokollversand, und gewähren Sie dem
mssql
-Benutzer die erforderlichen Berechtigungen.mkdir /var/opt/mssql/tlogs chown mssql:mssql /var/opt/mssql/tlogs chmod 0700 /var/opt/mssql/tlogs
Bearbeiten Sie die Datei „
/etc/samba/smb.conf
“ (Sie benötigen Stammverzeichnisberechtigungen), und fügen Sie den folgenden Abschnitt hinzu:[tlogs] path=/var/opt/mssql/tlogs available=yes read only=yes browsable=yes public=yes writable=no
Erstellen eines
mssql
-Benutzers für Sambasudo smbpasswd -a mssql
Neustart der Samba-Dienste:
sudo systemctl restart smbd.service nmbd.service
Konfigurieren des sekundären Servers
Installieren Sie den CIFS-Client mit dem folgenden Befehl:
Für RHEL:
sudo yum -y install cifs-utils
Für Ubuntu:
sudo apt-get install cifs-utils
Erstellen Sie eine Datei zum Speichern Ihrer Anmeldeinformationen. In diesem Beispiel verwenden wir
/var/opt/mssql/.tlogcreds
. Verwenden Sie das Kennwort, das Sie kürzlich für Ihrmssql
-Samba-Konto festgelegt haben, und ersetzen Sie<domain>
:username=mssql domain=<domain> password=<password>
Führen Sie die folgenden Befehle aus, um ein leeres Verzeichnis zum Einbinden zu erstellen und Berechtigung und Besitz richtig festzulegen.
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
Fügen Sie „etc/fstab“ die Zeile hinzu, um die Freigabe beizubehalten. Ersetzen Sie
<ip_address_of_primary_server>
durch den entsprechenden Wert://<ip_address_of_primary_server>/tlogs /var/opt/mssql/tlogs cifs credentials=/var/opt/mssql/.tlogcreds,ro,uid=mssql,gid=mssql 0 0
Binden Sie die Freigaben ein:
sudo mount -a
Einrichten des Protokollversands mit Transact-SQL
Sichern Sie die Datenbank auf dem primären Server:
BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak' GO
Konfigurieren des Protokollversands auf dem primären 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;
Stellen Sie die Datenbank auf dem sekundären Server wieder her:
RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak' WITH NORECOVERY;
Konfigurieren des Protokollversands auf dem sekundären 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
Überprüfen der Funktion des Protokollversands
Überprüfen Sie, ob der Protokollversand funktioniert, indem Sie den folgenden Auftrag auf dem primären Server starten:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSBackup_SampleDB'; GO
Überprüfen Sie, ob der Protokollversand funktioniert, indem Sie den folgenden Auftrag auf dem sekundären Server starten:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSCopy_SampleDB'; GO EXECUTE dbo.sp_start_job N'LSRestore_SampleDB'; GO
Überprüfen Sie, ob das Failover für den Protokollversand funktioniert, indem Sie den folgenden Befehl ausführen:
Warnung
Mit diesem Befehl wird die sekundäre Datenbank online geschaltet, und die Protokollversandkonfiguration wird unterbrochen. Nach dem Ausführen dieses Befehls müssen Sie den Protokollversand neu konfigurieren.
RESTORE DATABASE SampleDB WITH RECOVERY;