Minecraft sunucusuna MySQL bağlamak, eklenti verilerini yerel dosyalar yerine merkezî bir veritabanında tutmak demektir ve üç adımdan oluşur: bir veritabanı oluşturursunuz, o veritabanına yetkili ayrı bir kullanıcı açarsınız, sonra eklentinin yapılandırma dosyasına adres, kullanıcı adı ve parolayı yazıp sunucuyu yeniden başlatırsınız. İşin tamamı on dakikadan kısa sürer; asıl zaman kaybı genellikle bağlantı hatalarını çözmekte yaşanır.
Bu rehberde veritabanını nereye kurmanız gerektiğini, kullanıcıyı doğru yetkilerle nasıl oluşturacağınızı, LuckPerms ve CoreProtect gibi yaygın eklentilerin gerçek yapılandırma satırlarını, uzak bağlantıyı güvenli açmayı ve “Communications link failure” gibi hataların birebir metinlerinden yola çıkarak teşhis yapmayı göreceksiniz.
MySQL Ne Zaman Gerekir, Ne Zaman Gereksizdir?#
En sık yapılan hata, “profesyonel görünsün” diye tek bir sunucuyu MySQL’e taşımaktır. Tek sunucuda MySQL size hız kazandırmaz; aksine araya bir ağ katmanı ve bir servis daha koyar. Yerel depolama (LuckPerms’te H2, CoreProtect’te DuckDB) çoğu durumda daha hızlıdır.
MySQL’in gerçekten gerekli olduğu senaryolar şunlardır:
| Senaryo | MySQL gerekli mi? | Neden |
|---|---|---|
| Tek Paper sunucusu, 20-40 oyuncu | Hayır | Yerel H2 / DuckDB daha hızlı ve bakımsız çalışır |
| Lobi + survival + minigame ağı | Evet | Yetki, ekonomi ve ceza kayıtları ortak olmalı |
| Web sitesinde oyuncu verisi göstermek | Evet | Site aynı tabloları okuyabilir |
| Sunucu dışı bir panel veya Discord botu | Evet | Veriye sunucu kapalıyken de erişilir |
| Tek sunucu ama sık dünya sıfırlama | Evet | Veri dünya klasöründen bağımsız kalır |
Bir Velocity veya BungeeCord ağı kuruyorsanız karar zaten verilmiş demektir: oyuncu lobiden survival’a geçtiğinde VIP rütbesinin kaybolmaması için yetkilerin ortak bir yerde durması gerekir.
MySQL mi MariaDB mi, Nereye Kurulur?#
MariaDB, MySQL’in açık kaynak çatallamasıdır ve Minecraft eklentilerinin neredeyse tamamıyla uyumludur. Ubuntu ve Debian üzerinde depo paketleri daha güncel olduğu için pratikte MariaDB kurulumu biraz daha kolaydır. Tek dikkat edilecek nokta eklenti tarafındaki sürücü seçimidir: LuckPerms’te MariaDB kullanıyorsanız mysql değil mariadb yazmalısınız.
Aynı makine mi, ayrı sunucu mu?#
Veritabanını Minecraft sunucusuyla aynı makineye kurmak küçük ve orta ölçekli sunucular için en iyi seçenektir. Bağlantı 127.0.0.1 üzerinden gider, ağ gecikmesi yok denecek kadar azdır ve 3306 portunu internete açmanız gerekmez. Ayrı bir veritabanı sunucusu ancak birden fazla fiziksel makinede sunucu ağı işletiyorsanız anlamlıdır.
-Xms6G -Xmx6G yapıp kalan payı işletim sistemi ve MySQL için bırakın. Eklenti sayısı fazlaysa 12-16 GB’lık bir pakete çıkmak daha rahat olur.Adım Adım: Veritabanı ve Kullanıcı Oluşturma#
Aşağıdaki adımlar veritabanı sunucusunun kurulu ve çalışır olduğunu varsayar. Linux tarafında MySQL kabuğuna mysql -u root -p ile, Windows tarafında ise “MySQL Command Line Client” kısayoluyla girersiniz. Sunucunuza erişim için SSH bağlantısı ya da Uzak Masaüstü kullanabilirsiniz.
-
Veritabanı kabuğuna girin#
Yönetici hesabıyla bağlanın. Parola sorulduğunda kurulum sırasında belirlediğiniz root parolasını girin.
mysql -u root -p -
Veritabanını oluşturun#
Türkçe karakterler ve emoji içeren sohbet kayıtlarının bozulmaması için karakter setini
utf8mb4seçin. Bu adımı atlarsanız bazı eklentilerde “???” şeklinde bozuk metinler görürsünüz.CREATE DATABASE minecraft CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
Eklentiler için ayrı bir kullanıcı açın#
Root hesabını asla eklenti config dosyasına yazmayın. O dosyayı okuyabilen herkes tüm veritabanı sunucusuna hükmeder. Bunun yerine yalnızca bu veritabanına yetkili bir kullanıcı oluşturun.
CREATE USER 'mcuser'@'localhost' IDENTIFIED BY 'uzun-ve-rastgele-parola'; GRANT ALL PRIVILEGES ON minecraft.* TO 'mcuser'@'localhost'; FLUSH PRIVILEGES; -
Bağlantıyı test edin#
Kabuktan çıkıp yeni kullanıcıyla girin. Bağlanabiliyorsanız eklenti de bağlanır; bağlanamıyorsanız sorun eklentide değil, veritabanı tarafındadır.
mysql -u mcuser -p minecraft -
Eklenti yapılandırmasını doldurun ve sunucuyu yeniden başlatın#
Bağlantı bilgilerini ilgili eklentinin config dosyasına yazın, ardından sunucuyu tamamen durdurup açın. Depolama yöntemi değişikliği çalışan sunucuda
reloadile uygulanmaz.
LuckPerms’i MySQL’e Bağlama#
LuckPerms’in varsayılan depolama yöntemi H2’dir, yani yerel bir dosyadır. MySQL’e geçmek için plugins/LuckPerms/config.yml dosyasındaki iki bölümü düzenlersiniz. Aşağıdaki blok LuckPerms’in kendi varsayılan yapılandırmasıyla aynı yapıdadır:
# plugins/LuckPerms/config.yml
storage-method: mysql # MariaDB kullaniyorsaniz: mariadb
data:
address: localhost # host:port de yazilabilir, or. 127.0.0.1:3306
database: minecraft
username: mcuser
password: 'uzun-ve-rastgele-parola'
pool-settings:
maximum-pool-size: 10
minimum-idle: 10
maximum-lifetime: 1800000 # 30 dakika
keepalive-time: 0
connection-timeout: 5000 # 5 saniye
properties:
useUnicode: true
characterEncoding: utf8
Yapılandırmadaki yorum satırı bu ayarların yalnızca MySQL/MariaDB gibi uzak depolama yöntemlerinde anlamlı olduğunu belirtir; yerel depolamada bunlara dokunmanız gerekmez. Dosyayı kaydettikten sonra sunucuyu durdurup açın ve konsolda LuckPerms’in hangi depolamayı kullandığını yazan satırı kontrol edin.
Zaten H2 üzerinde kurulu bir yetki yapınız varsa, MySQL’e geçmeden önce mevcut verinizi dışa aktarmayı unutmayın. Grup ve izin yapısını sıfırdan kurmak yerine taşımak istiyorsanız LuckPerms yetki sistemi rehberindeki göç adımlarını izleyin.
plugins/LuckPerms klasörünün tam bir kopyasını alın.CoreProtect ve Diğer Eklentilerde Veritabanı Ayarı#
CoreProtect tarafında 2026 itibarıyla önemli bir değişiklik var: resmî dokümantasyon yeni kurulumların gömülü DuckDB ile geldiğini belirtiyor. Yani artık varsayılan ne SQLite ne de MySQL. database-type anahtarı dört değer kabul eder: duckdb (varsayılan), clickhouse, sqlite ve mysql.
# plugins/CoreProtect/config.yml (yeni sema)
database-type: mysql
table-prefix: co_
Var olan bir SQLite veya MySQL kurulumunu güncellemek onu DuckDB’ye çevirmez. database-type anahtarı dosyada yoksa CoreProtect bunu eski use-mysql ayarından türetir ve uygun değeri kendisi yazar. Eski şemadan gelen mysql-host, mysql-port, mysql-database, mysql-username ve mysql-password anahtarları hâlâ karşınıza çıkabilir; bu adları resmî config sayfası açıkça listelemediği için, elinizdeki sürümün kendi config.yml dosyasındaki anahtar adlarını esas alın.
Diğer eklentilerde ortak mantık#
AuthMe, ekonomi ve ceza eklentilerinin hepsinde aynı beş alan istenir: adres, port, veritabanı adı, kullanıcı adı ve parola. Anahtar adları eklentiden eklentiye değişir, bu yüzden kalıbı ezberlemek yerine eklentinin kendi config.yml dosyasındaki veritabanı bölümünü açın. AuthMe giriş sistemi ve ekonomi eklentileri için aynı kullanıcıyı ve aynı veritabanını paylaşabilirsiniz; her eklenti kendi tablolarını farklı önekle oluşturur.
Bağlantılar resmî kaynaklara gider. Üçüncü taraf sitelerden jar indirmeyin. Eklenti dosyalarını nereye koyacağınızı bilmiyorsanız plugin kurulumu rehberine bakın.
Uzak Sunucudan MySQL’e Bağlanma ve Güvenlik#
Minecraft sunucusu ile veritabanı ayrı makinelerdeyse üç şeyi ayarlamanız gerekir: MySQL’in dışarıdan gelen bağlantıları dinlemesi, güvenlik duvarında 3306 portunun açılması ve kullanıcının doğru host ile tanımlanması.
Ubuntu ve Debian üzerinde dinleme adresi /etc/mysql/mysql.conf.d/mysqld.cnf dosyasındaki bind-address satırıyla belirlenir. Varsayılan değer 127.0.0.1’dir ve bu, MySQL’in yalnızca kendi makinesinden gelen bağlantıları kabul etmesi demektir.
# /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
Değişiklikten sonra MySQL servisini yeniden başlatın. Ardından kullanıcıyı, bağlanacak makinenin IP adresiyle sınırlayarak tanımlayın:
-- Uzak erisim icin kullanici (IP'yi mutlaka kisitlayin)
CREATE USER 'mcuser'@'203.0.113.10' IDENTIFIED BY 'guclu-parola';
GRANT ALL PRIVILEGES ON minecraft.* TO 'mcuser'@'203.0.113.10';
FLUSH PRIVILEGES;
-- Mevcut kullanici/host eslesmelerini gorun
SELECT host, user FROM mysql.user;
Bağlantıyı Minecraft sunucusunun bulunduğu makineden test edin:
mysql -h 203.0.113.5 -P 3306 -u mcuser -p minecraft
bind-address = 0.0.0.0 ile 'mcuser'@'%' birleşimi veritabanınızı tüm internete açar ve otomatik tarayıcı botlarının hedefi hâline getirir. Minecraft sunucusu ile MySQL aynı makinedeyse bind-address değerini 127.0.0.1’de bırakın. Ayrı makinelerdeyse yalnızca o makinenin IP adresine izin verin ve güvenlik duvarını buna göre daraltın; ayrıntılar için güvenlik duvarı yapılandırma rehberine bakın.Bağlantı Hataları ve Çözümleri#
Veritabanı bağlantısı çalışmadığında konsolda göreceğiniz satırlar genelde şu kalıplardadır. Bu metinleri sunucu loglarında aynen aratabilirsiniz:
Communications link failure. The last packet successfully received from the server was 114 milliseconds ago.
Failed to validate connection me.lucko.luckperms.lib.mysql.jdbc.JDBC4Connection@b2ed74e (No operations allowed after connection closed.).
Connection is not available, request timed out after 5017ms.
java.net.SocketException: Network is unreachable: recv failed
Mesajın içindeki süreye bakın#
“The last packet successfully received…” satırındaki süre teşhis için en değerli ipucudur. 0 milliseconds ago yazıyorsa bağlantı hiç kurulamamıştır; sorun ağ, port veya yetki tarafındadır. Yüzlerce milisaniye ya da dakikalar yazıyorsa bağlantı bir süre çalışmış sonra kopmuştur; bu genelde boşta kalan bağlantıların MySQL tarafında zaman aşımına uğramasından kaynaklanır.
| Belirti | Olası neden | Yapılacak |
|---|---|---|
| 0 milliseconds ago | Servis kapalı veya port kapalı | MySQL servisini ve 3306 portunu kontrol edin |
| Network is unreachable | Yanlış IP veya yönlendirme sorunu | Adresi ping ve mysql -h ile doğrulayın |
| request timed out after 5017ms | Havuz bağlantı bulamıyor | maximum-pool-size ve MySQL max_connections değerine bakın |
| Access denied for user | Parola veya host eşleşmesi yanlış | SELECT host, user FROM mysql.user; çıktısını kontrol edin |
| Unknown database | Veritabanı adı yanlış yazılmış | Config’deki database değerini karşılaştırın |
#, : veya @ gibi karakterler varsa YAML dosyasında parolayı tek tırnak içine alın. Tırnaksız yazılan parolalarda bu karakterler yorum ya da ayraç sanılır ve eklenti yanlış parolayla bağlanmaya çalışır.Veritabanı Yedekleme ve Taşıma#
MySQL’e geçtiğiniz andan itibaren yedekleme planınız değişir: artık dünya klasörlerini kopyalamak yetmez. Yetkiler, ekonomi bakiyeleri ve log kayıtları veritabanındadır. İkisini birlikte yedeklemezseniz geri dönüşte tutarsız bir sunucu elde edersiniz.
# Tek veritabanini disa aktarma
mysqldump -u mcuser -p minecraft > minecraft-yedek-$(date +%F).sql
# Geri yukleme
mysql -u mcuser -p minecraft < minecraft-yedek-2026-08-18.sql
Bu dosyayı dünya yedekleriyle aynı arşive koymak en pratik yoldur. Yedekleme döngüsünü ve saklama stratejisini nasıl kuracağınızı Minecraft sunucu yedekleme rehberinde bulabilirsiniz. Sunucuyu başka bir makineye taşırken da ilk aktaracağınız şey bu dump dosyası olmalıdır.
Performans: Havuz Ayarları ve Donanım#
Bağlantı havuzu (connection pool), eklentinin her sorgu için yeni bağlantı açmak yerine hazır bağlantıları yeniden kullanmasını sağlar. LuckPerms’in varsayılan maximum-pool-size: 10 değeri tek sunucu için fazlasıyla yeterlidir. Aynı veritabanına bağlanan sunucu sayısı arttıkça toplam bağlantı sayısının MySQL’in max_connections sınırını aşmadığından emin olun; beş sunucunun her biri onar bağlantı açtığında elli bağlantıya çıkarsınız.
Donanım tarafında belirleyici olan disk gecikmesidir. Veritabanı çok sayıda küçük okuma-yazma yapar; bu iş yükünde NVMe SSD ile mekanik disk arasındaki fark saniyelerle ölçülür. Minecraft’ın ana tick döngüsü tek çekirdekte çalıştığı için işlemci tarafında da çekirdek sayısı değil saat hızı önemlidir.
- RAM
- Minecraft + MySQL aynı makinede: en az 8 GB, eklenti yoğunsa 12-16 GB
- İşlemci
- AMD Ryzen 9 7900X / 7950X sınıfı yüksek saat hızlı işlemci
- Disk
- NVMe SSD, en az 50 GB
- Java heap
- 8 GB paket için
-Xms6G -Xmx6G, 16 GB paket için-Xms14G -Xmx14G - Port
- MySQL 3306/TCP, Minecraft 25565/TCP
Kendi veritabanınızı yönetmek istemiyorsanız hazır kurulu gelen Minecraft sunucu paketlerimizden birini, kendi MySQL sürümünüzü kurmak istiyorsanız yüksek frekanslı Ryzen VDS paketlerini inceleyebilirsiniz. Yeni bir sunucuda önce yapmanız gerekenler için VDS ilk ayarlar rehberi iyi bir başlangıçtır.
Özetle#
Minecraft sunucusuna MySQL bağlamanın özü basittir: CREATE DATABASE ile veritabanını, CREATE USER ve GRANT ile sınırlı yetkili bir kullanıcıyı oluşturur, bilgileri eklentinin config dosyasına yazar ve sunucuyu yeniden başlatırsınız. Tek sunucuda buna çoğu zaman ihtiyaç yoktur; asıl kazanç sunucu ağlarında ortaya çıkar.
Hata alırsanız önce mesajı okuyun: “Communications link failure” bağlantının kurulamadığını, “Access denied” yetkinin yanlış olduğunu söyler. Root hesabını hiçbir eklentiye vermeyin, veritabanını gereksiz yere internete açmayın ve dump dosyanızı dünya yedeğiyle birlikte saklayın. Takıldığınız bir nokta olursa destek talebi açarak yardım isteyebilirsiniz.