Takip et

Ubuntu 20.04 Üzerinde MongoDB Veritabanını Yedekleme, Geri Yükleme ve Taşıma: Kapsamlı Bir Rehber

Ubuntu 20.04 Üzerinde MongoDB Veritabanını Yedekleme, Geri Yükleme ve Taşıma: Kapsamlı Bir Rehber 1. Giriş Günümüzün hızla değişen dij

Ubuntu 20.04 Üzerinde MongoDB Veritabanını Yedekleme, Geri Yükleme ve Taşıma: Kapsamlı Bir Rehber

1. Giriş

Günümüzün hızla değişen dijital dünyasında, veri, her kuruluşun en değerli varlıklarından biridir. Özellikle büyük ölçekli ve dinamik veri setleriyle çalışan uygulamalar için tercih edilen NoSQL veritabanlarından MongoDB, esnek yapısı ve yüksek performansı sayesinde popülaritesini artırmıştır. Ancak, herhangi bir veritabanı sisteminde olduğu gibi, MongoDB verilerinin güvenliğini sağlamak, olası veri kayıplarına karşı önlem almak ve farklı ortamlar arasında veri taşımak kritik öneme sahiptir. Veri kaybı, donanım arızaları, yazılım hataları, insan hataları veya kötü niyetli saldırılar gibi birçok nedenden kaynaklanabilir ve işletmeler için ciddi sonuçlar doğurabilir.

Bu makale, Ubuntu 20.04 işletim sistemi üzerinde çalışan bir MongoDB veritabanını nasıl güvenli bir şekilde yedekleyeceğinizi, ihtiyaç duyulduğunda nasıl geri yükleyeceğinizi ve farklı sunucular veya ortamlar arasında nasıl taşıyacağınızı adım adım açıklamaktadır. Amacımız, hem temel yedekleme ve geri yükleme işlemlerini hem de daha gelişmiş taşıma stratejilerini ve otomasyon çözümlerini pratik örneklerle sunarak, MongoDB yöneticilerine ve geliştiricilere kapsamlı bir rehber sağlamaktır. Bu rehber boyunca, MongoDB’nin kendi bünyesinde sunduğu güçlü mongodump ve mongorestore araçlarını detaylı bir şekilde inceleyeceğiz.

2. Ön Gereksinimler

Bu rehberdeki adımları başarıyla uygulayabilmek için belirli ön gereksinimlerin karşılanmış olması gerekmektedir.

2.1. Ubuntu 20.04 Kurulumu

İşlemleri gerçekleştireceğiniz bir Ubuntu 20.04 sunucusuna (fiziksel veya sanal) ihtiyacınız vardır. Sunucuya SSH üzerinden veya doğrudan konsol erişiminiz olmalıdır. Yönetici (sudo) yetkilerine sahip bir kullanıcı ile oturum açmanız gerekmektedir.

2.2. MongoDB Kurulumu

Ubuntu 20.04 sunucunuzda çalışan bir MongoDB örneği kurulu olmalıdır. Eğer henüz kurulu değilse, MongoDB’nin resmi belgelerini takip ederek kurulumu gerçekleştirebilirsiniz. Genellikle aşağıdaki adımlarla hızlı bir kurulum yapılabilir:

# GPG anahtarını içe aktarın
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

MongoDB deposunu sources.list.d dizinine ekleyin

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

Paket listesini güncelleyin

sudo apt update

MongoDB'yi kurun

sudo apt install -y mongodb-org

MongoDB servisini başlatın ve başlangıçta otomatik çalışmasını sağlayın

sudo systemctl start mongod sudo systemctl enable mongod sudo systemctl status mongod

Kurulum sonrası MongoDB’nin çalıştığını sudo systemctl status mongod komutu ile kontrol edebilirsiniz.

2.3. Gerekli Araçlar

