Percona XtraBackup ile MySQL/MariaDB Online Yedekleme: Üretim Ortamları İçin Kapsamlı Rehber
MySQL ve MariaDB veritabanlarının kritik önemi, kesintisiz çalışabilirlik ve veri bütünlüğü gereksinimi, etkili bir yedekleme stratejisini zorunlu kılar. Özellikle yüksek yük altındaki üretim ortamlarında, veritabanını durdurmadan tutarlı yedekler alabilmek esastır. Percona XtraBackup, bu ihtiyacı karşılamak üzere tasarlanmış, InnoDB depolama motoru tabanlı veritabanları için fiziksel bir hot backup aracıdır.
XtraBackup, InnoDB'nin işlem tabanlı yapısından ve crash recovery yeteneklerinden faydalanarak, veritabanı aktif olarak çalışırken dahi veri tutarlılığını garanti eden yedekler oluşturur. Bu, OLTP (Online Transaction Processing) sistemleri için kritik bir yetenektir; zira bir yedekleme işlemi sırasında uygulamaların hizmet kesintisi yaşamasını engeller.
Percona XtraBackup'ın Çalışma Prensibi ve Teknik Derinlik
XtraBackup'ın temel mekanizması, InnoDB veri dosyalarının fiziksel kopyalarını alırken aynı zamanda veritabanının redo log'larını (işlem günlükleri) sürekli olarak izlemesidir. Yedekleme işlemi sırasında veri dosyaları kopyalanırken, devam eden işlemler nedeniyle bu dosyalarda tutarsızlıklar oluşabilir. XtraBackup, bu tutarsızlıkları gidermek için kopyalama işleminin başlangıcından (veya bir önceki LSN'den, artımlı yedeklemelerde) sonuna kadar olan redo log kayıtlarını da yedekler.
Yedekleme tamamlandığında, `xtrabackup_checkpoints` dosyası oluşturulur. Bu dosya, yedeklemenin türü (full, incremental), son LSN (Log Sequence Number) gibi kritik bilgileri içerir. Yedekten geri yükleme yapılmadan önce uygulanan 'prepare' aşamasında, kopyalanan veri dosyalarına, yedekleme sırasında toplanan redo log'lar uygulanır. Bu işlem, veritabanının 'crash recovery' sürecini simüle ederek veri dosyalarını tutarlı bir duruma getirir. Böylece, yedekleme bitiş anındaki son tutarlı LSN'e kadar olan tüm işlemler uygulanmış olur.
Kurulum
Percona XtraBackup'ı Debian/Ubuntu tabanlı sistemlere kurmak için Percona'nın APT deposunu eklemek en doğru yöntemdir:
sudo apt update
sudo apt install lsb-release wget -y
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo dpkg -i percona-release_latest.generic_all.deb
sudo percona-release setup ps80 # MySQL 8.0 için, MySQL 5.7 için ps57
sudo apt update
sudo apt install percona-xtrabackup-80 -y # Veya percona-xtrabackup-24Bu adımlar, sisteminize Percona XtraBackup'ın en güncel sürümünü yükleyecektir.
Tam Yedekleme (Full Backup)
Tam yedekleme, veritabanının tüm veri dosyalarının ve redo log'larının bir kopyasını almaktır. Bu işlem, herhangi bir noktadan geri yüklemenin temelini oluşturur.
xtrabackup --backup --target-dir=/var/backups/mysql/full_$(date +%F_%H-%M-%S) --user=backup_user --password=YedekSifre --host=localhost --datadir=/var/lib/mysqlAçıklama:
- `--backup`: Yedekleme işlemini başlatır.
- `--target-dir`: Yedekleme dosyalarının kaydedileceği dizini belirtir. Her yedek için dinamik bir zaman damgalı dizin oluşturulması iyi bir pratiktir.
- `--user` ve `--password`: Yedekleme işlemi için gerekli yetkilere sahip bir MySQL kullanıcısı. Bu kullanıcının `RELOAD`, `PROCESS`, `REPLICATION CLIENT`, `LOCK TABLES` (InnoDB dışı tablolar için) gibi yetkilere sahip olması gerekir.
- `--host` ve `--datadir`: MySQL sunucusunun adresini ve veri dizinini belirtir. Genellikle `localhost` ve MySQL'in varsayılan veri dizini kullanılır.
Yedeklemeyi Hazırlama (Prepare)
Fiziksel yedekler doğrudan kullanılamaz. Tutarlı bir duruma getirilmek üzere hazırlanmaları gerekir.
xtrabackup --prepare --target-dir=/var/backups/mysql/full_2023-10-27_10-00-00Açıklama:
- `--prepare`: Kopyalanan veri dosyalarına redo log'ları uygulayarak tutarlı hale getirir. Bu işlem, yedeklenen veritabanının crash recovery mekanizmasını simüle eder.
- Bu işlem başarıyla tamamlandığında, hedef dizinde `xtrabackup_checkpoints` dosyasında `backup_type = full-prepared` ve `to_lsn` bilgisi güncellenir.
Geri Yükleme (Restore)
Hazırlanmış bir tam yedeği geri yüklemek için mevcut MySQL veri dizininin üzerine kopyalamak ve izinleri ayarlamak gerekir.
# 1. MySQL servisini durdurun (kritik!)
sudo systemctl stop mysql
# 2. Mevcut veri dizinini temizleyin veya taşıyın (felaket anında dikkatli olun!)
sudo rm -rf /var/lib/mysql/*
# 3. Hazırlanmış yedekten verileri kopyalayın
xtrabackup --copy-back --target-dir=/var/backups/mysql/full_2023-10-27_10-00-00
# 4. Dosya izinlerini MySQL kullanıcısına ayarlayın
sudo chown -R mysql:mysql /var/lib/mysql
# 5. MySQL servisini başlatın
sudo systemctl start mysqlAçıklama:
- `--copy-back`: Hazırlanmış yedekleme dizinindeki dosyaları MySQL'in veri dizinine kopyalar. Bu işlem, mevcut veri dizininin boş olmasını veya güvenli bir yere taşınmış olmasını gerektirir.
- İzinlerin doğru ayarlanması, MySQL'in veri dosyalarına erişebilmesi için hayati önem taşır.
Artımlı Yedekleme (Incremental Backup)
Artımlı yedeklemeler, son tam veya artımlı yedeklemeden bu yana değişen veri sayfalarını kaydeder. Bu, yedekleme süresini ve depolama alanını optimize eder.
# İlk tam yedek (base backup) alınır ve hazırlanır.
# Bu adımlar yukarıdaki 'Tam Yedekleme' ve 'Yedeklemeyi Hazırlama' bölümlerinde açıklanmıştır.
xtrabackup --backup --target-dir=/var/backups/mysql/full_base --user=backup_user --password=YedekSifre
xtrabackup --prepare --target-dir=/var/backups/mysql/full_base --export
# İlk artımlı yedekleme (full_base'den sonraki değişiklikler)
xtrabackup --backup --target-dir=/var/backups/mysql/inc1_$(date +%F_%H-%M-%S) --incremental-basedir=/var/backups/mysql/full_base --user=backup_user --password=YedekSifre
# İkinci artımlı yedekleme (inc1'den sonraki değişiklikler)
xtrabackup --backup --target-dir=/var/backups/mysql/inc2_$(date +%F_%H-%M-%S) --incremental-basedir=/var/backups/mysql/inc1_2023-10-27_11-00-00 --user=backup_user --password=YedekSifreAçıklama:
- `--incremental-basedir`: Yeni artımlı yedeğin hangi yedeklemeye dayalı olacağını belirtir. XtraBackup, bu dizindeki `xtrabackup_checkpoints` dosyasındaki `to_lsn` değerini kullanarak sadece bu LSN'den sonra değişen sayfaları kopyalar.
Artımlı Yedeklemeyi Hazırlama ve Geri Yükleme
Artımlı yedeklemeler geri yüklenebilmek için sırasıyla ana yedeğe uygulanmalıdır.
# 1. Ana (full) yedeği hazırlayın (redo log'ları uygulayın, ancak son LSN'e kadar değil)
xtrabackup --prepare --target-dir=/var/backups/mysql/full_base
# 2. İlk artımlı yedeği ana yedeğe uygulayın
xtrabackup --prepare --target-dir=/var/backups/mysql/full_base --incremental-dir=/var/backups/mysql/inc1_2023-10-27_11-00-00
# 3. İkinci artımlı yedeği (veya sonraki tüm artımlıları) ana yedeğe sırasıyla uygulayın
xtrabackup --prepare --target-dir=/var/backups/mysql/full_base --incremental-dir=/var/backups/mysql/inc2_2023-10-27_12-00-00
# Tüm artımlılar uygulandıktan sonra, full_base dizini en son artımlı yedeğin anındaki tutarlı durumu yansıtır.
# Şimdi bu dizini geri yükleyebilirsiniz (yukarıdaki 'Geri Yükleme' adımlarına bakın).
# xtrabackup --copy-back --target-dir=/var/backups/mysql/full_baseAçıklama:
- Artımlı yedekleri hazırlarken, `full_base` dizinine her bir artımlı yedeği sırasıyla uygulayarak veritabanını istenen zamana geri sararız. Her `--incremental-dir` komutu, hedef dizindeki veri dosyalarına ilgili artımlı yedeğin değişikliklerini uygular.
Üretim Ortamında Senaryo: Yüksek Trafikli E-ticaret Platformu
Bir e-ticaret platformunun ana MySQL veritabanı, günde milyonlarca işlem gerçekleştiren 7/24 operasyonel bir yapıda çalışıyor. Veritabanı boyutu terabaytlar seviyesinde ve hizmet kesintisi kabul edilemez. Felaket kurtarma (DR) ve anlık geri yükleme (PITR - Point-in-Time Recovery) yetenekleri kritik öneme sahip.
Uygulama:
Bu senaryoda Percona XtraBackup ile hibrit bir yedekleme stratejisi benimsenmiştir:
- Günlük Tam Yedekleme: Her gece yarısı, yükün en az olduğu saatlerde bir tam yedek alınır ve yedeklenen dizin, hazırlanır hazırlanmaz AWS S3'e taşınır. Bu, uzun vadeli saklama ve coğrafi yedeklilik sağlar.
- Saatlik Artımlı Yedekleme: Gün boyunca her saat başı, son tam veya artımlı yedeklemeye dayalı olarak bir artımlı yedek alınır. Bu artımlı yedekler de yerel diskte kısa bir süre tutulduktan sonra S3'e yüklenir.
- Binlog Entegrasyonu: MySQL'in ikili günlükleri (binlog'lar) de ayrı bir süreçle sürekli olarak S3'e arşivlenir.
Felaket Kurtarma Senaryosu:
Bir bölgesel arıza veya veri bozulması durumunda, hedef RPO (Recovery Point Objective) 15 dakikadan azdır. Kurtarma adımları şunlardır:
- AWS'nin farklı bir bölgesinde veya farklı bir AZ'de yeni bir EC2 instance başlatılır ve MySQL kurulur.
- S3'ten en son tam yedek indirilir ve `full_base` olarak yerel diske kopyalanır.
- Ardından, S3'ten en son tam yedekten sonraki tüm artımlı yedekler sırasıyla indirilir ve `full_base` dizinine uygulanır (`xtrabackup --prepare --incremental-dir`).
- Geri yükleme işlemi tamamlandıktan sonra, son artımlı yedeğin `to_lsn` değerinden sonraki binlog'lar S3'ten indirilir ve MySQL'e uygulanarak veritabanı istenen zamana (genellikle olaydan hemen önceki son tutarlı noktaya) kadar kurtarılır.
- Veritabanı başlatılır ve uygulama trafiği yeni instance'a yönlendirilir (DNS güncellemeleri veya yük dengeleyici ayarlarıyla).
Bu strateji, minimum kesinti ve veri kaybı ile terabaytlarca veriye sahip bir e-ticaret platformunun sürekliliğini garanti eder.
Güvenlik ve Performans Notları
- Kullanıcı Yetkileri: Yedekleme için kullanılan MySQL kullanıcısına (`backup_user`) sadece gerekli minimum yetkiler verilmelidir (`RELOAD`, `PROCESS`, `REPLICATION CLIENT`, `LOCK TABLES`). Asla `root` kullanıcısı ile yedekleme yapmayın.
- Disk Performansı: XtraBackup, yedekleme sırasında disk G/Ç (I/O) yoğun bir işlem gerçekleştirebilir. Özellikle büyük veritabanlarında, yedekleme disklerinin ayrı bir RAID dizisinde veya yüksek performanslı (NVMe gibi) depolama birimlerinde olması, üretim sunucusunun performansını etkilememek adına önemlidir.
- Yedekleme Dizinleri: Yedekleme dizinlerinin yeterli boş alana sahip olduğundan ve uygun izinlerle yapılandırıldığından emin olun.
Sonuç
Percona XtraBackup, MySQL ve MariaDB veritabanlarının online yedeklenmesi için sektör standardı ve vazgeçilmez bir araçtır. Fiziksel, non-blocking yapısı, InnoDB'nin işlem tutarlılığını koruma yeteneği ve artımlı yedekleme seçenekleri sayesinde, yüksek kullanılabilirlik ve felaket kurtarma hedeflerine ulaşmak için güçlü bir temel sunar. Doğru yapılandırıldığında ve otomatikleştirildiğinde, XtraBackup üretim ortamlarınız için veri güvenliğinin önemli bir garantörü haline gelir.