Cron ile Otomatik Veritabanı Yedeği (mysqldump)
Kısa yanıt: Ana dizininizde şifreyi içeren ve yalnızca sizin okuyabildiğiniz bir .my.cnf dosyası oluşturun, ardından cPanel › Cron İşleri’ne her gece çalışacak mysqldump --single-transaction veritabani | gzip > ~/db-yedek/veritabani-$(date +\%F).sql.gz komutunu ekleyin (cron satırında % işareti \% olarak yazılır). Aynı cron’a 14 günden eski dosyaları silen bir find komutu ekleyerek disk dolmasını önleyin.
Bu rehber kimin için: Kendi yedeğini otomatikleştirmek isteyenler · Gereken süre: 20 dakika · Seviye: Orta
Sık güncellenen bir e-ticaret sitesi veya üye sitesi için veritabanı, sitenin en değerli kısmıdır. Otomatik sunucu yedeklerine ek olarak kendi kontrolünüzdeki gece yedekleri; istediğiniz sıklıkta, istediğiniz kadar geçmişe dönük kopya tutmanızı sağlar. Şifreyi komut satırına yazmak yerine .my.cnf dosyasında tutmak, şifrenin işlem listelerinde görünmesini engeller.
Kurulum adımları
- Klasör oluşturun: Ana dizinde public_html dışında db-yedek adlı bir klasör açın; web’den erişilememelidir.
- Şifre dosyası: Ana dizinde .my.cnf dosyası oluşturun; [client] satırının altına user=veritabani_kullanici ve password="sifre" yazın.
- İzin verin: Dosyanın iznini 600 yapın (dosya izinleri).
- Komutu test edin: Cron işini ilk olarak birkaç dakika sonrasına denk gelecek bir zamanla ekleyin; çalıştıktan sonra Dosya Yöneticisi’nde ~/db-yedek klasöründe dosyanın oluştuğunu görün ve zamanı kalıcı ayara çevirin.
- Cron ekleyin: cPanel › Cron İşleri ekranında her gün 03:00 için komutu ekleyin; cron satırında her % işaretinin önüne ters eğik çizgi koyun (\%), aksi hâlde cron komutu o noktada keser.
- Eskileri silin: İkinci bir satırla find ~/db-yedek -name "*.sql.gz" -mtime +14 -delete komutunu planlayın.
- Bildirim: Cron e-posta adresini ayarlayın; hata olursa bildirim alırsınız.
- Geri yükleme testi: Ayda bir yedeği test veritabanına aktararak dosyanın sağlam olduğunu doğrulayın.
Zamanlamayı hesaplama
Cron ifadesi 0 3 * * * her gün saat 03:00’te çalışır. Farklı sıklıklar için cron ifadesi oluşturucu aracımızı kullanabilirsiniz. Veritabanı büyükse yedeği trafiğin en düşük olduğu saate planlayın.
Hâlâ çözülmediyse
Yedekleri aynı sunucuda tutmak, sunucu kaynaklı sorunlara karşı koruma sağlamaz; dosyaları düzenli olarak harici bir konuma kopyalayın (uzak FTP/SCP). Geri yükleme adımları için veritabanını belirli bir tarihe geri yükleme rehberine bakın. Cron İşleri tüm web hosting paketlerimizde cPanel’den kullanılabilir; SSH erişimi ise yalnızca VPS ve VDS sunucularda vardır.
Sık sorulan sorular
--single-transaction ne işe yarar?
InnoDB tablolarında siteyi kilitlemeden tutarlı bir anlık görüntü alır.
Yedek dosyaları kotamdan düşer mi?
Evet; bu yüzden eski yedekleri otomatik silin.
“Access denied; you need (at least one of) the PROCESS privilege(s)” hatası alıyorum.
MySQL 8.0.21 ve sonrasında mysqldump, tablespace bilgisini dökmek için PROCESS yetkisi ister; paylaşımlı hostingte veritabanı kullanıcılarının bu yetkisi genellikle yoktur. Komuta --no-tablespaces seçeneğini ekleyin: mysqldump --single-transaction --no-tablespaces veritabani. Bu seçenek yalnız tablespace tanımlarını dökümden çıkarır, tablolarınızı ve verinizi etkilemez.
İlgili rehberler
- MySQL Veritabanı Yedeği Alma (phpMyAdmin, cPanel, SSH)
- cPanel’de Cron Job (Zamanlanmış Görev) Oluşturma
- Veritabanını Belirli Bir Tarihe Geri Yükleme
Bu rehber işinize yaradı mı?
Teşekkürler. Çözüm bulamadıysanız destek talebi açın veya [email protected] adresine yazın.