MongoDB yedekleme ve geri yükleme işlemleri için mongodump ve mongorestore komut satırı araçlarına ihtiyacımız olacak. Bu araçlar, MongoDB’nin “Database Tools” paketi içerisinde yer alır. MongoDB’yi kurduysanız, bu araçlar genellikle otomatik olarak kurulmuş olacaktır. Ancak, eğer kurulu değilse veya ayrı bir sunucuda bu işlemleri yapacaksanız, aşağıdaki komutla kurabilirsiniz:

sudo apt install -y mongodb-database-tools

Kurulumun ardından mongodump --version ve mongorestore --version komutlarını çalıştırarak araçların kurulu ve erişilebilir olduğunu doğrulayabilirsiniz.

3. MongoDB Veritabanını Yedekleme

Veri yedekleme, bir felaket kurtarma stratejisinin temelidir. MongoDB’de yedekleme için birden fazla yöntem bulunsa da, en yaygın ve esnek yöntem mongodump aracıdır.

3.1. mongodump Kullanarak Yedekleme

mongodump aracı, MongoDB veritabanınızın BSON (Binary JSON) formatında bir yedeğini oluşturur. Bu yedekler, daha sonra mongorestore ile kolayca geri yüklenebilir.

3.1.1. Tüm Veritabanlarını Yedekleme

Bir MongoDB örneğindeki tüm veritabanlarını yedeklemek için aşağıdaki komutu kullanabilirsiniz:

mongodump --out /var/backups/mongodb/$(date +%Y%m%d%H%M%S)

* --out: Yedeklerin kaydedileceği dizini belirtir. Burada, her yedekleme için benzersiz bir tarih ve saat damgası içeren bir alt dizin oluşturulur.
* $(date +%Y%m%d%H%M%S): Mevcut tarih ve saati YYYYMMDDHHMMSS formatında döndürür. Bu, yedekleme dizinlerinin karışmasını önler.

Örnek çıktı:

2023-10-27T10:30:01.000+0000    writing admin.system.version to /var/backups/mongodb/20231027103000/admin/system.version.bson
2023-10-27T10:30:01.000+0000    writing config.system.sessions to /var/backups/mongodb/20231027103000/config/system.sessions.bson
...

Yedekleme dizininin içinde, her veritabanı için ayrı bir alt dizin ve bu dizinlerin içinde koleksiyonların BSON dosyaları ve indeks tanımları (.metadata.json) bulunur.

3.1.2. Belirli Bir Veritabanını Yedekleme

Sadece belirli bir veritabanını yedeklemek isterseniz, --db parametresini kullanabilirsiniz:

mongodump --db veritabani_adi --out /var/backups/mongodb/$(date +%Y%m%d%H%M%S)_veritabani_adi

Örneğin, mydb adında bir veritabanını yedeklemek için:

mongodump --db mydb --out /var/backups/mongodb/$(date +%Y%m%d%H%M%S)_mydb

3.1.3. Belirli Bir Koleksiyonu Yedekleme

Daha da spesifik olarak, belirli bir veritabanı içindeki tek bir koleksiyonu yedekleyebilirsiniz:

mongodump --db veritabani_adi --collection koleksiyon_adi --out /var/backups/mongodb/$(date +%Y%m%d%H%M%S)_koleksiyon_adi

Örneğin, mydb veritabanındaki users koleksiyonunu yedeklemek için:

mongodump --db mydb --collection users --out /var/backups/mongodb/$(date +%Y%m%d%H%M%S)_users

3.1.4. Sıkıştırma ve Yetkilendirme

Büyük veritabanları için yedekleme boyutunu azaltmak amacıyla sıkıştırma kullanmak önemlidir. Ayrıca, yetkilendirme (authentication) etkinleştirilmiş bir MongoDB örneği için kullanıcı adı ve şifre belirtmeniz gerekir.

* Sıkıştırma: --gzip parametresi ile yedekleme dosyalarını sıkıştırabilirsiniz.

mongodump --db mydb --gzip --out /var/backups/mongodb/$(date +%Y%m%d%H%M%S)_mydb.gz

