📝 BLOG

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:

Hazırlayan: Gsetsoft

Veritabanı Migrasyonu: Schema Değişiklikleri ve Zero-Downtime Deploy

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.

Gizlilik tercihiniz

Temel çerezler güvenli kullanım ve oturum yönetimi içindir. Temel ziyaret sayımı ayrıca yapılır; izin verirseniz ek kullanım analizlerini etkinleştiririz. Çerez Politikası