Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:Linux üzerinde SQL Server
Log shipping, birincil sunucudan bir veritabanının bir veya daha fazla ikincil sunucuya kopyalandığı bir SQL Server yüksek erişilebilirlik (HA) yapılandırmasıdır. Log gönderimi, kaynak veritabanındaki yedekleme dosyalarının ikincil sunucuya yüklenmesini sağlar. Birincil sunucu düzenli aralıklarla işlem günlüğü yedekleri oluşturur ve ikincil sunucular bunları geri yükleyerek veritabanının ikincil kopyasını güncelleştirir.
günlük gönderim iş akışını gösteren
Önceki diyagramda açıklandığı gibi, günlük gönderim oturumu aşağıdaki adımları içerir:
- Birincil SQL Server örneğinde işlem günlüğü dosyasını yedekleme
- İşlem günlüğü yedekleme dosyasını ağ üzerinden bir veya daha fazla ikincil SQL Server örneğine kopyalama
- İkincil SQL Server örneklerinde işlem günlüğü yedekleme dosyasını geri yükleme
Önkoşullar
CIFS kullanarak log gönderimi için bir ağ paylaşımı ayarlayın
Not
Bu öğreticide ağ paylaşımını ayarlamak için Common Internet File System (CIFS) ve Samba kullanılır.
Birincil sunucuyu yapılandırma
Samba'yi aşağıdaki komutla yükleyin:
Red Hat Enterprise Linux (RHEL) için:
sudo yum -y install sambaUbuntu için:
sudo apt-get install samba
Günlük gönderimi için logları depolamak amacıyla bir dizin oluşturun ve
mssqlkullanıcıya gerekli izinleri verin.mkdir /var/opt/mssql/tlogs chown mssql:mssql /var/opt/mssql/tlogs chmod 0700 /var/opt/mssql/tlogs/etc/samba/smb.confdosyasını düzenleyin (kök izinlere ihtiyacınız var) ve aşağıdaki bölümü ekleyin:[tlogs] path=/var/opt/mssql/tlogs available=yes read only=yes browsable=yes public=yes writable=noSamba için
mssqlbir kullanıcı oluşturun:sudo smbpasswd -a mssqlSamba hizmetlerini yeniden başlatın:
sudo systemctl restart smbd.service nmbd.service
İkincil sunucuyu yapılandırma
CIFS istemcisini aşağıdaki komutla yükleyin:
RHEL için:
sudo yum -y install cifs-utilsUbuntu için:
sudo apt-get install cifs-utils
Kimlik bilgilerinizi depolamak için bir dosya oluşturun. Bu örnekte
/var/opt/mssql/.tlogcredskullanırız.mssqlSamba hesabınız için kısa süre önce ayarladığınız parolayı kullanın ve<domain>değiştirin:username=mssql domain=<domain> password=<password>Bağlama için boş bir dizin oluşturmak ve izinleri ve sahipliği doğru ayarlamak için aşağıdaki komutları çalıştırın
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/.tlogcredsPaylaşımı kalıcı hale getirmek için satırı
etc/fstab'a ekleyin.<ip_address_of_primary_server>uygun değerle değiştirin://<ip_address_of_primary_server>/tlogs /var/opt/mssql/tlogs cifs credentials=/var/opt/mssql/.tlogcreds,ro,uid=mssql,gid=mssql 0 0Paylaşımları bağlayın:
sudo mount -a
Transact-SQL kullanarak günlük gönderimini ayarlama
Veritabanını birincil sunucuda yedekleyin:
BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/tlogs/SampleDB.bak'; GOBirincil sunucuda log göndermeyi yapılandırın:
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;veritabanını ikincil sunucuya geri yükleyin:
RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/tlogs/SampleDB.bak' WITH NORECOVERY;İkincil sunucuda kayıt gönderimini ayarlayın:
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
Log gönderiminin çalıştığını doğrula
Birincil sunucuda aşağıdaki işi başlatarak log gönderiminin çalışıp çalışmadığını doğrulayın.
USE msdb; GO EXECUTE dbo.sp_start_job N'LSBackup_SampleDB'; GOİkincil sunucuda aşağıdaki işi başlatarak günlük gönderiminin çalıştığını doğrulayın:
USE msdb; GO EXECUTE dbo.sp_start_job N'LSCopy_SampleDB'; GO EXECUTE dbo.sp_start_job N'LSRestore_SampleDB'; GOAşağıdaki komutu yürüterek günlük gönderim yük devretmesinin çalıştığını doğrulayın:
Uyarı
Bu komut ikincil veritabanını çevrimiçine getirir ve günlük gönderme yapılandırmasını bozar. Bu komutu çalıştırdıktan sonra günlük gönderimi yeniden yapılandırmanız gerekir.
RESTORE DATABASE SampleDB WITH RECOVERY;