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
mysqldumpkomutuna 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ı (
.htaccessveyanginx.confile).
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.


Yorumlar (0)
Yorum Yaz