Metin2 veritabanını mysqldump ile yedekleme, otomatik günlük yedek kurma, yedeği geri yükleme ve yedeğin gerçekten çalıştığını doğrulama adımları.
Metin2 sunucusu işletenlerin çoğu yedek almanın önemini, yedeği olmadığı gün öğreniyor. Diskte bir bozulma, yanlış çalıştırılmış bir SQL sorgusu ya da içeriden bir sabotaj; sebep ne olursa olsun sonuç aynı: oyuncuların aylarca emek verdiği karakterler siliniyor ve sunucu bir daha toparlanamıyor.
Bu rehberde Metin2 veritabanını yedeklemenin doğru yolunu, yedeği geri yüklemeyi ve — en çok atlanan kısım — yedeğin gerçekten işe yaradığını nasıl doğrulayacağınızı anlatıyoruz.
Metin2'de Neyi Yedeklemeniz Gerekir?
Yedek denince akla sadece veritabanı gelir ama eksik yedek, yedek sayılmaz. Üç şeyi birden almalısınız:
- Veritabanları:
account,player,common,log. Oyuncu verisinin tamamı burada. - Sunucu dosyaları: Quest dosyaları, yapılandırma dosyaları, derlenmiş binary'ler ve
localeklasörü. - İstemci tarafı: Oyunculara dağıttığınız client'ın epk/eix dosyaları. Bunları kaybederseniz yamayı yeniden üretmek zorunda kalırsınız.
Sadece player yedekleyip account yedeklemeyenler, geri dönüşte karakterleri olan ama giriş yapamayan oyuncularla karşılaşır.
mysqldump ile Yedek Alma
mysqldump, MySQL ile birlikte gelen ve veritabanını SQL metnine çeviren araçtır. Ek kurulum gerektirmez.
Tek bir veritabanını yedeklemek
mysqldump -u root -p player > player_yedek.sql
Metin2'nin dört veritabanını birlikte yedeklemek
mysqldump -u root -p --databases account player common log > metin2_yedek.sql
--databases parametresi önemlidir: geri yüklerken veritabanlarını otomatik oluşturan CREATE DATABASE satırlarını da dosyaya ekler. Bu parametre olmadan alınan yedeği başka bir sunucuya taşımak zahmetli olur.
Tarih damgalı yedek almak
mysqldump -u root -p --databases account player common log > metin2_$(date +%Y%m%d_%H%M).sql
Dosya adı metin2_20260806_1040.sql şeklinde oluşur. Yedeklerin hangi tarihe ait olduğunu isimden görmek, kriz anında kaybedilen zamanı azaltır.
Sıkıştırarak yedeklemek
Metin2 veritabanları büyür. Aktif bir sunucunun log veritabanı tek başına gigabaytları bulabilir. Sıkıştırma yer sorununu büyük ölçüde çözer:
mysqldump -u root -p --databases account player common log | gzip > metin2_yedek.sql.gz
Metin dosyaları çok iyi sıkışır; genellikle boyutun onda birine kadar iner.
Yedek Alırken Sunucuyu Kapatmalı mısınız?
Kısa cevap: InnoDB kullanıyorsanız hayır.
Metin2 tabloları InnoDB motoruyla çalışıyorsa, tutarlı bir anlık görüntü almak için şu parametreyi ekleyin:
mysqldump -u root -p --single-transaction --databases account player common log > yedek.sql
--single-transaction, yedek boyunca tabloları kilitlemeden tutarlı bir görüntü alır. Oyuncular oynamaya devam eder, yedek de bozulmaz.
Tablolarınız MyISAM ise bu parametre işe yaramaz; o durumda --lock-tables gerekir ve yedek süresince yazma işlemleri bekler. Motorunuzu şu sorguyla öğrenebilirsiniz:
SELECT table_name, engine FROM information_schema.tables WHERE table_schema = 'player';
Otomatik Günlük Yedek Kurma
Elle alınan yedek, unutulan yedektir. İşi zamanlayıcıya devredin.
Yedek betiği oluşturun
nano /root/metin2-yedek.sh
İçeriği:
#!/bin/sh
HEDEF=/yedek/metin2
TARIH=$(date +%Y%m%d_%H%M)
mkdir -p $HEDEF
mysqldump -u root -pSIFRENIZ --single-transaction \
--databases account player common log | gzip > $HEDEF/db_$TARIH.sql.gz
# 14 gunden eski yedekleri sil
find $HEDEF -name "db_*.sql.gz" -mtime +14 -delete
Betiği çalıştırılabilir yapın:
chmod +x /root/metin2-yedek.sh
Zamanlayıcıya ekleyin
crontab -e
Her gece 04:00'te çalışması için:
0 4 * * * /root/metin2-yedek.sh
Saat seçerken oyuncu yoğunluğunun en düşük olduğu zamanı tercih edin. Metin2 sunucularında bu genellikle sabaha karşı 04:00 ile 06:00 arasıdır.
Eski yedekleri temizlemeyi unutmayın
Betikteki find ... -mtime +14 -delete satırı 14 günden eski yedekleri siler. Bu satırı koymazsanız birkaç ay içinde disk dolar ve — ironik biçimde — yedekleriniz sunucunuzu çökertir. Bu, düşündüğünüzden çok daha sık yaşanan bir olaydır.
En Kritik Kural: Yedeği Aynı Sunucuda Tutmayın
Disk bozulursa, sunucu ele geçirilirse ya da sağlayıcı hesabınız kapanırsa, aynı makinedeki yedek de gider. Yedeğin en az bir kopyası başka bir yerde durmalı.
Başka bir sunucuya kopyalamak
scp /yedek/metin2/db_20260806_0400.sql.gz kullanici@yedek-sunucu:/yedekler/
Otomatik ve artımlı kopyalama
rsync -avz /yedek/metin2/ kullanici@yedek-sunucu:/yedekler/metin2/
rsync sadece değişen dosyaları aktarır, bu yüzden günlük çalıştırmak için uygundur. Betiğinizin sonuna ekleyebilirsiniz.
Yedeği Geri Yükleme
Sıkıştırılmamış yedek
mysql -u root -p < metin2_yedek.sql
Sıkıştırılmış yedek
gunzip < metin2_yedek.sql.gz | mysql -u root -p
Tek bir veritabanını geri yüklemek
mysql -u root -p player < player_yedek.sql
Geri yükleme öncesi oyun sunucusunu durdurun. Süreçler ayaktayken veritabanını değiştirirseniz, bellekte tutulan eski veri geri yazılır ve geri yükleme kısmen boşa gider.
Yedeğinizin Çalıştığını Doğrulayın
Bu adım neredeyse hiç yapılmıyor ve yedek almanın en önemli parçası aslında burası. Test edilmemiş bir yedek, yedek değil, temennidir.
Dosya boyutunu kontrol edin
ls -lh /yedek/metin2/
Bir yedek dosyası aniden küçüldüyse (örneğin 800 MB'tan 2 KB'a), yedek başarısız olmuş ve muhtemelen sadece hata mesajı yazılmış demektir.
İçeriğe göz atın
gunzip < db_20260806_0400.sql.gz | head -40
Başında CREATE DATABASE ve CREATE TABLE satırlarını görmelisiniz.
Ayda bir gerçek tatbikat yapın
Test sunucunuza yedeği geri yükleyin, oyunu başlatın, bir karakterle giriş yapın. Beş dakikalık bu kontrol, gerçek bir felakette sunucunuzu kurtarır.
Sunucu Dosyalarını da Yedeklemek
Veritabanı tek başına yetmez. Quest'ler, ayarlar ve derlenmiş dosyalar da gitmemeli:
tar -czf /yedek/metin2/dosyalar_$(date +%Y%m%d).tar.gz /usr/home/channel1 /usr/home/auth
Dosya yapısını tanımıyorsanız Metin2 files klasör yapısı yazımızda hangi klasörde ne olduğunu ayrıntılı anlattık.
Özet
İyi bir yedek düzeni üç şartı sağlar: otomatiktir, sunucunun dışında bir kopyası vardır ve düzenli olarak test edilir. Üçünden biri eksikse, tam olarak ihtiyaç duyduğunuz anda çalışmama ihtimali yüksektir.
Yedekleme yükünü kendi üzerinizden almak isterseniz Metin2 sunucu paketlerimizde yedekleme altyapısı hazır geliyor. Saldırı riskiniz varsa DDoS korumalı Metin2 sunucu seçeneklerimize de bakmanızı öneririz.