Bu komut, mydb veritabanının sıkıştırılmış bir yedeğini oluşturur. Ancak --out ile belirtilen dizin yapısı korunur, yani sıkıştırma her BSON dosyası için ayrı ayrı uygulanır. Tek bir sıkıştırılmış arşiv dosyası elde etmek için farklı bir yöntem (örneğin tar ile sıkıştırma) kullanmanız gerekebilir, ancak mongodump‘ın kendi --gzip parametresi her BSON dosyasını ayrı ayrı sıkıştırır ve mongorestore tarafından doğrudan okunabilir.
* Yetkilendirme: MongoDB’nizde yetkilendirme etkinse, yedekleme işlemi için uygun kimlik bilgilerini sağlamanız gerekir.

mongodump --db mydb --username yedek_kullanici --password "sifre" --authenticationDatabase admin --out /var/backups/mongodb/$(date +%Y%m%d%H%M%S)_mydb

* --username: Yedekleme işlemini yapacak kullanıcının adı.
* --password: Kullanıcının şifresi.
* --authenticationDatabase: Kullanıcının yetkilendirildiği veritabanı (genellikle admin).
* Diğer parametreler: --host (MongoDB sunucusunun IP adresi veya hostname) ve --port (MongoDB’nin çalıştığı port, varsayılan 27017).

3.2. Dosya Sistemi Anlık Görüntüleri (Snapshots)

mongodump dışında, özellikle büyük ölçekli ve kritik sistemlerde LVM (Logical Volume Manager) veya bulut sağlayıcıların (AWS EBS, Azure Disk, Google Persistent Disk) anlık görüntü (snapshot) özelliklerini kullanarak da yedekleme yapılabilir. Bu yöntemler, tüm disk bölümünün anlık bir görüntüsünü alarak hızlı yedekleme sağlar. Ancak, veritabanı tutarlılığını sağlamak için anlık görüntü alınmadan önce MongoDB’nin yazma işlemlerini kısa bir süreliğine duraklatması (fsyncLock) veya bir replica set’in secondary düğümünden anlık görüntü alınması gibi özel önlemler gerekebilir. Bu yöntemler daha çok sistem yöneticileri tarafından tercih edilir ve mongodump‘a göre daha karmaşıktır.

3.3. Replica Set Yedeklemesi

Üretim ortamlarında MongoDB genellikle replica set olarak yapılandırılır. Bu durumda, yedeklemeyi bir secondary (ikincil) düğümden almak, primary (birincil) düğüm üzerindeki performansı etkilemez. Ayrıca, mongodump ile --oplog parametresini kullanarak yedekleme yapmak, point-in-time recovery (belirli bir ana geri dönüş) için gerekli olan oplog’u da yedeklemenizi sağlar.

mongodump --oplog --db mydb --out /var/backups/mongodb/$(date +%Y%m%d%H%M%S)_mydb_oplog

--oplog parametresi, yedekleme işlemi sırasında gerçekleşen tüm işlemleri (oplog) yakalar. Bu, yedekleme tamamlandıktan sonra bile veritabanını yedekleme anından sonraki herhangi bir noktaya geri yüklemenizi sağlar, bu da felaket kurtarma senaryolarında hayati önem taşır. Replica set yedeklemelerinde, genellikle bir secondary düğümün okuma tercihini değiştirerek (db.getMongo().setReadPref('secondaryPreferred')) yedekleme yapılır.

4. MongoDB Veritabanını Geri Yükleme

Yedeklemeler, ancak başarılı bir şekilde geri yüklenebildiklerinde değerlidir. mongorestore aracı, mongodump ile oluşturulan BSON yedeklerini bir MongoDB örneğine geri yüklemek için kullanılır.

4.1. mongorestore Kullanarak Geri Yükleme

mongorestore temel olarak mongodump‘ın oluşturduğu dizin yapısını takip eder.

4.1.1. Temel Geri Yükleme

Tüm yedeklenmiş veritabanlarını orijinal konumlarına geri yüklemek için:

