Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

MySQL/MariaDB'de Otomatik Yedekleme için mysqldump Kullanımı ve Basit Cron Job Oluşturma

  • Konuyu Başlatan Konuyu Başlatan thedevx
  • Başlangıç tarihi Başlangıç tarihi

thedevx

Üye
Katılım
14 Mart 2026
Mesajlar
18
Merhaba arkadaşlar, bugün sizlere sunucu yönetiminin en kritik konularından birini, veritabanı yedeklemeyi anlatacağım. Özellikle MySQL veya MariaDB kullanan arkadaşlar için, `mysqldump` ile nasıl güvenli ve otomatik yedekleme alabileceğinizi, bu yedekleri nasıl düzenleyip saklayabileceğinizi ve en önemlisi bu işlemi her gün otomatik yapacak bir `cron job`'ı nasıl kuracağınızı adım adım göstereceğim. Benim sunucularda da kullandığım, kurşun gibi sağlam bir yöntem bu. Unutmayın, yedek almayanın verisi, kaderine terk edilmiş demektir!

📦 1. Adım: mysqldump Nedir ve Temel Kullanımı

`mysqldump`, MySQL/MariaDB'nin bize sunduğu, bir veritabanının yapısını ve içeriğini SQL formatında dışa aktarmamızı sağlayan harika bir araçtır. Oluşturduğu `.sql` dosyası, veritabanınızı tamamen yeniden oluşturmak için gereken tüm komutları içerir.

Temel kullanımı çok basit. Tek bir veritabanını yedeklemek için şu komutu kullanırız:
Bash:
mysqldump -u [KULLANICI_ADI] -p[PAROLA] [VERITABANI_ADI] > [YEDEK_DOSYA_ADI].sql

Örnek: `forumdb` adlı veritabanını `forum_backup.sql` olarak yedekleyelim.
Bash:
mysqldump -u root -pSifrem123 forumdb > /root/backups/forum_backup_$(date +\%Y\%m\%d).sql

Burada dikkat ettiyseniz, dosya adına `$(date +\%Y\%m\%d)` ekleyerek yedek dosyasının adını `forum_backup_20241015` gibi tarihli hale getirdim. Bu, yedekleri takip etmek için çok önemli bir alışkanlıktır. Parolayı `-p`'den hemen sonra boşluksuz yazdığıma dikkat edin. Güvenlik için bu yöntem yerine aşağıda anlatacağım konfigürasyon dosyası yöntemini öneririm.

🔐 2. Adım: Güvenli Kimlik Doğrulama ve .my.cnf Dosyası

Komut satırında parola göstermek güvenlik riskidir. Bunun yerine, kullanıcı ev dizininde (örn: /root/.my.cnf) bir konfigürasyon dosyası oluşturabiliriz. Bu dosyaya kimlik bilgilerimizi yazarak, `mysqldump` komutunu parola girmeden çalıştırabiliriz.

Önce .my.cnf dosyasını oluşturalım:
Bash:
nano /root/.my.cnf

İçine aşağıdaki satırları ekleyip kaydedelim (`kullanici_adi` ve `parola` kısımlarını kendi bilgilerinizle değiştirin):
INI:
[client]
user = kullanici_adi
password = "guclu_parolaniz_buraya"

Son olarak, bu dosyanın yetkilerini sadece sahibinin okuyabileceği şekilde ayarlayalım. Bu adım kesinlikle atlanmamalıdır.
Bash:
chmod 600 /root/.my.cnf

Artık `mysqldump` komutunu daha basit ve güvenli bir şekilde çalıştırabiliriz:
Bash:
mysqldump forumdb > /root/backups/forum_backup.sql

⚙️ 3. Adım: Gelişmiş mysqldump Seçenekleri ve Optimize Yedek Scripti

Temel yedekleme işe yarar ama profesyonel bir yedek için birkaç önemli parametre daha kullanmalıyız. İşte benim tüm sunucularımda kullandığım, oldukça sağlam bir yedekleme komutu:

