Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:Program SQL Server w systemie Linux
Wysyłanie dzienników jest konfiguracją wysokiej dostępności SQL Server, w której baza danych z serwera podstawowego jest replikowana na co najmniej jeden serwer pomocniczy. Wysyłanie dzienników umożliwia przywracanie plików kopii zapasowej ze źródłowej bazy danych na serwer pomocniczy. Serwer podstawowy okresowo tworzy kopie zapasowe dziennika transakcji, a serwery pomocnicze je przywracają, aktualizując pomocniczą kopię bazy danych.
Jak opisano na poprzednim diagramie, sesja wysyłania dziennika obejmuje następujące kroki:
- Wykonywanie kopii zapasowej pliku dziennika transakcji na instancji podstawowej SQL Server
- Kopiowanie pliku kopii zapasowej dziennika transakcji w sieci do jednego lub więcej pomocniczych instancji SQL Server
- Przywracanie pliku kopii zapasowej dziennika transakcji w pomocniczych wystąpieniach programu SQL Server
Wymagania wstępne
- Zainstaluj SQL Server Agent na Linuksie na serwerach głównych i pomocniczych.
Konfigurowanie udziału sieciowego na potrzeby wysyłania dzienników przy użyciu funkcji CIFS
Note
W tym samouczku do skonfigurowania udziału sieciowego jest używany wspólny internetowy system plików (CIFS) i Samba.
Konfigurowanie serwera podstawowego
Zainstaluj program Samba przy użyciu następującego polecenia:
W przypadku systemu Red Hat Enterprise Linux (RHEL):
sudo yum -y install sambaDla systemu Ubuntu:
sudo apt-get install samba
Utwórz katalog do przechowywania dzienników na potrzeby wysyłania dzienników i nadaj użytkownikowi
mssqlwymagane uprawnienia:mkdir /var/opt/mssql/tlogs chown mssql:mssql /var/opt/mssql/tlogs chmod 0700 /var/opt/mssql/tlogsEdytuj plik
/etc/samba/smb.conf(potrzebujesz uprawnień głównych) i dodaj następującą sekcję:[tlogs] path=/var/opt/mssql/tlogs available=yes read only=yes browsable=yes public=yes writable=noUtwórz użytkownika
mssqldla środowiska Samba:sudo smbpasswd -a mssqlUruchom ponownie usługi Samba:
sudo systemctl restart smbd.service nmbd.service
Konfigurowanie serwera pomocniczego
Zainstaluj klienta CIFS za pomocą następującego polecenia:
W przypadku systemu RHEL:
sudo yum -y install cifs-utilsDla systemu Ubuntu:
sudo apt-get install cifs-utils
Utwórz plik do przechowywania poświadczeń. W tym przykładzie używamy
/var/opt/mssql/.tlogcreds. Użyj ostatnio ustawionego hasła dla kontamssqlSamba i zastąp<domain>:username=mssql domain=<domain> password=<password>Uruchom następujące polecenia, aby utworzyć pusty katalog na potrzeby poprawnego instalowania i ustawiania uprawnień i własności:
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/.tlogcredsDodaj wiersz do
/etc/fstab, aby utrwał udział. Zastąp<ip_address_of_primary_server>odpowiednią wartością://<ip_address_of_primary_server>/tlogs /var/opt/mssql/tlogs cifs credentials=/var/opt/mssql/.tlogcreds,ro,uid=mssql,gid=mssql 0 0Zamontuj udział:
sudo mount -a
Konfigurowanie wysyłania dzienników przy użyciu Transact-SQL
Tworzenie kopii zapasowej bazy danych na serwerze podstawowym:
BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak'; GOSkonfiguruj wysyłanie dzienników na serwerze podstawowym:
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;Przywróć bazę danych na serwerze pomocniczym:
RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak' WITH NORECOVERY;Skonfiguruj wysyłanie dzienników na serwerze pomocniczym:
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
Sprawdź, czy log shipping działa
Sprawdź, czy wysyłanie dziennika działa, uruchamiając następujące zadanie na serwerze podstawowym:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSBackup_SampleDB'; GOSprawdź, czy wysyłanie dziennika działa, uruchamiając następujące zadanie na serwerze pomocniczym:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSCopy_SampleDB'; GO EXECUTE dbo.sp_start_job N'LSRestore_SampleDB'; GOSprawdź, czy przełączanie awaryjne kopiowania dziennika działa, wykonując następujące polecenie:
Warning
To polecenie przenosi pomocniczą bazę danych w tryb online i przerywa konfigurację wysyłania dziennika. Po uruchomieniu tego polecenia należy ponownie skonfigurować wysyłkę dziennika.
RESTORE DATABASE SampleDB WITH RECOVERY;