mongorestore /var/backups/mongodb/20231027103000

Bu komut, /var/backups/mongodb/20231027103000 dizinindeki tüm veritabanlarını ve koleksiyonları, yedeklendikleri isimlerle geri yükler. Eğer hedef veritabanı veya koleksiyon zaten varsa, mongorestore mevcut belgelerle çakışanları varsayılan olarak atlar (overwrite yapmaz).

4.1.2. Belirli Bir Veritabanını Geri Yükleme

Yedekleme dizini içinden sadece belirli bir veritabanını geri yüklemek için:

mongorestore --db hedef_veritabani_adi /var/backups/mongodb/20231027103000/kaynak_veritabani_adi

Örneğin, mydb veritabanının yedeğini new_mydb olarak geri yüklemek için:

mongorestore --db new_mydb /var/backups/mongodb/20231027103000/mydb

Bu komut, mydb yedek dizinindeki tüm koleksiyonları new_mydb veritabanına geri yükler.

4.1.3. Belirli Koleksiyonları Geri Yükleme

Bir yedekten belirli bir koleksiyonu geri yüklemek için:

mongorestore --db hedef_veritabani --collection hedef_koleksiyon /var/backups/mongodb/20231027103000/kaynak_veritabani/kaynak_koleksiyon.bson

Örneğin, mydb yedek dizinindeki users koleksiyonunu new_mydb veritabanındaki new_users koleksiyonuna geri yüklemek için:

mongorestore --db new_mydb --collection new_users /var/backups/mongodb/20231027103000/mydb/users.bson

4.1.4. Farklı Bir Veritabanına veya Koleksiyona Geri Yükleme (--nsFrom ve --nsTo)

Eğer yedeklediğiniz veritabanı veya koleksiyon adını geri yükleme sırasında değiştirmek isterseniz, --nsFrom (namespace from) ve --nsTo (namespace to) parametrelerini kullanabilirsiniz.

mongorestore --nsFrom "kaynak_db.kaynak_koleksiyon" --nsTo "hedef_db.hedef_koleksiyon" /path/to/backup/files

Örneğin, mydb.users koleksiyonunu new_db.new_users olarak geri yüklemek için:

mongorestore --nsFrom "mydb.users" --nsTo "new_db.new_users" /var/backups/mongodb/20231027103000/mydb/users.bson

Bu, veritabanı ve koleksiyon adlarını yeniden eşlemek için çok kullanışlıdır.

4.1.5. Drop ve Restore (--drop)

Geri yüklemeden önce hedef veritabanındaki veya koleksiyondaki mevcut verileri silmek (drop etmek) isterseniz, --drop parametresini kullanabilirsiniz. Bu, temiz bir geri yükleme sağlar ve mevcut verilerin üzerine yazmak yerine tamamen değiştirilmesini garantiler. Ancak, bu komutu kullanırken son derece dikkatli olmalısınız, çünkü mevcut verileri kalıcı olarak siler.

mongorestore --drop /var/backups/mongodb/20231027103000/mydb

Bu komut, mydb veritabanındaki tüm koleksiyonları geri yüklemeden önce siler.

4.1.6. Sıkıştırılmış Yedekleri Geri Yükleme ve Yetkilendirme

Eğer yedekler --gzip parametresiyle sıkıştırıldıysa, geri yüklerken de --gzip parametresini kullanmalısınız:

mongorestore --gzip /var/backups/mongodb/20231027103000_mydb.gz

Yetkilendirme etkinse, mongorestore için de kimlik bilgilerini sağlamanız gerekir:

mongorestore --db mydb --username yedek_kullanici --password "sifre" --authenticationDatabase admin /var/backups/mongodb/20231027103000/mydb

Geri yükleme işlemi, yedeklemenin boyutuna ve sunucunun performansına bağlı olarak zaman alabilir. İşlemin tamamlandığını ve verilerin doğru şekilde geri yüklendiğini kontrol etmek için MongoDB shell’i (mongosh) kullanarak veritabanınızı kontrol etmelisiniz.

