format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightDocker Compose ile Gelişmiş Veritabanı Yedekleme Senaryoları
- arrow_rightDocker Compose Yedekleme Mimarisi Temelleri
- arrow_rightTemel Yedekleme Yapısı
- arrow_rightPostgreSQL Yedekleme Senaryoları
- arrow_rightTemel PostgreSQL Yedekleme Komutu
- arrow_rightOtomatik Yedekleme Zamanlaması
- arrow_rightMySQL/MariaDB Yedekleme Senaryoları
- arrow_rightMySQL Yapılandırması
- arrow_rightYedekleme Sıkıştırma Seçenekleri
- arrow_rightMongoDB Yedekleme Senaryoları
- arrow_rightMongoDB Yedekleme Yapılandırması
- arrow_rightMongoDB Sharded Cluster Yedeklemesi
- arrow_rightUzaktan Depolama Entegrasyonu
- arrow_rightAWS S3 Entegrasyonu
- arrow_rightMinIO (S3 Uyumlu) Kurulumu
- arrow_rightYedekleme Otomasyonu ve Zamanlama
- arrow_rightCron Tabanlı Yedekleme
- arrow_rightYedekleme Sıklığı Önerileri
- arrow_rightFelaket Kurtarma Senaryoları
- arrow_rightPostgreSQL Geri Yükleme
- arrow_rightMySQL Geri Yükleme
- arrow_rightGüvenlik Best Practices
- arrow_rightYedekleme Şifreleme
- arrow_rightErişim Kontrolü Listesi
- arrow_rightMonitoring ve Alerting
- arrow_rightHealth Check Uygulaması
- arrow_rightPerformans Optimizasyonu
- arrow_rightParalel Yedekleme
- arrow_rightCompression Seviyesi
Docker Compose ile Gelişmiş Veritabanı Yedekleme Senaryoları
Modern uygulama geliştirmede container teknolojileri standart hale gelmiştir. Docker Compose ile veritabanı yedekleme stratejileri, iş sürekliliği ve veri güvenliği açısından kritik öneme sahiptir. Araştırmalara göre, işletmelerin %60'ı düzenli veritabanı yedeklemesi yapmadıkları için ciddi veri kayıpları yaşamaktadır (Veritas Technologies, 2024). Bu kapsamlı rehberde, Docker Compose ortamlarında gelişmiş veritabanı yedekleme senaryolarını inceleyeceğiz.
Docker Compose Yedekleme Mimarisi Temelleri
Docker Compose ile veritabanı yedekleme, konteynerler arası iletişim ve volume bağlantıları kullanılarak gerçekleştirilir. Temel mimaride üç bileşen bulunur: veritabanı servisi, yedekleme servisi ve depolama alanı. Docker Swarm ve yük dengeleme konseptleriyle birlikte değerlendirildiğinde, yedekleme stratejileri daha da güçlenmektedir.
Temel Yedekleme Yapısı
Docker Compose dosyasında yedekleme için gerekli volume tanımlamaları şu şekilde yapılır:
volumes:
db_data:
backup_storage:
services:
postgres:
image: postgres:15
volumes:
- db_data:/var/lib/postgresql/data
backup:
image: postgres:15
volumes:
- backup_storage:/backups
PostgreSQL Yedekleme Senaryoları
PostgreSQL, açık kaynak veritabanları arasında en popüler seçeneklerden biridir. Docker ortamında PostgreSQL yedeklemesi için pg_dump aracı kullanılır.
Temel PostgreSQL Yedekleme Komutu
Aşağıdaki docker-compose.yaml yapılandırması ile PostgreSQL yedekleme servisi oluşturulabilir:
services:
postgres:
image: postgres:15-alpine
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
backup:
image: postgres:15-alpine
volumes:
- ./backups:/backups
command: >
sh -c "pg_dump -h postgres -U postgres -F c -b -v -f /backups/backup_$$(date +%Y%m%d_%H%M%S).dump"
Otomatik Yedekleme Zamanlaması
Düzenli yedekleme için cron entegrasyonu gereklidir. Aşağıdaki yapılandırma günlük yedekleme planlaması yapar:
services:
scheduler:
image: postgres:15-alpine
volumes:
- ./backups:/backups
command: >
sh -c 'while true; do
pg_dump -h postgres -U postgres -F c -b -v -f /backups/backup_$(date +%Y%m%d_%H%M%S).dump;
sleep 86400;
done'
MySQL/MariaDB Yedekleme Senaryoları
MySQL ve MariaDB için mysqldump aracı standart yedekleme çözümüdür. Docker ile MariaDB veritabanı kurtarma rehberimizde detaylı kurtarma prosedürlerini inceleyebilirsiniz.
MySQL Yapılandırması
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
volumes:
- mysql_data:/var/lib/mysql
backup:
image: mysql:8.0
volumes:
- ./backups:/backups
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
command: >
sh -c "mysqldump -h mysql -u root -p$$MYSQL_ROOT_PASSWORD --single-transaction
--routines --triggers ${DB_NAME} | gzip > /backups/backup_$$(date +%Y%m%d_%H%M%S).sql.gz"
Yedekleme Sıkıştırma Seçenekleri
Büyük veritabanları için sıkıştırma kritik önem taşır. Aşağıdaki tabloda sıkıştırma yöntemleri karşılaştırılmıştır:
| Yöntem | Ortalama Sıkıştırma | CPU Kullanımı | Önerilen Kullanım |
|---|---|---|---|
| gzip | %70-80 | Düşük | Günlük yedeklemeler |
| bzip2 | %75-85 | Orta | Haftalık yedeklemeler |
| xz | %80-90 | Yüksek | Arşiv yedeklemeler |
| pigz (paralel) | %70-80 | Yüksek | Büyük veritabanları |
MongoDB Yedekleme Senaryoları
MongoDB, NoSQL veritabanı olarak doküman tabanlı yapısı ile farklı yedekleme stratejileri gerektirir. mongodump aracı kullanılarak tutarlı yedeklemeler oluşturulabilir.
MongoDB Yedekleme Yapılandırması
services:
mongodb:
image: mongo:7.0
volumes:
- mongo_data:/data/db
backup:
image: mongo:7.0
volumes:
- ./backups:/backups
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASS}
command: >
sh -c "mongodump --host=mongodb -u $$MONGO_INITDB_ROOT_USERNAME
-p$$MONGO_INITDB_ROOT_PASSWORD --authenticationDatabase admin
--archive=/backups/mongo_$$(date +%Y%m%d_%H%M%S).archive --gzip"
MongoDB Sharded Cluster Yedeklemesi
Dağıtık MongoDB yapılarında yedekleme daha karmaşıktır. Shard'ların her biri için ayrı yedekleme prosesi çalıştırılmalıdır:
services:
backup_shard1:
image: mongo:7.0
command: >
sh -c "mongodump --host=mongos --db=config
--out=/backups/shard1_$$(date +%Y%m%d)"
Uzaktan Depolama Entegrasyonu
Yerel yedeklemeler tek başına yeterli değildir. Bulut depolama entegrasyonu ile felaket kurtarma kapasitesi artırılmalıdır. Sunucu yönetimi konseptleriyle birlikte değerlendirildiğinde, yedekleme stratejileri daha kapsamlı hale gelmektedir.
AWS S3 Entegrasyonu
services:
backup-s3:
image: amazon/aws-cli:2.15
environment:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: ${AWS_REGION}
volumes:
- ./backups:/backups
command: >
sh -c "aws s3 sync /backups s3://${S3_BUCKET}/database-backups/ --storage-class STANDARD_IA"
MinIO (S3 Uyumlu) Kurulumu
MinIO, kendi S3 uyumlu depolama altyapınızı oluşturmanızı sağlar:
services:
minio:
image: minio/minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_USER}
MINIO_ROOT_PASSWORD: ${MINIO_PASS}
volumes:
- minio_data:/data
backup-minio:
image: amazon/aws-cli:2.15
command: >
sh -c "aws s3 cp /backups/ s3://${MINIO_BUCKET}/ --recursive
--endpoint-url http://minio:9000"
Yedekleme Otomasyonu ve Zamanlama
Düzenli yedeklemeler için zamanlama mekanizmaları kritik öneme sahiptir. Docker Compose içinde çeşitli otomasyon yöntemleri kullanılabilir.
Cron Tabanlı Yedekleme
services:
backup-cron:
image: postgres:15-alpine
volumes:
- ./backups:/backups
command: >
sh -c 'echo "0 2 * * * pg_dump -h postgres -U postgres -Fc -f /backups/daily_$$(date +\%Y\%m\%d).dump" > /etc/crontabs/root && crond -f -l 2'
Yedekleme Sıklığı Önerileri
| Veritabanı Türü | Günlük | Haftalık | Aylık |
|---|---|---|---|
| Küçük (<1GB) | Evet | Full | Arşiv |
| Orta (1-50GB) | Incremental | Full | Arşiv |
| Büyük (>50GB) | Incremental | Differential | Full |
Felaket Kurtarma Senaryoları
Yedeklemenin gerçek değeri, kriz anında ne kadar hızlı geri yükleme yapılabileceğinde ortaya çıkar. Siber güvenlik ve veri koruma stratejileri kapsamında felaket kurtarma planları oluşturulmalıdır.
PostgreSQL Geri Yükleme
services:
restore:
image: postgres:15-alpine
volumes:
- ./backups:/backups
- pgdata:/var/lib/postgresql/data
command: >
sh -c "pg_restore -h postgres -U postgres -d ${DB_NAME}
-c /backups/backup_20240115_120000.dump"
MySQL Geri Yükleme
services:
restore:
image: mysql:8.0
volumes:
- ./backups:/backups
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
command: >
sh -c "mysql -h mysql -u root -p$$MYSQL_ROOT_PASSWORD ${DB_NAME}
< /backups/backup_20240115_120000.sql"
Güvenlik Best Practices
Yedekleme dosyaları, orijinal veritabanı kadar koruma gerektirir. Şifreleme ve erişim kontrolü kritik öneme sahiptir.
Yedekleme Şifreleme
GPG ile yedekleme şifreleme uygulanması önerilir:
services:
backup-encrypted:
image: postgres:15-alpine
volumes:
- ./backups:/backups
command: >
sh -c "pg_dump -h postgres -U postgres -Fc | gpg --symmetric
--cipher-algo AES256 --output /backups/backup_$$(date +%Y%m%d_%H%M%S).gpg"
Erişim Kontrolü Listesi
- Yedekleme dizinleri için Unix izinleri 600 olarak ayarlanmalıdır
- S3 bucket'ları için bucket policy uygulanmalıdır
- Şifreleme anahtarları ayrı bir secret management sisteminde tutulmalıdır
- Yedekleme logları düzenli olarak incelenmelidir
Monitoring ve Alerting
Yedekleme süreçlerinin izlenmesi, hata anında müdahale kapasitesini artırır. Uptime monitoring araçları ile entegre edilebilir.
Health Check Uygulaması
services:
postgres:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
backup:
image: postgres:15
depends_on:
postgres:
condition: service_healthy
Performans Optimizasyonu
Büyük veritabanlarında yedekleme performansı kritik önem taşır. Aşağıdaki tekniklerle süreç optimize edilebilir:
Paralel Yedekleme
PostgreSQL'de -j parametresi ile paralel yedekleme:
pg_dump -h postgres -U postgres -Fd -j 4 -f /backups/parallel_dump
Compression Seviyesi
| Level | Hız | Boyut |
|---|---|---|
| 1 | En hızlı | En büyük |