DBAtlas · Veritabanı operasyon atlası

Percona XtraBackup ile yedekleme, geri yükleme ve PITR

MySQLSeviye: OrtaSüre: 45–90 dk

Percona XtraBackup ile fiziksel yedekleme: uyumlu XtraBackup sürümünün kurulumu, auth_socket'li yedek kullanıcısı, sıkıştırmalı/şifreli full + incremental yedek betiği, systemd timer ya da cron ile zamanlama, binlog kopyalama ve geri yükleme provası. Senaryo kartlarıyla tam restore, incremental zincirden restore, belirli bir ana dönüş (PITR), tek tablo geri yükleme, yedekten replica kurma ve başka sunucuya geri yükleme yapılır. Büyük veritabanlarının günlük yedeği ve felaket kurtarma için bu rehber; taşıma, tek şema/tablo dökümü ya da sürümler arası geçiş için mantıksal yedek (mysqldump / MySQL Shell) rehberi kullanılır.

Yapı: 1 sunucu (tek sunucu, source, replica ya da InnoDB Cluster secondary'si); yedek alanı yerel disk ya da NFS

Senaryolar

  • Yedeklemeyi kur, zamanla ve geri yüklemeyi dene (tam akış) — XtraBackup kurulumu, yedek kullanıcısı, full + incremental yedek betiği, zamanlama ve bir geri yükleme provası (PITR dahil). İlk kez kuruyorsanız bunu seçin. Yedek sunucu açıkken alınır; kesinti yok, yalnız disk/CPU yükü artar.
  • Tam restore: son full yedekten geri dön — Veri dizini kayıp/bozuk ya da sunucu açılmıyor; yalnız zincirin full yedeğine dönmek yeterli. MySQL geri yükleme boyunca kapalıdır.
  • Full + incremental zinciriyle restore (en son incremental'a kadar) — Son incremental yedeğin anına (ya da seçtiğiniz bir incremental'a) dönmek istiyorsunuz; full'ün üzerine incremental'lar --apply-log-only ile sırayla uygulanır. MySQL geri yükleme boyunca kapalıdır.
  • Belirli bir ana dönüş (PITR): yanlış DELETE / DROP öncesi — Yanlışlıkla silinen ya da bozulan veri: son yedek geri yüklenir ve binlog'lar hatalı transaction'dan hemen öncesine kadar (zaman, konum ya da GTID ile) uygulanır. MySQL geri yükleme boyunca kapalıdır ve hata anından sonraki yazmalar da geri alınır; yalnız bir tablo etkilendiyse önce tek tablo senaryosunu değerlendirin.
  • Tek tabloyu geri yükle (--export + IMPORT TABLESPACE) — Yalnız bir tablonun yedekteki hâli gerekiyor; tüm sunucuyu geri yüklemeden tablo yedekten t_restore adıyla içeri alınır, veri oradan düzeltilir. Sunucu açık kalır.
  • Yedekten yeni replica kur — Yeni (ya da yeniden kurulacak) bir replica'yı ağdan clone yerine mevcut XtraBackup yedeğinden hazırlayıp source'a bağlamak istiyorsunuz (büyük veri, source yükü). Source etkilenmez; hedef sunucunun verisi değiştirilir.
  • Yedeği başka bir sunucuya geri yükle (taşıma, test, klon) — Üretim yedeğini test/geliştirme sunucusuna açmak, sunucu taşımak ya da yedeğin gerçekten açıldığını ayrı sunucuda doğrulamak istiyorsunuz. Kaynak sunucu etkilenmez.

Başlamadan önce

  • MySQL … çalışıyor (DBAtlas MySQL tek sunucu kurulumu rehberiyle kurulduysa yollar aynıdır); işletim sistemi root'u mysql komutuyla parolasız bağlanabiliyor (auth_socket ya da ~/.mylogin.cnf).
  • Yedek dizini … ayrı bir disk/NFS üzerinde ve en az (veri boyutu × zincir sayısı) kadar yer var… (zstd ile genellikle 3–6 kat küçülür)…. Geri yükleme için … altında veri boyutunun en az 2 katı boş yer gerekir (sıkıştırma açma + prepare).
  • Binary log açık ve GTID etkin (PITR ve incremental tutarlılığı için).
  • Sunucu repo.percona.com adresine HTTPS ile çıkabiliyor ya da kurum içi mirror tanımlı.
  • Şifreleme anahtarının bir kopyasını sunucu dışında güvenli bir yerde (kasa, parola yöneticisi) saklayacak bir yer hazır. Anahtar kaybolursa yedekler açılamaz.
  • Geri yükleme testi için tercihen ayrı bir test sunucusu var (aynı MySQL sürümü ve aynı my.cnf ile kurulmuş). Geri yükleme adımları üzerinde çalıştığı sunucunun veri dizinini değiştirir.
  • Bu sunucu sağlıklı bir replica: IO ve SQL thread'leri Yes, gecikme düşük. Binlog kopyalanacaksa (PITR) log_replica_updates açık olmalı (8.x'te varsayılan açık); aksi hâlde replica'nın binlog'u source'tan gelen transaction'ları içermez.
  • Bu sunucu InnoDB Cluster üyesi ve şu an SECONDARY / ONLINE. Yedek bu üyede zamanlanır; üye ileride primary olursa betik uyarı yazıp yedeği yine alır.
  • Geri yüklenecek yedek zinciri … altında… (… sunucusunda)… ve bütün: full ve kullanılacak incremental'lar, -lsn meta dizinleriyle birlikte…; şifreleme anahtarı …….
  • Bu sunucuda MySQL … ve XtraBackup … kurulu; MySQL alt sürümü yedeği alan sunucununkiyle aynı ya da daha yeni (yedeğin server_version değeri teşhis adımında görünür).
  • …Hedef sunucuda korunacak veri yok: veri dizini yedekle değiştirilir (eskisi .eski-<zaman> olarak kenara alınır).…Bakım penceresi ve uygulama kesintisi onaylandı: MySQL geri yükleme süresince kapalıdır; uygulama bu sunucuya bağlanmamalı.…
  • Tablo InnoDB ve innodb_file_per_table = ON (8.x varsayılanı) ile kendi .ibd dosyasında; tablonun yapısı (sütunlar, index'ler) yedek alındığından beri değişmedi. Sunucu açık kalır.

Rehberin aşamaları

  • XtraBackup kurulumu — Percona repo'sunu ekle · XtraBackup'ı kur
  • Yedek kullanıcısı ve anahtar — auth_socket eklentisini kontrol et · Yedek kullanıcısını oluştur · Bağlantıyı test et · Şifreleme anahtarını oluştur
  • Yedek betiği ve zamanlama — Yedek dizinini oluştur · Yedek betiğini yaz · Betiği çalıştırılabilir yap · İlk full yedeği al · Incremental yedeği dene · systemd servisini yaz …
  • Geri yükleme (restore) — Zinciri çalışma dizinine kopyala · Şifrelemeyi çöz / sıkıştırmayı aç · Full yedeği hazırla (prepare, apply-log-only) · Incremental'ları sırayla uygula · Son prepare · MySQL'i durdur, mevcut veriyi kenara al …
  • Belirli bir zamana dönüş (PITR) — Hedef anı belirle · Binlog'ları hedef ana kadar uygula · Sonucu doğrula ve yeni yedek al
  • Temizlik — Kenara alınan veriyi ve çalışma dizinini sil
  • 1. Teşhis: hangi yedek, hangi yöntem? — Sunucunun durumunu ve sürümleri kontrol et · Yedek zincirlerini ve içeriklerini listele
  • 2. Güvenlik ağı — Mevcut durumu ve yapılandırmayı kaydet
  • 3. Uygulama: yedeği hazırla — Zinciri çalışma dizinine kopyala · Zinciri çalışma dizinine kopyala · Şifrelemeyi çöz / sıkıştırmayı aç · Full yedeği hazırla (prepare, apply-log-only) · Incremental'ları sırayla uygula · Son prepare
  • 3. Uygulama: veriyi geri yükle — MySQL'i durdur, mevcut veriyi kenara al · Yedeği veri dizinine kopyala (copy-back) · MySQL'i başlat ve doğrula · Yedekten gelen replikasyon tanımını kontrol et
  • 3. Uygulama: binlog'ları hedefe kadar uygula (PITR) — Hatalı transaction'ı ve hedef noktayı doğrula · Binlog'ları hedefe kadar uygula
  • 4. Doğrulama — Hatalı transaction'ın geri alındığını doğrula · Veriyi doğrula
  • 5. Sonrası — Yeni full yedek al · Kenara alınan veriyi ve çalışma dizinini sil · Kök neden ve topoloji
  • 1. Teşhis: tablo ve yedek uygun mu? — Tablonun mevcut durumunu ve yapısını göster · Yedek zincirlerini ve içeriklerini listele
  • 2. Güvenlik ağı — Tablonun mevcut hâlini yedekle
  • 3. Uygulama: yedeği --export ile hazırla — Zinciri çalışma dizinine kopyala · Şifrelemeyi çöz / sıkıştırmayı aç · Full yedeği hazırla (prepare, apply-log-only) · Incremental'ları sırayla uygula · Son prepare (--export)
  • 3. Uygulama: tabloyu ara tabloya içeri al — Ara tabloyu oluştur ve tablespace'ini ayır · Yedekteki dosyaları kopyala ve içeri al (IMPORT TABLESPACE)
  • 4. Doğrulama — Ara tabloyu kontrol et ve asıl tabloyla karşılaştır
  • 5. Sonrası: veriyi aktar ve temizle — Gerekli satırları asıl tabloya aktar · Ara tabloyu ve çalışma dizinini sil
  • 1. Teşhis: hedef sunucu ve yedek uygun mu? — Hedef sunucunun sürümünü, kimliğini ve diskini kontrol et · Yedek zincirlerini ve içeriklerini listele (…)
  • 2. Güvenlik ağı — Mevcut durumu ve yapılandırmayı kaydet
  • 3. Uygulama: yedeği çek ve hazırla — Zinciri yedek sunucusundan çek · Zinciri çalışma dizinine kopyala · Şifrelemeyi çöz / sıkıştırmayı aç · Full yedeği hazırla (prepare, apply-log-only) · Incremental'ları sırayla uygula · Son prepare
  • 3. Uygulama: veriyi geri yükle — MySQL'i durdur, mevcut veriyi kenara al · Yedeği veri dizinine kopyala (copy-back) · MySQL'i başlat ve doğrula · Yedekten gelen replikasyon tanımını kontrol et
  • 3. Uygulama: replikasyonu yedeğin noktasından başlat — Başlangıç noktasını belirle · Replikasyonu tanımla ve başlat
  • 4. Doğrulama — Veriyi doğrula
  • 5. Sonrası — Kenara alınan veriyi ve çalışma dizinini sil · Sunucunun yeni rolünü işletime al
Ortamına göre adım adım planı aç →