5. MongoDB Veritabanını Taşıma

Veritabanı taşıma (migration), bir MongoDB veritabanını bir sunucudan veya ortamdan diğerine aktarma işlemidir. Bu işlem, sunucu yükseltmeleri, buluta geçiş, geliştirme ortamından üretim ortamına dağıtım veya felaket kurtarma senaryolarında gerekli olabilir.

5.1. mongodump ve mongorestore Kullanarak Taşıma

Bu, en basit ve en yaygın taşıma yöntemidir ve küçük ile orta ölçekli veritabanları için idealdir.
Adım 1: Kaynak Sunucuda Yedekleme
Kaynak sunucunuzda, taşımak istediğiniz veritabanının yedeğini alın. Tüm veritabanlarını veya sadece belirli olanları yedekleyebilirsiniz. Sıkıştırma kullanmak, taşıma süresini azaltabilir.

# Kaynak sunucuda
mongodump --db veritabani_adi --gzip --out /tmp/mongodb_yedek

Eğer yetkilendirme etkinse, --username, --password ve --authenticationDatabase parametrelerini eklemeyi unutmayın.

Adım 2: Yedek Dosyasını Hedef Sunucuya Aktarma
Yedekleme tamamlandıktan sonra, oluşturulan dizini (bu örnekte /tmp/mongodb_yedek) hedef sunucuya kopyalamanız gerekir. scp (Secure Copy Protocol) veya rsync gibi araçları kullanabilirsiniz.

# Kaynak sunucuda (veya yerel makinenizden)
scp -r /tmp/mongodb_yedek kullanici@hedef_sunucu_ip:/tmp/

kullanici, hedef sunucudaki kullanıcı adınız ve hedef_sunucu_ip hedef sunucunun IP adresi veya hostname’idir.

Adım 3: Hedef Sunucuda Geri Yükleme
Yedek dosyaları hedef sunucuya aktarıldıktan sonra, mongorestore kullanarak verileri hedef MongoDB örneğine geri yükleyebilirsiniz.

# Hedef sunucuda
mongorestore --db veritabani_adi --gzip /tmp/mongodb_yedek/veritabani_adi

Eğer yetkilendirme etkinse, hedef sunucudaki MongoDB için de uygun kimlik bilgilerini sağlamalısınız. Eğer yedeklediğiniz veritabanının adını değiştirmek isterseniz, 4.1.2 veya 4.1.4 bölümlerindeki mongorestore komutlarını kullanabilirsiniz.

5.2. Replica Set ile Taşıma

Kesintisiz (near-zero downtime) taşıma için, özellikle üretim ortamlarında, replica set yöntemini kullanmak daha gelişmiş bir çözümdür. Bu yöntem, MongoDB’nin yerleşik replikasyon özelliklerinden yararlanır.
Adım 1: Yeni Sunucuyu Replica Set’e Ekleme
Hedef sunucuya yeni bir MongoDB örneği kurun ve mevcut replica set’in bir üyesi olarak ekleyin. MongoDB yapılandırma dosyasında (genellikle /etc/mongod.conf) replication.replSetName ayarının mevcut replica set adıyla eşleştiğinden emin olun.
Ardından, kaynak sunucudaki mongosh konsolunda aşağıdaki komutu çalıştırın:

rs.add("hedef_sunucu_ip:27017")

Yeni üye, mevcut verileri otomatik olarak senkronize etmeye başlayacaktır. Bu işlem, veritabanının boyutuna ve ağ hızına bağlı olarak zaman alabilir. rs.status() komutu ile senkronizasyon durumunu takip edebilirsiniz.

