Metin2 Server Yedekleme ve Geri Yükleme

Kayıtlı
1 Yıl 9 Ay 14 Gün
Katılım
10 Ocak 2025
Konular
50
Mesajlar
140
Tepkime puanı
21
Online süresi
7h 23m
Puan
43
Konum
Türkiye
Web sitesi
www.zyncra.shop
Metin2 Server Yedekleme ve Geri Yükleme

📌 Konu İçeriği — Hızlı Bakış
01.
Hangi veritabanları ve dosyalar yedeklenir?
02. Oyun açıkken alınan yedek neyi içerir?
03. Paketteki yedek betiğinin tuzakları
04. Zamanlama, saklama ve şifreleme
05. Çökme anında neler kaybolur?
06. Geri yükleme provası nasıl yapılır?

  1. Hangi veritabanları ve dosyalar yedeklenir?
  2. Oyun açıkken alınan yedek neyi içerir?

    1. Tutarlı (soğuk) yedek nasıl alınır?

    Metin2 sunucusunda yedeklenmesi gerekenler account, common ve player veritabanları, ihtiyaca göre log veritabanı ve srv1 altındaki sunucu dosyalarıdır.

    ⚡ Hangi veritabanları ve dosyalar yedeklenir?

    NeİçindeYedek
    accountHesaplar, parola özeti, silme kodu ve bakiyeHer yedekte
    playerKarakterler, eşyalar, depo, loncalar, quest bayrakları, oran bayrakları, item_award, market ve artı basma tablolarıHer yedekte
    commonGM listesi, locale, krallık bonusları, exp_tableHer yedekte
    logEşya, giriş, GM komutu ve artı basma kayıtlarıAyrı ve daha seyrek; en büyüğüdür
    hotbackupBoşYalnız veritabanının var olması gerekir
    Sunucu dosyalarıshare/conf protoları, share/locale/turkey (drop, quest kaynakları ve object, haritalar), CONFIG'ler, conf.txt, gen_settings.py, chan/markHer değişiklikten önce
    İkililershare/bin/game ve db, kaynak kod, istemci pack dosyalarıHer sürümde

    ⚡ Oyun açıkken alınan yedek neyi içerir?

    db çekirdeği değişen bir karakter satırını, son yazmadan bu yana 420 saniye geçince; eşyaları 300, pazar fiyat hafızasını 540 saniye geçince MySQL'e yazar. Quest bayraklarını ve etkileri ise kendisine ulaştığı anda yazar.

    Bash:
    sh admin_panel.sh 2     # stop.py: önce oyun çekirdekleri, en son db
    for vt in account common player; do
    mysqldump --defaults-extra-file=/home/yedek/.my.cnf --no-tablespaces $vt \
    | gzip -9 > /yedek/${vt}_$(date +%Y%m%d-%H%M).sql.gz
    done
    sh admin_panel.sh 1     # yeniden başlat

    SQL:
    CREATE USER 'yedek'@'localhost' IDENTIFIED BY 'GucluBirParola';
    GRANT SELECT, LOCK TABLES ON account.* TO 'yedek'@'localhost';
    GRANT SELECT, LOCK TABLES ON common.* TO 'yedek'@'localhost';
    GRANT SELECT, LOCK TABLES ON player.* TO 'yedek'@'localhost';
    GRANT SELECT, LOCK TABLES ON log.* TO 'yedek'@'localhost';
    GRANT RELOAD ON *.* TO 'yedek'@'localhost';  -- yalnız --lock-all-tables için

    ⚡ Paketteki yedek betiğinin tuzakları

    sh admin_panel.sh 4 ve baks/db/Makefile kullanılacaksa şunları bilmek gerekir (klasörün yeri server dosyaları yazısında):
    • Veritabanları ayrı ayrı ve oyun açıkken dökülür; yukarıdaki iki tutarlılık sorunu birlikte gelir.
    • log veritabanının yalnız yapısı alınır (--no-data), hotbackup hiç alınmaz.
    • Komut mysqldump | gzip -9 > dosya 2>> log.txt biçimindedir. Hata yönlendirmesi gzip'e bağlı olduğu için mysqldump başarısız olsa da küçük bir .gz dosyası oluşur ve hata log.txt'ye düşmez. Her dökümün son satırı -- Dump completed on olmalıdır; bu satırı ve dosya boyutunu kontrol et.

    ⚡ Zamanlama, saklama ve şifreleme

    Güncellemeden önce hangi dosyaların saklanacağı server güncelleme yazısında. En az bir kopya sunucunun ve barındırma firmasının dışında durmalıdır; disk arızası ya da kapanan bir hesap aynı makinedeki yedekleri de götürür.

    ⚡ Çökme anında neler kaybolur?

    Bozuk işaretlenmiş bir tabloya giden sorguyu çekirdekler bırakmaz, syserr'e AsyncSQL: retrying yazarak tekrar tekrar dener. Elektrik kesintisinden sonra bu satırları görüyorsan önce tabloları onar.

    Kaybolan veri, çekirdeklerin yeniden bağlanmasıyla geri gelmez. Geri alma mı yapılacağı, tazminat mı verileceği önceden yazılmış bir kurala göre seçilir (açılış planı).

    ⚡ Geri yükleme provası nasıl yapılır?
    1. Ayrı bir makine ya da ayrı bir MySQL örneği kullan; provayı canlı veritabanında yapma.
    2. Paketin sql/base dosyalarıyla beş veritabanını ve çekirdek kullanıcısını oluştur. Dökümler MySQL kullanıcılarını içermez; hotbackup boş da olsa bulunmalıdır, yoksa db çekirdeği açılmaz.
    3. Dökümleri yükle: gunzip < player_TARIH.sql.gz | mysql player. Dökümü olduğu gibi yükle, araya karakter kümesini dönüştüren bir araç koyma.

    ⚡ Kısmi geri yükleme ve silinen karakter

    Tek bir oyuncunun verisi için bütün sunucuyu geri alma. Yedeği ayrı bir adla açılan veritabanına yükle ve gereken satırları sunucu kapalıyken aktar.

    Silinen bir karakterde player_deleted yalnız karakter satırını tutar; envanter, ekipman, simya ve kemer eşyaları, quest bayrakları, etkiler ve lonca üyeliği silinir (karakter silme).

    ⚡ İlgili sayfalar
    • Metin2 PvP Server Açılış Planı: Açılıştan Önceki 30 Gün (Server kurma)
    • Metin2 db conf.txt Ayarları: SQL Satırları, BIND_PORT ve ITEM_ID_RANGE (Server kurma)
    • Metin2 Karakter Silme Kodu Nedir? Karakter Nasıl Silinir (Rehber)

    Sıkça Sorulan Sorular (SSS)
    Soru 1: Metin2 Server Yedekleme ve Geri Yükleme rehberindeki ayarlar tüm sunucu yapılarında geçerli mi?
    Evet, rehberde paylaşılan temel mekanikler hem emek (zor) hem de orta/vs'lik sunucu kurgularında doğrudan uygulanabilir; sunucu oranlarına göre küçük ince ayarlar yapılabilir.

    Soru 2: En yüksek verim için hangi sıralama takip edilmeli?
    Öncelikle karakter/sistem temel gereksinimlerini tamamlayıp ardından konu içerisindeki adım adım dizilim ve optimizasyon tavsiyelerini sırasıyla uygulamanız en yüksek performansı sağlar.
 
Son düzenleme:
Geri
Üst