$ dbaguide.com / cheat-sheets / mysql-backup-recovery

MySQL Yedek & Kurtarma Referansı

mysqldump, MySQL Shell, XtraBackup, binlog arşivi, PITR ve felaket senaryoları için production rehberi

MySQL 8.0 / 8.4 LTS
Güncelleme: Ekim 2026 · Production-grade
RPO
Ne kadar veri? · kabul edilebilir kayıp
RTO
Ne kadar sürede? · geri dönüş süresi
Kural
3-2-1-1-0 · 3 kopya, 2 ortam, 1 off-site
+1 / +0
immutable · 0 hatalı restore testi
Altın Kural
Test edilmemiş yedek = yedek değildir
01

Temel Kavramlar & Strateji

KavramAçıklama
MantıksalSQL / nesne seviyesinde döküm. Sürüm & platform bağımsız, seçici restore kolay; büyük veride yavaş restore (indeksler yeniden kurulur).
FizikselVeri dosyalarının blok kopyası. Hızlı restore, TB ölçeğe uygun; aynı ana sürüm + platform gerekir.
SnapshotLVM / ZFS / EBS / SAN anlık görüntüsü. Crash-consistent; WAL/redo aynı volume'deyse ya da backup modu kullanılırsa güvenli.
Full / Incr / DiffTamamı / son yedekten beri / son full'den beri değişenler. Incremental zinciri uzadıkça restore süresi ve risk artar.
Hot / Warm / ColdOkuma+yazma açık / sadece okuma / sunucu kapalı. Production'da hedef: hot.
Sürekli ArşivFull yedek + kesintisiz binlog akışı → PITR: herhangi bir ana geri dönüş. RPO'yu saniyelere indirir.
Yöntem Seçimi
SenaryoÖneri
< 100 GB, sürüm geçişi, tek şemautil.dumpSchemas / mydumper
TB ölçek, kısa RTOXtraBackup / MEB + binlog
Saniyelik RPOSemi-sync replika + binlog stream
"Yanlışlıkla sildim" korumasıPITR + SOURCE_DELAY
Araç Haritası
Mantıksalmysqldump · MySQL Shell util.* · mydumper
FizikselXtraBackup · MEB (mysqlbackup) · CLONE
Binlogmysqlbinlog · SHOW BINARY LOGS
Yalnızca InnoDBHot fiziksel yedek ve tutarlı dump yalnızca InnoDB'de garanti
Replikasyon yedek değildir: DROP TABLE veya hatalı UPDATE milisaniyeler içinde tüm replikalara da gider. HA ≠ DR.
02

Mantıksal Yedek

AraçParalelNot
mysqldump✗Her yerde var; tek thread, küçük/orta veri
mysqlpump✓8.0.34'te deprecated, 8.4'te kaldırıldı — kullanma
Shell util.*✓dumpInstance / dumpSchemas / dumpTables + loadDump; zstd, chunking, resume
mydumper✓Açık kaynak, myloader ile paralel restore
mysqldump — Production Bayrakları
$ mysqldump --single-transaction --source-data=2 \ --routines --events --triggers --hex-blob \ --set-gtid-purged=ON --all-databases \ | zstd -T0 > /bk/full_$(date +%F).sql.zst # --source-data=2 → binlog konumu yorum olarak yazılır # (8.0.26 öncesi: --master-data=2)
MySQL Shell Dump & Load (JS)
util.dumpInstance('/bk/inst_2026-10-13', {threads: 8, compression: 'zstd', consistent: true}) util.dumpSchemas(['shop'], '/bk/shop', {threads: 8}) // hedefte local_infile=ON gerekir util.loadDump('/bk/inst_2026-10-13', {threads: 8, deferTableIndexes: 'all'})
Restore
$ zstd -dc full.sql.zst | mysql -u root -p $ myloader -d /bk/mydumper -t 8 --overwrite-tables
Dikkat: --single-transaction yalnızca InnoDB için tutarlıdır; MyISAM tabloları tutarsız kalır. Dump sırasında DDL (ALTER/TRUNCATE) çalıştırma — tutarlılık bozulur.
Hız: Shell util.loadDump ve myloader, düz SQL restore'a göre çok daha hızlıdır: paralel yükler ve indeksleri en sona bırakır.
03