Adım 2: Yeni Üyenin Primary Olmasını Sağlama (İsteğe Bağlı)
Tüm veriler senkronize edildikten sonra, yeni üyenin primary (birincil) olmasını sağlayabilirsiniz. Bunun için mevcut primary’yi adım adım düşürerek yeni primary’nin seçilmesini tetikleyebilirsiniz. Ancak, bu işlem bir kısa süreli kesintiye neden olabilir. Genellikle, yeni üyeyi primary yapmadan önce uygulamanın yeni üyeye doğru şekilde bağlanabildiğinden emin olmak için testler yapılır.

Adım 3: Eski Sunucuyu Replica Set’ten Çıkarma
Yeni sunucu başarıyla primary olduktan ve uygulamanızın yeni primary’ye sorunsuz bir şekilde bağlandığından emin olduktan sonra, eski sunucuyu replica set’ten çıkarabilirsiniz:

rs.remove("eski_sunucu_ip:27017")

Bu yöntem, taşıma sırasında minimum kesinti (downtime) sağlar ve büyük, kritik veritabanları için tercih edilir.

5.3. Veri Taşıma Stratejileri

* Offline Taşıma: Veritabanının kısa bir süre için erişilemez olduğu taşıma türüdür. mongodump ve mongorestore bu kategoriye girer. Genellikle bakım pencerelerinde veya düşük trafikli zamanlarda gerçekleştirilir.
* Online Taşıma: Veritabanının taşıma sırasında çalışır durumda kaldığı taşıma türüdür. Replica set üyeliği değiştirme veya MongoDB Atlas gibi bulut servislerinin canlı geçiş özellikleri bu kategoriye girer. Minimum kesinti gerektiren uygulamalar için hayati öneme sahiptir.
* Taşıma Öncesi Planlama: Herhangi bir taşıma işlemine başlamadan önce kapsamlı bir planlama yapılmalıdır. Bu, hedef ortamın hazırlanması, ağ yapılandırması, güvenlik ayarları ve test senaryolarını içerir.
* Test Etme: Taşıma işlemi, üretim ortamına uygulanmadan önce bir test ortamında mutlaka denenmelidir. Bu, olası sorunları önceden tespit etmenizi ve taşıma sürecini optimize etmenizi sağlar.

6. Otomatik Yedekleme Çözümleri

Manuel yedeklemeler hataya açık ve unutulma riski taşıdığından, otomatik yedekleme sistemleri kurmak en iyi uygulamadır. Linux sistemlerinde cron hizmeti, belirli zamanlarda komutları veya betikleri çalıştırmak için idealdir.

6.1. Yedekleme Betiği Oluşturma

Öncelikle, yedekleme işlemini gerçekleştirecek bir kabuk betiği (shell script) oluşturalım. Bu betik, tarih damgası ekleyebilir, yedekleri sıkıştırabilir ve eski yedekleri temizleyebilir.

#!/bin/bash

Yedeklerin saklanacağı ana dizin

BACKUP_BASE_DIR="/var/backups/mongodb"

Mevcut tarih ve saat damgası

DATE=$(date +%Y%m%d%H%M%S)

Bu yedekleme için özel dizin

BACKUP_DIR="$BACKUP_BASE_DIR/$DATE"

MongoDB bağlantı bilgileri (yetkilendirme kullanılıyorsa)

Eğer yetkilendirme kullanmıyorsanız, bu satırları yorum satırı yapabilir veya silebilirsiniz.

USERNAME="yedek_kullanici" PASSWORD="sifre" # Şifrenizi buraya yazın veya güvenli bir şekilde yönetin (örn: env değişkenleri) AUTH_DB="admin" # Kullanıcının yetkilendirildiği veritabanı

Yedeklenecek veritabanı adı (tüm veritabanları için boş bırakın: DB_NAME="")

DB_NAME="your_database_name" # Örn: "mydb"

Eski yedekleri kaç gün saklayacağınız (örneğin 7 gün)

RETENTION_DAYS=7

Yedekleme dizinini oluştur

mkdir -p "$BACKUP_DIR"

Yedekleme komutu

Tüm veritabanlarını yedeklemek için:

