DEV Community

Cover image for Dockerize edilmiş PostgreSQL veritabanını yedekleme
Kadir Belkuyu
Kadir Belkuyu

Posted on

Dockerize edilmiş PostgreSQL veritabanını yedekleme

PostgreSQL
Bir PostgreSQL veritabanını yedeklemek ve geri yüklemek, herhangi bir sistem yöneticisi için önemli bir görevdir. Bu görevi kolaylaştıran psql yardımcı programları pg_dump ve pg_restore sayesinde bu işlem çok kısa bir sürede hallolabiliyor.

Bu yardımcı programları kullanarak sistem yöneticileri, yerel olarak veya uzaktan sürekli bir yedekleme oluşturabilir.

PostgreSQL, yaygın olarak kullanılan ilişkisel bir veritabanı sistemidir. Açık kaynaklıdır ve görevleri hızlı bir şekilde gerçekleştirmek için çok çeşitli araçlar sunar.

pg_dump
pg_dumpbir PostgreSQL veritabanını komutudur. Veritabanını bir komut dosyasına veya başka bir arşiv dosyasına çıkarır. Bu yardımcı program veritabanlarını yedeklemek içindir. Yardımcı program, veritabanı aynı anda kullanılıyor olsa bile tutarlı yedeklemeler yapar. Okuyucular, yazarlar ve diğer kullanıcılar veritabanını kullanırken engellenmeyecektir pg_dump.

pg_restore
pg_restore — pg_dump tarafından oluşturulan bir arşiv dosyasından bir PostgreSQL veritabanını geri yüklemeye yarayan psql yardımcı programıdır. İki kodunda detaylı kullanımı aşağıdaki kodlarda gösterilmiştir.

NOT: Aşağıdaki kodlar docker container ile yedekleme işlemi için değildir.

pg_dump [connection-option…] [option…] [dbname]

pg_dump örnekleri:

# testdb veritabanını sql biçiminde kaydetmek
pg_dump testdb > db.sql

# testdb veri tabanını tar biçiminde yedeklemek
pg_dump -U postgres -F c testdb > testdb.tar

# testdb veri tabanını bir dizin biçiminde yedeklemek
pg_dump -U postgres -F d testdb > db1_backup
Enter fullscreen mode Exit fullscreen mode

pg_restore örnekleri

pg_restore -U postgres -Ft -d db < db.tar

pg_dumpall örnekleri:

# dumpall tüm veritabanını yedekliyecektir.
pg_dumpall -f dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

#dump_date kullanımında cihazın tarih ve saat bilgilerini alarak dosya ismi olarak atar bu sayede karışıklılık olmadan yedekleme işlemini gerçekleştirebilirsiniz
Enter fullscreen mode Exit fullscreen mode

Image description

PostgreSQL veritabanını Docker tarafında yedeğini almanın bir çok yolu vardır. Bu yazıda en az uğraştırıcı olan ve ilerde otomatik bir şekilde günlük yedek almak istersenin kullanabileceğiz kodları paylaşacağım. Otomatik günlük veritabanı yedeği içinde bir çok yol bulunmaktadır. Yine en basit yöntem olarak yazacağınız script için cron job oluşturabilirsiniz. Bu yazıda Backup almak için bir bash dosyasıda kullanacağız.

Docker ile psql yedeği alma ve yedeği yükleme:

# pg_dumpall (yedeği alma)
# container name postgreSQL container ismidir. container ismini öğrenmek için:
# docker images komutunu kullanabilirsiniz.
docker exec -t container_Name pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

# pg_restore (veri tabanı yedeği yükleme)
cat dump.sql | docker exec -i container_Name psql -U postgres
Enter fullscreen mode Exit fullscreen mode

Restore işlemi CLI tarafında yazdığımız kodlardan biraz farklı bununsebebi Docker.

Bash dosyası:

#! /usr/bin/env bash
CONTAINER_NAME=PostgreSQLContainerName
# pg_dumpall için database ismi gerekmiyor 
DATABASE_NAME=Your_db

if [ -z $CONTAINER_NAME ]
then
echo "Usage: $0 [container name] [database name]"
exit 1
fi

if [ -z $DATABASE_NAME ]
then
echo "Usage: $0 [container name] [database name]"
exit 1
fi

set -e
set -o pipefail

# backups yedek klasörünü oluşturma 
mkdir -p "./backups"

cd backups

# PostgreSQL veri tabanı yedeği oluşturma 
# bu satırda pg_dump kullanıp istediğiniz veri tabanın yedekleyebilirsiniz
docker exec -t "$CONTAINER_NAME" pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

echo ""
echo "Exporting file from container..."
echo "Done!"
Enter fullscreen mode Exit fullscreen mode

Top comments (0)