MySQL mantıksal yedek ve geri yükleme (mysqldump, MySQL Shell)
MySQLSeviye: OrtaSüre: 20–90 dk (veri boyutuna göre)mysqldump ya da MySQL Shell (util.dumpInstance / dumpSchemas / dumpTables + util.loadDump) ile mantıksal yedek ve geri yükleme: tablo, şema ya da tüm instance; yalnız yapı ya da yalnız veri; başka sunucuya taşıma; tam dump içinden tek tablo çıkarma; systemd/cron ile zamanlanmış, login-path ile parolasız, doğrulanan, saklama süreli yedek. Her yolun sonunda satır sayısı karşılaştırması vardır. Taşıma, tek nesne kurtarma ve sürümler arası geçiş için bu rehber; büyük veritabanının günlük yedeği, hızlı restore ve belirli bir ana dönüş (PITR) için Percona XtraBackup rehberi kullanılır.
Yapı: 1 sunucu (taşımada ve instance geri yüklemesinde + hedef sunucu)
Senaryolar
- Tablo(lar) export / import — Bir ya da birkaç tablonun yedeğini almak, başka şemaya/sunucuya kopyalamak ya da geri yüklemek. Kaynak açık kalır; InnoDB tablolarında lock alınmaz.
- Bir şemayı (veritabanını) yedekle / geri yükle — Bir veritabanının (şemanın) tamamını yedeklemek ya da başka bir şemaya/sunucuya yüklemek. Kaynak açık kalır; hedefte aynı adlı tablolar silinip yeniden oluşturulur.
- Tüm instance (kullanıcılar + tüm şemalar) — Yedek bu sunucuda alınır, geri yükleme boş bir sunucuda yapılır: kullanıcılar, yetkiler ve tüm şemalar. Sunucuyu yeniden kurmak ya da sürüm/platform değiştirmek için.
- Yalnız yapı (DDL) — Tablo, view, trigger, procedure ve event tanımları; veri yok. Şema karşılaştırma, boş ortam kurma ya da yapıyı sürüm kontrolüne almak için.
- Yalnız veri — Yapı hedefte hazırken yalnız satırlar aktarılır (ör. test verisini yenilemek). Hedefteki trigger'lar yükleme sırasında çalışabilir; rehber bunu kontrol eder.
- Başka sunucuya taşıma — Hedef sunucuda çalışılır; kaynağa ağ üzerinden, login-path ile bağlanılır. Kesme anında uygulama yazmayı durdurur; kesinti dump + yükleme süresi kadardır. Sunucu, işletim sistemi ya da sürüm değişimi için.
- Tam dump içinden tek tablo çıkarma — Elinizde tam bir dump var ve yalnız bir tablo gerekiyor (silinen satırlar, DROP edilen tablo). Asıl şemaya dokunmadan ayrı şemaya çıkarılır ya da silinmiş tablo geri konur.
- Zamanlanmış yedek (systemd timer / cron) — Her gün belirli saatte otomatik mantıksal yedek: ayrı yedek kullanıcısı, login-path, betik, systemd timer ya da cron, saklama süresi ve hata bildirimi. Kaynak açık kalır.
Başlamadan önce
- MySQL … çalışıyor; işletim sistemi root'u mysql komutuyla parolasız bağlanabiliyor (auth_socket ya da ~/.mylogin.cnf). DBAtlas MySQL tek sunucu kurulumu rehberiyle kurulduysa yollar aynıdır.
- Şemaların boyutu biliniyor ve yedek dizini … için yeterli boş alan var (sıkıştırılmış mantıksal yedek genellikle veri boyutunun %10–30'u; index'ler dump'a yalnız tanım olarak girer).
- Tüm tablolar InnoDB. --single-transaction (ve MySQL Shell'in tutarlı dump'ı) yalnız InnoDB tablolarında lock almadan ve tutarlıdır; MyISAM tablosu varsa dump süresince o tablolara yazma tutarsızlık yaratır.
- MySQL Shell kurulacak sunucu MySQL repo'suna (repo.mysql.com) erişebiliyor ya da kurum içi mirror tanımlı.
- Hedef sunucu … üzerinde aynı ya da daha yeni MySQL sürümü (DBAtlas kurulum rehberiyle) kurulu, çalışıyor ve kullanıcı şeması içermiyor. Geri dönüş için 8.4'ten 8.0'a gibi eski sürüme yükleme desteklenmez.
- Hedef sunucu kaynağın … portuna erişebiliyor.
- Sunucudan e-posta gönderilebiliyor: yerel MTA (postfix) kurum SMTP relay'ine yönlendirilmiş.
- Büyük bir geri yükleme ya da taşıma için bakım penceresi planlandı; hedefin üzerine yazılacaksa hedefin yedeği alındı.
- Bu sunucu sağlıklı bir replica: IO ve SQL thread'leri Yes, gecikme düşük. Dump'taki binlog konumu (--source-data=2) bu replica'nın kendi binlog'unu gösterir; PITR'de kullanılacaksa log_replica_updates açık olmalı (8.x'te varsayılan).
- Bu sunucu InnoDB Cluster üyesi ve şu an SECONDARY / ONLINE.
Rehberin aşamaları
- Hazırlık — Yedek dizinini oluştur · Tablo motorlarını ve uzun transaction'ları kontrol et · MySQL Shell'i kur
- Geri yükleme (import) — Hedef şemayı oluştur · Hedefte tablo yapısını oluştur · Hedefteki trigger'ları kontrol et · Yükle (mysql) · Yükle (mysql, aynı şemanın üzerine) · Yükle (util.loadDump) …
- Instance yedeği — Kullanıcıları ve yetkileri dışa aktar · Tüm şemaları yedekle (mysqldump) · Instance'ı yedekle (util.dumpInstance) · Yedeği geri yükleme sunucusuna kopyala · Yedeği yükle (mysql) · Kullanıcıları yükle …
- Kaynak sunucuda taşıma hesabı — Taşıma kullanıcısını oluştur · Firewall'da portu hedefe aç · Uygulamayı durdur (kesme anı)
- Hedef sunucuda aktarım — Kaynak bağlantısını login-path olarak kaydet · Kullanıcıları taşı · Şemaları aktar (mysqldump | mysql) · Kullanıcıları hedefe yükle · Kaynağı dump'la (util.dumpInstance / dumpSchemas) · Hedefe yükle (util.loadDump) …
- Dump içinden tek tablo çıkarma — Tablonun dump'ta olduğunu kontrol et · Tabloyu dump'tan ayıkla · Hedef şemayı oluştur · Tabloyu yükle · Tabloyu asıl şemaya geri yükle · Satır sayısını karşılaştır …
- Yedek kullanıcısı ve login-path — İşletim sistemi yedek kullanıcısını oluştur · MySQL yedek hesabını oluştur · Login-path'i kaydet (mysql_config_editor)
- Yedek betiği — Bildirim aracını kur · Yedek betiğini yaz · Betiği çalıştırılabilir yap · İlk yedeği elle al
- Zamanlama (systemd timer) — systemd servisini yaz · systemd timer'ı yaz · Timer'ı etkinleştir ve servisi elle tetikle · Zamanlanmış işin çalıştığını kontrol et (ertesi gün)
- Zamanlama (cron) — cron servisini hazırla · cron görevini yaz · cron dosyasının iznini ayarla ve cron ortamında dene · Zamanlanmış işin çalıştığını kontrol et (ertesi gün)
- Doğrulama ve izleme — Son yedeği test şemasına geri yükle · Son yedeğin yaşını izle
- Sonraki adım: fiziksel yedek — Mantıksal yedeğin sınırlarını kapatın