Fiziksel Yedek

AraçLisansNot
XtraBackupGPLHot, full + incremental, stream (xbstream), sıkıştırma, şifreleme
MEBEnterprisemysqlbackup: image backup, incremental, TDE desteği
CLONEDahili8.0.17+: CLONE LOCAL DATA DIRECTORY — yerel fiziksel kopya
XtraBackup — Full + Incremental
$ xtrabackup --backup --target-dir=/bk/full $ xtrabackup --backup --target-dir=/bk/inc1 \ --incremental-basedir=/bk/full # PREPARE: son incremental hariç --apply-log-only $ xtrabackup --prepare --apply-log-only --target-dir=/bk/full $ xtrabackup --prepare --target-dir=/bk/full \ --incremental-dir=/bk/inc1 # RESTORE: datadir boş, sunucu kapalı $ xtrabackup --copy-back --target-dir=/bk/full $ chown -R mysql:mysql /var/lib/mysql
Stream → Uzak Sunucu / Obje Depolama
$ xtrabackup --backup --stream=xbstream --compress \ --parallel=4 | ssh bk01 "xbstream -x -C /bk/db1"
CLONE ile Yerel Kopya & MEB
INSTALL PLUGIN clone SONAME 'mysql_clone.so'; CLONE LOCAL DATA DIRECTORY = '/bk/clone_20261013'; $ mysqlbackup --backup-dir=/bk/meb \ --backup-image=full.mbi backup-to-image
Konum Bilgisixtrabackup_binlog_info → binlog dosyası, pozisyon ve GTID seti — PITR'ın başlangıç noktası.
Dikkat: XtraBackup sürümü sunucuyla eşleşmeli (8.0 ↔ 8.0, 8.4 ↔ 8.4). Prepare edilmemiş yedek restore edilemez — prepare adımını yedek alındıktan hemen sonra test et.
MySQL Yedek & Kurtarma Referansı · Binlog PITR, Doğrulama & Felaket Senaryoları
04

Binlog & Point-in-Time Recovery

Kritik
ParametreÖnerilen
log_binON (8.0+ varsayılan)
binlog_formatROW
sync_binlog1 — her commit'te diske
innodb_flush_log_at_trx_commit1 — tam dayanıklılık
binlog_expire_logs_seconds≥ en eski yedeğin yaşı
gtid_modeON + enforce_gtid_consistency
Canlı Binlog Yedeği (ayrı sunucuda)
$ mysqlbinlog --read-from-remote-server --raw \ --stop-never --host=db1 --user=bkp -p \ --result-file=/binlogs/ binlog.000001
Adım Adım PITR
1Full yedeği geri yükle (dump / XtraBackup / CLONE).
2Başlangıç konumunu bul: dump başlığı veya xtrabackup_binlog_info.
3Hatalı olayın konumunu bul (aşağıda).
4Binlog'ları tek komutla olaydan hemen öncesine kadar oynat.
Olayı Bul & Oynat
$ mysqlbinlog -v --base64-output=DECODE-ROWS \ --start-datetime="2026-10-13 09:50:00" binlog.000043 \ | grep -n -B5 -i "DROP TABLE" # → end_log_pos $ mysqlbinlog --start-position=157 --stop-position=48211 \ binlog.000042 binlog.000043 | mysql -u root -p # GTID ile: hatalı işlemi atla, gerisini oynat $ mysqlbinlog --exclude-gtids='3E11FA47-…:1234' \ binlog.000042 binlog.000043 | mysql -u root -p
Tuzak: Binlog dosyalarını ayrı ayrı mysqlbinlog | mysql ile oynatma — temporary table'lar ve çok dosyaya yayılan transaction'lar kırılır. Hepsini tek çağrıda ver.
05

Doğrulama, Test & İzleme

KontrolAraç / Yöntem
Yedek Bütünlüğüxtrabackup --prepare → "completed OK!", MEB validate
Veri BütünlüğüCHECK TABLE, mysqlcheck, CHECKSUM TABLE
Replika Tutarlılığıpt-table-checksum → fark varsa pt-table-sync
Binlog Sağlığıbinlog stream süreci, SHOW BINARY LOGS, gtid_purged
Restore TestiOtomatik, en az haftalık; ayrı sunucuda geri yükle → sorgu ile doğrula → RTO'yu ölç ve kaydet.
Binlog Sağlık Kontrolü
SHOW BINARY LOGS; SHOW BINARY LOG STATUS; -- 8.4 (8.0: SHOW MASTER STATUS) SELECT @@gtid_executed, @@gtid_purged, @@binlog_expire_logs_seconds;
Bütünlük Kontrolleri
$ mysqlcheck --all-databases --check -u root -p $ mysqlbackup --backup-image=/bk/full.mbi validate $ pt-table-checksum --replicate=percona.checksums h=db1 CHECKSUM TABLE shop.orders;
Alarm Kur
Son başarılı yedeğin yaşı > 26 saatKritik
Binlog stream süreci durdu / gecikme > RPOKritik
Binlog, sonraki yedekten önce purge edildiKritik
Yedek boyutunda ani ±%30 değişimÖnemli
Yedek diski doluluğu > %80Önemli
MySQL 8.4: SHOW MASTER STATUS kaldırıldı → SHOW BINARY LOG STATUS kullan (8.2+). İzleme script'lerini sürüm yükseltmeden önce güncelle.
06

Felaket Senaryoları & Kontrol Listesi

SenaryoÇözüm
Kazara DROP / DELETEBinlog PITR (--stop-position / --exclude-gtids) veya gecikmeli replikadan tabloyu al
Disk / sunucu kaybıReplikaya failover → yeni replika: CLONE INSTANCE FROM
Fidye yazılımıImmutable (object lock) off-site kopya + xtrabackup --encrypt + ayrı kimlik bilgileri
Bozuk sayfaCHECK TABLE ile tespit → yedekten geri al; son çare innodb_force_recovery
Bölge (region) kaybıInnoDB ClusterSet / bölgeler arası yedek kopyası + DR runbook
Gecikmeli Replika (1 saat)
STOP REPLICA SQL_THREAD; CHANGE REPLICATION SOURCE TO SOURCE_DELAY = 3600; START REPLICA SQL_THREAD; -- olay anında: hatalı GTID'in hemen öncesine kadar uygula START REPLICA SQL_THREAD UNTIL SQL_BEFORE_GTIDS = '3E11FA47-…:1234';
RPO / RTO yazılı ve iş birimiyle onaylıSLA → yöntem seçimiKritik
Binlog arşivi açık ve izleniyorsync_binlog=1 · mysqlbinlog --stop-neverKritik
Otomatik restore testihaftalık · RTO ölçümüKritik
Off-site + şifreli kopyaxtrabackup --encrypt · S3 object lockKritik
Retention politikası uygulanıyorbinlog_expire_logs_seconds ≥ yedek yaşıÖnemli
Kullanıcılar & yetkiler yedekteutil.dumpInstance · SHOW CREATE USER / SHOW GRANTSÖnemli
Config dosyaları versiyonlumy.cnf · mysqld-auto.cnf (SET PERSIST)Önerilen
DR runbook güncel ve tatbik edilmişyılda 2 tatbikatÖnerilen
Kritik hemen Önemli bu çeyrek Önerilen planla