PostgreSQL Yedek Alma(Backup) ve Kurma(Restore)

Veritabanları için ilişkisel modeli kullanan, SQL standart sorgu dilini destekleyen, güçlü özelliklere ve avantajlara sahip ücretsiz ve açık kodlu veritabanı yönetim sistemi olan PostgreSQL ‘de oluşturulan veritabanının yedeğini alma (Backup) ve alınan yedeği aynı veya farklı bir veritabanı adıyla tekrar kurma(Restore) işlemleri anlatılacaktır.

Dosyaları buradan indirebilirsiniz: https://github.com/eliif/PostgreSQLOtomatikYedekAlma/

waiting

Başlamadan önce yukarda belirtildiği gibi yeni bir veritabanı oluşturup bu veritabanının tablolarını ekledikten sonra yedek alma işlemi gerçekleştirilecektir. Hali hazırda olan veritabanlarınızın yedeğini almak için bu adımın yapılmasına gerek olmayacaktır.

waiting

DB_Project adında oluşturulan veritabanına gerekli tabloları eklendikten sonra yedeği alınmak istenen veritabanının üzerine gelinip sağa tıkladıktan sonra Backup seçeneği seçilmektedir.

waiting

Bu işlem gerçekleştikten sonra alınacak olan yedeğin adının ve dosya yolunun belirlenmesi gerekmektedir. Burada dikkat edilmesi gereken önemli bir nokta belirtilen yolun yazma yetkisine açık olması gerekmektedir. Aksi durumda Permission denied hatası ile karşılaşılacaktır.

waiting

Encoding ve Role name belirlendikten sonra Backup alma işlemi tamamlanmaktadır. Alınan Backup istenilirse farklı isimde bir veritabanına veya aynı veritabanı ismiyle kurulmak istenilirse var olan veritabanının silinmesi ve aynı isimde veritabanının oluşturulması durumunda tekrar kurulması mümkün olmaktadır. Bu işlem için veritabanının üzerine gelindikten sonra sağa tıklanıp Restore seçeneği seçilmelidir.

waiting

Filename, Format ve Role name belirlendikten sonra Restore işlemi tamamlanmaktadır.

Windows'da Otomatik Yedekleme

İlk olarak manuel olarak yedek alıp, alınan yedeği tekrar kurma işlemleri anlatılmıştır. Fakat bu işlem hem zaman hem de dikkat isteyen bir işlem olmaktadır özellikle büyük veritabanlarının yedek alma işlemlerini otomatik olarak gerçekleştirmek daha sağlıklı olmaktadır. Otomatik yedek alma işlemlerinin birçok yöntemi bulunmaktadır. Bu yöntemlerden pgdump ile yedek alma anlatılacaktır. Böylece belirlenen zamanlarda yedek alıp bir sonraki yedeğin alınacağı tarih geldiğinde bu yedeğin üzerine yazmasını engelleyip yeni bir yedek oluşturmasıdır.

İlk olarak istenilen bir dizinde yedeklerin saklanacağı bir klasör oluşturmak ve içine .bat uzantılı bir dosya eklemek gerekmektedir.

waiting

C:\YEDEKLER adında bir klasör oluşturulup backup.bat adında bir dosya eklenmiştir. Bu backup.bat dosyasınının içine gereken kod yazılması gerekmektedir.

@echo off
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
set dow=%%i
set month=%%j
set day=%%k
set year=%%l
)
set datestr=%month%_%day%_%year%
set BACKUP_FILE=<NameOfTheFile> _%datestr%.backup
SET PGPASSWORD=<PassWord>
echo on
pg_dump -h <HostName> -p 5432 -U <UserName> -F c -b -v -f %BACKUP_FILE% <DATABASENAME>

backup.bat dosyasına yazılan kod açıklanacak olursa;

datestr: Bu değişkene backup alınan tarih atanmaktadır. Böylece hangi yedeğin ne zaman aldığının bilgisi verilmektedir. Yukarda gün ay ve tarih bilgisi yer almaktadır istenirse saat ve dakika bilgisi de eklenebilir. Bunun için eklenilmesi gereken kod parçası aşağıdaki gibidir.

for /f "tokens=1-3 delims=: " %%i in ("%time%") do (
set hour=%%i
set min=%%j
set sec=%%k
)
for /f "delims=" %%i in ('dir "%target_backup_path%" /b/a-d ^| find /v /c "::"') do set count=%%i
set /a count=%count%+1
set datestr=%month%_%day%_%year%_% hour %_% min %

şeklinde değiştirmek yeterli olacaktır. En sonda örnek bir kod verilecektir.

BACKUP_FILE: <NameOfTheFile> yerine istediğiniz bir ad yazılmalıdır.

PGPASSWORD: <PassWord> yerine veritabanı şifresi yazılmalıdır.

HostName: Veritabanının bulunduğu sunucu adresi yazılmalıdır.

<UserName>: kullanıcı adı girilmesi gerekir.

<DATABASENAME>:Yedeği alınacak olan veritabanının adı yazılmalıdır.

pg_dump : Ortam değişkenlerinden PostgreSQL içindeki bin klasörünün yolu tanımlanmalıdır.

waiting
  • Bu işlemleri yaptıktan sonra Task Scheduler den görev tanımlamak gerekmektedir.
waiting

Task Scheduler açıldıktan sonra yukardada gösterildiği gibi yeni bir görev tanımlamak gerekmektedir. Görevin adı ve detayı yazılmalıdır.

waiting

Oluşturulan görevin ne sıklıkla tetiklenmesi gerektiği belirlenmektedir.

waiting

Görevin başlama tarihi ve saat belirlenmektedir. Ve belirlenen zamanda yedek alma işlemi tetiklenmektedir.

waiting

Oluşturulan backup.bat dosyasının yolunu belirlemek gerekmektedir.

waiting

Böylece görev tamamlanmaktadır. Artık belirlediğiniz tarihte otomatik yedek alma işlemi gerçekleştirilmiş olmaktadır.

İstenildiğinde oluşturulan görev güncellenebilmektedir.

waiting

Yukarda göründüğü gibi otomatik yedekleme işlemi gerçekleşmiş oldu.

.bat uzantılı dosyaya yazılması gereken kodun bir örneği aşağıdaki gibidir.

@echo off
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
set dow=%%i
set month=%%j
set day=%%k
set year=%%l
)
for /f "tokens=1-3 delims=: " %%i in ("%time%") do (
set hour=%%i
set min=%%j
set sec=%%k
)
for /f "delims=" %%i in ('dir "%target_backup_path%" /b/a-d ^| find /v /c "::"') do set count=%%i
set /a count=%count%+1
set datestr=%year%_%month%_%day%_%hour%_%min%
set BACKUP_FILE=yedek_%datestr%.backup
SET PGPASSWORD=2018
echo on
pg_dump -h 15.15.15.15 -p 5432 -U postgres -F c -b -v -f %BACKUP_FILE% DB_Project