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.