Bash:
mysqldump --single-transaction --quick --lock-tables=false \
--routines --events --triggers --add-drop-database \
forumdb | gzip > /root/backups/forumdb_$(date +\%Y\%m\%d_\%H\%M).sql.gz

Şimdi bu parametreler ne işe yarıyor, kısaca açıklayayım:
- `--single-transaction`: Yedek alırken veritabanını kilitlemez, çalışan uygulamanızı (forumunuzu) durdurmaz. InnoDB tabloları için çok önemli.
- `--quick`: Büyük tabloları daha verimli bir şekilde yedekler.
- `--routines --events --triggers`: Saklı yordamları, event'ları ve tetikleyicileri de yedeğe dahil eder.
- `--add-drop-database`: Yedeği geri yüklerken, önce veritabanını silip yeniden oluşturur. Temiz bir kurulum sağlar.
- `| gzip`: Yedek dosyasını anında sıkıştırır, disk alanından ciddi tasarruf ettirir.

Bu komutu bir script haline getirelim. `/usr/local/bin/db_backup.sh` dosyasını oluşturalım:
Bash:
#!/bin/bash

# Yedeklerin kaydedileceği dizin
BACKUP_DIR="/root/backups"
# Yedeklenecek veritabanı adı
DB_NAME="forumdb"
# Yedek dosyası adı (Tarih ve saat bilgisi ile)
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_$(date +\%Y\%m\%d_\%H\%M).sql.gz"

# Yedek dizini yoksa oluştur
mkdir -p $BACKUP_DIR

# Yedekleme komutunu çalıştır
mysqldump --single-transaction --quick --lock-tables=false \
--routines --events --triggers --add-drop-database \
$DB_NAME | gzip > $BACKUP_FILE

# 30 günden eski yedekleri sil (Opsiyonel, disk alanı için)
find $BACKUP_DIR -name "${DB_NAME}_.sql.gz" -mtime +30 -delete

echo "[$(date)] Yedekleme tamamlandı: $BACKUP_FILE"

Script'e çalıştırma yetkisi verelim:
Bash:
chmod +x /usr/local/bin/db_backup.sh

Artık sadece `./db_backup.sh` yazarak tüm bu işlemleri tek seferde yapabilirsiniz.

⚠️ 4. Adım: Dikkat Edilmesi Gereken Kritik Noktalar

1. Yedekleri Test Edin! Ayda en az bir kere, aldığınız bir yedeği test bir sunucuda veya yerel ortamda geri yükleyerek çalıştığını doğrulayın. Yedek alıp geri yüklemeyi bilmemek, yedek almamakla aynı şeydir.
2. Yedekleri Farklı Bir Yerde Saklayın. Yedekleriniz sunucu ile aynı diskte duruyorsa, disk arızasında her şeyi kaybedersiniz. Mümkünse başka bir sunucuya, object storage'a (S3 gibi) veya en azından farklı bir mount point'e kopyalayan bir mekanizma ekleyin.
3. .my.cnf Dosyasının Güvenliği: Bu dosyanın izinlerinin `600` olduğundan ve içindeki kullanıcının yedekleme için gerekli minimum yetkilere sahip olduğundan emin olun.

⏰ 5. Adım: Cron Job ile Yedeklemeyi Otomatikleştirme

Artık her şey hazır. Sıra, bu script'in her gün kendiliğinden çalışmasını sağlamaya geldi. Bunun için `cron` kullanacağız.

Cron tablosunu düzenlemek için:
Bash:
crontab -e

Açılan dosyaya, script'imizin her gün gece 03:00'te çalışması için aşağıdaki satırı ekleyelim:
Bash:
# Her gün saat 03:00'te veritabanı yedekleme scriptini çalıştır
0 3    /usr/local/bin/db_backup.sh > /var/log/db_backup.log 2>&1

Bu ayarla, script her gece 03:00'te çalışacak ve çıktıları `/var/log/db_backup.log` dosyasına yazılacak. Bu log dosyasını düzenli kontrol etmeyi unutmayın.

Eğer haftalık yedek almak isterseniz (Pazar günü 03:00'te), şu satırı kullanabilirsiniz:
Bash:
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri