Wordpress İle Özel Bir Veritabanı Yedekleme Sistemi Nasıl Yapılır?

Wordpress İle Özel Bir Veritabanı Yedekleme Sistemi Nasıl Yapılır?
Wordpress İle Özel Bir Veritabanı Yedekleme Sistemi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Özel bir yedekleme sistemi geliştirmeden önce sunucunuzun belirli kriterleri karşıladığından emin olmalısınız. Bu sistem, WordPress 6.x ve üzeri sürümlerle uyumlu olacak şekilde tasarlanmıştır.

  • PHP Sürümü: En az 8.1 veya üzeri (daha hızlı ve güvenli işlemler için).
  • Yetkilendirme: Sunucuda mysqldump komutuna erişim veya PHP üzerinden veritabanı sorgusu çalıştırma yetkisi.
  • Dizin İzinleri: Yedeklerin kaydedileceği klasörün web sunucusu tarafından yazılabilir olması.
  • Güvenlik: Yedekleme dosyalarının dışarıdan doğrudan erişime kapatılması (.htaccess veya nginx.conf ile).

Adım 1: Yedekleme Dizininin Güvenli Oluşturulması

Yedeklerinizi sitenizin kök dizininde değil, dışarıdan erişilemeyecek veya en azından bir index.php dosyası ile korunan bir klasörde tutmalısınız. Aşağıdaki kod, güvenli bir klasör yapısı oluşturur.


function create_backup_directory() {
    $upload_dir = wp_upload_dir();
    $backup_path = $upload_dir['basedir'] . '/db_backups';

    if (!file_exists($backup_path)) {
        wp_mkdir_p($backup_path);
        // Doğrudan erişimi engellemek için index dosyası oluştur
        file_put_contents($backup_path . '/index.php', '


Adım 10: Veritabanı Dökümü İçin SQL Komutlarının Çalıştırılması

WordPress veritabanını yedeklemek için en güvenilir yöntem, sunucudaki mysqldump komutunu PHP üzerinden çağırmaktır. Bu yöntem, büyük veritabanlarında bile yüksek performans sağlar. Aşağıdaki fonksiyon, veritabanı bilgilerini WordPress yapılandırmasından otomatik çeker ve sıkıştırılmış bir .sql dosyası oluşturur.

function generate_db_backup() {
    global $wpdb;
    $upload_dir = wp_upload_dir();
    $backup_path = $upload_dir['basedir'] . '/db_backups';
    $filename = 'backup-' . date('Y-m-d_H-i-s') . '.sql.gz';
    $filepath = $backup_path . '/' . $filename;

    $command = sprintf(
        'mysqldump -u %s -p%s -h %s %s | gzip > %s',
        escapeshellarg(DB_USER),
        escapeshellarg(DB_PASSWORD),
        escapeshellarg(DB_HOST),
        escapeshellarg(DB_NAME),
        escapeshellarg($filepath)
    );

    exec($command, $output, $return_var);

    if ($return_var === 0) {
        return $filepath;
    } else {
        throw new Exception('Yedekleme başarısız oldu. Hata kodu: ' . $return_var);
    }
}

Adım 11: Performans Optimizasyonu ve Zamanlanmış Görevler

Yedekleme işlemleri sunucu kaynaklarını yoğun kullanabilir. Özellikle büyük veritabanlarında "timeout" sorunlarını önlemek için işlemleri arka planda çalıştırmak (WP-Cron) ve bellek limitlerini geçici olarak artırmak kritik öneme sahiptir.

Zamanlanmış Görev (WP-Cron) Entegrasyonu

Yedekleme işlemini manuel tetiklemek yerine, WordPress'in dahili cron sistemini kullanarak belirli aralıklarla (örneğin günlük) otomatik yedek alabilirsiniz.

if (!wp_next_scheduled('my_daily_backup_event')) {
    wp_schedule_event(time(), 'daily', 'my_daily_backup_event');
}

add_action('my_daily_backup_event', 'run_automated_backup');

function run_automated_backup() {
    // Bellek limitini artır
    @ini_set('memory_limit', '256M');
    @set_time_limit(300);
    
    try {
        generate_db_backup();
    } catch (Exception $e) {
        error_log('Yedekleme Hatası: ' . $e->getMessage());
    }
}

İleri İpuçları: Hata Ayıklama ve Loglama

Sistemin sağlıklı çalıştığından emin olmak için her yedekleme adımını bir log dosyasında tutmanız önerilir. Bu, olası bir veritabanı hatasında sorunun kaynağını (örneğin yanlış kullanıcı adı veya yetki kısıtlaması) hızlıca tespit etmenizi sağlar.

  • Log Dosyası: Yedekleme klasöründe backup.log adında bir dosya oluşturun.
  • Dosya Temizliği: 30 günden eski yedekleri silen bir döngü ekleyerek disk alanınızı koruyun.
  • E-posta Bildirimi: wp_mail() fonksiyonunu kullanarak yedekleme başarılı olduğunda veya hata oluştuğunda yöneticiye bildirim gönderin.

Bu yapı, profesyonel bir yedekleme sisteminin temelini oluşturur. Ancak, veritabanı yedeğinin tek başına yeterli olmadığını, wp-content klasöründeki dosyaların da düzenli olarak yedeklenmesi gerektiğini unutmayın.

Bu yazıya tepkinizi paylaşın:
Zeynep Arslan

Mutfak pratikleri ve organizasyonel hayat tüyoları üzerine uzman bir içerik üreticisiyim. Günlük rutinleri optimize eden yöntemleri, anlaşılır ve uygulanabilir rehberler haline getiriyorum.

Yorumlar (0)

Yorum Yaz