mongodump --gzip --username "$USERNAME" --password "$PASSWORD" --authenticationDatabase "$AUTH_DB" --out "$BACKUP_DIR"

Belirli bir veritabanını yedeklemek için (yukarıdaki DB_NAME değişkenini kullanır):

if [ -n "$DB_NAME" ]; then echo "[$DATE] '$DB_NAME' veritabanı yedekleniyor..." mongodump --db "$DB_NAME" --gzip --username "$USERNAME" --password "$PASSWORD" --authenticationDatabase "$AUTH_DB" --out "$BACKUP_DIR" else echo "[$DATE] Tüm veritabanları yedekleniyor..." mongodump --gzip --username "$USERNAME" --password "$PASSWORD" --authenticationDatabase "$AUTH_DB" --out "$BACKUP_DIR" fi

Komutun başarıyla tamamlanıp tamamlanmadığını kontrol et

if [ $? -eq 0 ]; then echo "[$DATE] MongoDB yedeklemesi başarıyla tamamlandı: $BACKUP_DIR" else echo "[$DATE] HATA: MongoDB yedeklemesi başarısız oldu!" fi

Eski yedekleri temizle

echo "[$DATE] $RETENTION_DAYS günden eski yedekler temizleniyor..." find "$BACKUP_BASE_DIR" -maxdepth 1 -type d -ctime +"$RETENTION_DAYS" -exec rm -rf {} \; echo "[$DATE] Temizleme işlemi tamamlandı."

Bu betiği /usr/local/bin/backup_mongodb.sh gibi bir yere kaydedin ve çalıştırılabilir hale getirin:

sudo nano /usr/local/bin/backup_mongodb.sh
sudo chmod +x /usr/local/bin/backup_mongodb.sh

Güvenlik Notu: Şifreleri doğrudan betik içine yazmak güvenlik riski oluşturabilir. Üretim ortamlarında şifreleri ortam değişkenleri, şifre yöneticileri veya MongoDB’nin Keyfile Authentication gibi daha güvenli yöntemlerle yönetmeniz önerilir.

6.2. Cron Job Ayarlama

Şimdi bu betiği düzenli aralıklarla çalıştırmak için bir cron job oluşturalım.

crontab -e

Açılan dosyaya aşağıdaki satırı ekleyin (örneğin, her gece saat 02:00’de çalıştırmak için):

0 2   * /usr/local/bin/backup_mongodb.sh >> /var/log/mongodb_backup.log 2>&1

0 2 : Cron zamanlaması. Ayın her günü, haftanın her günü, her ay, her yıl saat 02:00’de çalışır.
* /usr/local/bin/backup_mongodb.sh: Oluşturduğunuz yedekleme betiğinin tam yolu.
* >> /var/log/mongodb_backup.log 2>&1: Betiğin çıktısını ve hatalarını /var/log/mongodb_backup.log dosyasına yönlendirir. Bu, yedekleme işlemlerinin durumunu izlemek ve olası sorunları gidermek için çok önemlidir.

Cron job’ı kaydettikten sonra, sisteminiz artık MongoDB yedeklemesini otomatik olarak gerçekleştirecektir. Düzenli olarak log dosyasını kontrol ederek yedeklemelerin sorunsuz çalıştığından emin olun.

7. En İyi Uygulamalar ve İpuçları

Yedekleme, geri yükleme ve taşıma işlemleri, sadece teknik adımları uygulamakla kalmaz, aynı zamanda belirli en iyi uygulamaları takip etmeyi de gerektirir.

7.1. Yedekleme Sıklığı

Yedekleme sıklığı, veri değişim hızınıza ve işletmenizin RPO (Recovery Point Objective – Kurtarma Noktası Hedefi) hedeflerine bağlıdır. Ne kadar sık yedekleme yaparsanız, veri kaybı durumunda o kadar az veri kaybedersiniz. Kritik uygulamalar için saatlik veya daha sık yedeklemeler gerekebilirken, daha az dinamik veriler için günlük yedeklemeler yeterli olabilir.

7.2. Yedekleme Konumu

Yedeklerinizi, orijinal veritabanının bulunduğu sunucudan veya depolama biriminden ayrı bir yerde saklamanız hayati önem taşır.
* Ayrı Disk/Sunucu: Sunucunun kendisi arızalandığında yedeklerinizi kaybetmemek için ayrı bir disk veya farklı bir sunucuya yedekleyin.
* Ağ Depolama: NFS, SMB gibi ağ depolama çözümleri veya NAS cihazları kullanılabilir.
* Bulut Depolama: Amazon S3, Azure Blob Storage, Google Cloud Storage gibi bulut depolama hizmetleri, coğrafi yedeklilik ve yüksek dayanıklılık sunar. Bu, felaket kurtarma senaryolarında çok değerlidir.

7.3. Yedekleme Testi

Bir yedekleme planının en önemli ancak genellikle göz ardı edilen adımı, yedeklerin düzenli olarak test edilmesidir. Yedeklerinizin gerçekten geri yüklenebilir olduğunu doğrulamak için periyodik olarak bir test ortamına geri yükleme yapmalısınız. Bu, yedekleme betiğinizdeki veya yedekleme sürecinizdeki olası hataları ortaya çıkarır.

7.4. Güvenlik

Yedekleme dosyaları hassas veriler içerebilir. Bu nedenle, yedeklerin güvenliğini sağlamak çok önemlidir:
* Erişim İzinleri: Yedekleme dizinlerine ve dosyalarına yalnızca yetkili kullanıcıların erişebildiğinden emin olun.
* Şifreleme: Yedekleme dosyalarını diskte veya bulutta şifreleyin.
* Minimum Yetki Prensibi: Yedekleme işlemlerini gerçekleştiren MongoDB kullanıcısına yalnızca yedekleme için gerekli olan minimum yetkileri verin.

7.5. Performans Etkisi

mongodump işlemi, veritabanı üzerinde bir miktar yük oluşturabilir. Özellikle büyük veritabanları için bu yük, üretim sistemlerinin performansını etkileyebilir.
* Düşük Trafik Saatleri: Yedeklemeleri, sistemin en az yüklü olduğu saatlerde (örneğin gece yarısı) çalıştırmayı planlayın.
* Replica Set Secondary: Eğer bir replica set kullanıyorsanız, yedeklemeyi bir secondary düğümden alarak primary üzerindeki etkiyi minimize edin.
* Kaynak Kısıtlaması: mongodump komutunda --numParallelCollections gibi parametrelerle paralel yedekleme sayısını ayarlayarak sunucu üzerindeki yükü kontrol edebilirsiniz.

8. Sonuç

MongoDB veritabanlarının yedeklenmesi, geri yüklenmesi ve taşınması, her veri yöneticisinin ve geliştiricisinin ustalaşması gereken kritik becerilerdir. Bu makalede, Ubuntu 20.04 üzerinde mongodump ve mongorestore gibi güçlü MongoDB araçlarını kullanarak bu işlemleri nasıl gerçekleştireceğinizi detaylı bir şekilde ele aldık. Temel yedekleme ve geri yükleme işlemlerinden, replica set tabanlı kesintisiz taşıma stratejilerine ve otomatik yedekleme çözümlerine kadar geniş bir yelpazede pratik örnekler sunduk.

Unutulmamalıdır ki, veri güvenliği dinamik bir süreçtir. Bu nedenle, yedekleme stratejilerinizi düzenli olarak gözden geçirmeli, yedeklerinizi test etmeli ve en iyi uygulamaları takip etmelisiniz. Felaket kurtarma planlarınızın güncel ve işlevsel olduğundan emin olmak, olası veri kayıplarının önüne geçmek ve iş sürekliliğini sağlamak için vazgeçilmezdir. Bu rehberin, MongoDB veritabanı yönetimi yolculuğunuzda size sağlam bir temel oluşturmasını umuyoruz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version