Yedek Tanılaması
Yedek sisteminin ayarını tutan ve sunucunun yedek alabilirliğini ölçen altı uç.
Genel Bakış
Bu altı uç iki soruya bakar. İkisi ayarı tutar: sistem açık mı, neler yedeğin dışında kalsın. Dördü ise ölçer: sunucu yedek alabilir mi, disk yeter mi, hangi dizin ve tablo ne kadar yer kaplıyor.
Ölçen dördü yalnızca okur, hiçbir şeyi değiştirmez. Panelde hariç tutma ekranını besleyen de bunlardır: operatör ağacı gezer, tabloları boyutuna göre görür ve kararını verir.
Tanılama, yedek almadan önce sorulacak asıl sorudur. Yedek gecesinde beliren bir eksiği bugün gösterir; kritik bir eksik yedeği imkânsız kılar, uyarı ise zayıflatır.
Referans
Yedek Ayarlarını Getirme
Yedek sisteminin genel anahtarını ve hariç tutulanları döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/backup/settings' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/settings', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/settings');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Genel anahtar KAPALIYKEN zamanlamalar durur ve elle yedek alma reddedilir.
$live = Api::Settings()->GetBackupSettings()['data']['status'] === 1;Yedek Ayarlarını Yazma
Genel anahtarı açar ve hariç tutulan yol ile tabloları yazar.
curl -X PUT 'https://panel.ornek.com/api/v1/admin/settings/backup/settings' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"status":1,"excluded_tables":"api_logs,mail_logs"}'const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/settings', {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
status: 1,
excluded_tables: 'api_logs,mail_logs',
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/settings');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'status' => 1,
'excluded_tables' => 'api_logs,mail_logs',
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Liste EKLENMEZ, degistirilir: eskisini okuyup uzerine yazin yoksa oncekiler duser.
$cur = Api::Settings()->GetBackupSettings()['data']['excluded_tables'];
Api::Settings()->UpdateBackupSettings([
'excluded_tables' => $cur . ',mail_logs',
]);Tanılamayı Okuma
Sunucunun yedek alacak donanıma sahip olup olmadığını söyler.
phar arşivleme, zlib sıkıştırma, spl dizin gezinme.disk-monitor yer ölçümü, exec alt süreç, streaming-pipe akış borusu.mysqldump-cli dış döküm aracı.curl 'https://panel.ornek.com/api/v1/admin/settings/backup/diagnostics' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/diagnostics', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/diagnostics');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Kritik liste doluysa yedek HIC alinamaz; uyari listesi yalnizca zayiflatir.
$d = Api::Settings()->GetBackupDiagnostics()['data'];
if ($d['critical']) throw new Exception('Backups cannot run on this server.');Disk Bilgisini Okuma
Kurulumun bulunduğu diskte ne kadar yer kaldığını döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/backup/disk' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/disk', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();
if (data.total === undefined) console.warn('disk measurement unavailable');$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/disk');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Sunucu olcume izin vermiyorsa alanlar HIC gelmez; okumadan once varligini sinayin.
$disk = Api::Settings()->GetBackupDisk()['data'];
$free = $disk['free'] ?? null;Dizin Ağacını Gezme
Kurulum kökü altındaki dosya ve dizinleri döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/backup/directory-listing?path=templates' \
-H "Authorization: Bearer $API_KEY"const url = new URL('https://panel.ornek.com/api/v1/admin/settings/backup/directory-listing');
url.searchParams.set('path', 'templates');
const res = await fetch(url, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/directory-listing?' . http_build_query(['path' => 'templates']));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Agac kokun DISINA cikamaz; yukari tirmanan yol 422 ile geri cevrilir.
$tree = Api::Settings()->GetBackupDirectoryListing([], ['path' => 'templates'])['data'];Tabloları Ölçme
Veritabanı tablolarını satır sayısı ve boyutuyla döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/backup/tables' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/backup/tables', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/backup/tables');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// En sisman tablolari haric tutma ekranina beslemek icin: boyut arsiv boyutu DEGILDIR.
$tables = Api::Settings()->GetBackupTables()['data'];
usort($tables, fn ($a, $b) => $b['size'] <=> $a['size']);Tuzaklar
Yedek sistemi kapalıyken zamanlamalar çalışmaz ve elle yedek alma çağrısı reddedilir. Zamanlamalar listede durur, hedefler yerinde kalır, hiçbiri hata vermez. Bir kurulumda hiç yedek oluşmuyorsa önce bu alana bakın; zamanlamayı aramak zaman kaybı olur.
Yol ve tablo listeleri birer metin ve gönderdiğiniz değer eskisinin yerine geçer. Tek bir tablo eklemek isterken yalnız onu göndermek, önceki tüm satırları düşürür. Önce mevcut değeri okuyup üzerine ekleyin.
Sunucu yer ölçümüne izin vermiyorsa bu uç boş bir nesne döndürür; hata da vermez. Alanları okumadan önce varlığını sınayın, yoksa boş alanı sıfır sanıp diskin dolduğunu gösteren bir uyarı basarsınız. Aynı eksik tanılamada uyarı listesinde de görünür.
Ağaçtan öntanımlı olarak hariç tutulanlar elenir, yani listede hiç görünmezler. Yedek klasörünün kendisi de bunlardandır ve operatör onu yeniden adlandırsa bile elenmeye devam eder. Bu bilinçli bir seçim: yedeklerin kendisi yedeğe girseydi her koşu bir öncekini de taşırdı.
Tablo satır sayısı motorun tahminidir; gerçek sayıdan yüzde onlarca sapabilir ve fatura ya da rapor hesabına girmemelidir. Boyut da veriyle dizinin toplamıdır: sıkıştırılmış bir dökümün boyutu bundan çok daha küçük kalır. İkisi de neyin hariç tutulacağına karar vermeye yeter, kesin ölçüme değil.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.