Veritabanı Migrasyonu: Schema Değişiklikleri ve Zero-Downtime Deploy
Veritabanı migrasyonu, schema değişikliklerini güvenli ve kontrollü bir şekilde uygulama sürecidir. Bu rehberde migrasyon stratejilerini, zero-downtime deploy ve rollback planlarını anlatıyoruz.
Son güncelleme:Veritabanı Migrasyonu Nedir?
Veritabanı migrasyonu, veritabanı schema'sını (tablo yapıları, indeksler, kısıtlamalar) değiştirmek için kullanılan kontrollü bir süreçtir.
Schema değişiklikleri: Yeni tablo ekleme, sütun ekleme/değiştirme/silme, indeks ekleme, foreign key ekleme, veri tipi değiştirme.
Riskler: Veri kaybı, downtime, performans düşüşü, geriye dönük uyumsuzluk (backward incompatibility).
Amaç: Schema değişikliklerini güvenli, tekrarlanabilir ve rollback edilebilir şekilde uygulamak.
Migrasyon Araçları
Flyway: SQL tabanlı migrasyon aracı. Versioned migration dosyaları (V1__create_users.sql). Java, Node.js, CLI desteği.
Liquibase: XML/YAML/JSON/SQL formatında changelog. Rollback desteği, diff generation, database comparison.
Prisma Migrate: Prisma ORM ile entegre. Schema.prisma'dan otomatik migration generate eder.
Knex.js: Node.js migrasyon aracı. JavaScript ile migration dosyaları. Up ve down fonksiyonları.
Django/ActiveRecord: Framework içi migrasyon araçları. Model değişikliklerinden otomatik migration oluşturur.
Zero-Downtime Migrasyon Stratejileri
Expand and Contract (Parallel Change): 1) Yeni sütun/tabloyu ekle (expand), 2) Kodu güncelle (yeni ve eski sütunu destekle), 3) Eski sütunu kaldır (contract).
Backward compatible changes: Yeni sütun ekleme (nullable), yeni tablo ekleme, yeni indeks ekleme. Bu değişiklikler downtime gerektirmez.
Breaking changes: Sütun silme, sütun tipi değiştirme, rename. Bu değişiklikler expand-contract pattern ile yapılmalı.
Feature flags: Yeni schema'yı feature flag arkasına alın. Kademeli rollout ile riski azaltın.
Blue-green deployment: Yeni schema'yı paralel ortamda test edin. Traffic geçişini yapın. Sorun olursa eski ortama dönün.
Veri Migrasyonu
Backfill: Mevcut verileri yeni schema'ya uygun hale getirin. Batch processing ile büyük veri setlerini işleyin.
Dual write: Hem eski hem yeni schema'ya yazın. Geçiş döneminde veri tutarlılığını koruyun.
Data validation: Migrasyon sonrası veri bütünlüğünü kontrol edin. Row count, checksum, sample comparison.
Performance: Büyük tablolarda migrasyon, lock ve I/O yükü oluşturur. Off-peak saatlerde çalıştırın. Chunked processing kullanın.
Rollback Planı
Down migration: Her up migration'ın karşılığı down migration (rollback) yazın. Flyway, Liquibase rollback destekler.
Backup: Migrasyon öncesi full backup alın. Point-in-time recovery (PITR) yeteneği olsun.
Testing: Migrasyonu staging ortamında test edin. Production ile aynı veri hacmi ve schema'yı kullanın.
Monitoring: Migrasyon sonrası query performansını ve error rate'ini izleyin. Anormal sapma varsa rollback yapın.
Communication: Migrasyon planını ekip ile paylaşın. Maintenance window (bakım penceresi) belirleyin.
Best Practices
Version control: Migration dosyalarını Git ile takip edin. Her migration atomik (tek değişiklik) olmalı.
Idempotency: Migration'ı birden fazla çalıştırmak aynı sonucu vermeli. IF NOT EXISTS, IF EXISTS kullanın.
Small migrations: Büyük değişiklikleri küçük migrasyonlara bölün. Her migrasyon bağımsız deploy edilebilir olmalı.
Code review: Migration dosyalarını code review'dan geçirin. Schema değişiklikleri kritik ve geri dönüşü zor.
Documentation: Her migration'ın amacını ve etkisini dokümante edin. Breaking change'leri açıkça belirtin.