Przejdź do głównej zawartości

Podstawy baz danych

Bazy danych to zorganizowane zbiory informacji, które umożliwiają aplikacjom i serwerom trwałe przechowywanie, organizowanie i szybki dostęp do danych. W kontekście serwerów Minecraft odpowiadają za przechowywanie wszystkich kluczowych informacji - od uprawnień gracza, przez statystyki, po logi serwera. Wybór odpowiedniej bazy danych determinuje wydajność, stabilność i możliwości rozszerzania Twojego serwera.


Typy baz danych

Baza danychTypGłówne cechyKiedy wybrać?
MariaDBRelacyjna (SQL)Tradycyjna baza danych z tabelami, bezpieczne transakcje, obsługa złożonych zapytań SQL oraz stałe przechowywanie danych na dysku. W 90% przypadków można jej używać zamiast MySQL, a działa 13-36% szybciej.Gdy potrzebujesz uporządkowanych danych, pewności że nic się nie zgubi i klasycznych powiązań między danymi. Idealna do pluginów Minecraft i przejścia z MySQL.
Redis 6 i 7NoSQL, klucz-wartość, w pamięciBardzo szybka baza działająca w pamięci komputera (odpowiedzi w ułamkach milisekundy, miliony operacji na sekundę), świetna do przyspieszania, kolejek, zapisywania sesji użytkowników. Redis 7: lepsze zarządzanie pamięcią o 15-30%, nowe funkcje Redis Functions, ACLv2 z selektorami, ulepszone Sharded Pub/Sub.Gdy potrzebujesz błyskawicznego dostępu do tymczasowych danych, przyspieszania innych baz (10-100 razy szybsze odczyty) lub systemów kolejkowych w czasie rzeczywistym. Nie nadaje się jako główna baza danych.
MongoDBNoSQL, dokumentowaPrzechowuje dane jako dokumenty podobne do JSON-a, elastyczna struktura bez konieczności przebudowy, rozszerzanie na wiele serwerów, zaawansowane przetwarzanie danych. Obsługuje bezpieczne transakcje między dokumentami i automatyczne przełączanie na zapasowe serwery.Gdy dane mają nieregularną strukturę, potrzebujesz szybkiego tworzenia prototypów, obsługi dużych zbiorów danych z urządzeń IoT, systemów zarządzania treścią lub gdy aplikacja wymaga częstych zmian w strukturze danych.

Kiedy wybrać którą bazę?

  • MariaDB dla stabilności: Serwery Minecraft, sklepy internetowe z płatnościami, tradycyjne strony internetowe, przejście z MySQL
  • MongoDB dla elastyczności: Aplikacje z szybko zmieniającymi się wymaganiami, katalogi produktów, systemy zarządzania treścią, aplikacje dla urządzeń IoT
  • Redis jako przyśpieszacz: Zawsze jako uzupełnienie głównej bazy - przyspieszanie (10-100 razy szybsze), sesje użytkowników, rankingi, kolejki zadań

MariaDB

Czym jest MariaDB?

MariaDB to darmowa, open-source baza danych będąca forkiem MySQL. Jest w pełni kompatybilna z MySQL i szeroko używana w aplikacjach webowych oraz serwerach gier, w tym Minecraft. MariaDB zapewnia trwałe przechowywanie danych.

Do czego służy MariaDB w aplikacjach?

  • Dane uporządkowane - informacje wymagające stałej struktury i relacji między tabelami
  • Transakcje finansowe - płatności, ekonomia serwera, sklepy gdzie każda złotówka się liczy
  • Systemy uprawnień - hierarchie grup, role, uprawnienia z powiązaniami
  • Logi i audyty - bezpieczne przechowywanie historii działań, backup danych
  • Inventory i ekwipunek - przedmioty gracza z dokładnymi właściwościami i ilościami

Konfiguracja MariaDB

Baza danych MariaDB od razu po zakupie jest w pełni skonfigurowana i gotowa do działania.

Wymagane dane do połączenia MariaDB

Po uruchomieniu MariaDB będziesz potrzebował:

  • IP serwera (IP-1 w panelu)
  • Port (domyślnie znajdziesz go po znaku : w IP-1)
  • Nazwa bazy danych (którą utworzysz)
  • Użytkownik i hasło (które utworzysz)

Podstawowe komendy SQL

Poniższa tabela przedstawia zestaw najczęściej używanych komend SQL wraz z opisem i przykładem użycia, które pomogą w podstawowej obsłudze bazy danych MariaDB.

Komenda SQLOpisPrzykład użycia
CREATE DATABASE nazwa;Tworzy nową bazę danychCREATE DATABASE luckperms;
USE nazwa;Wybiera bazę do dalszej pracyUSE luckperms;
CREATE TABLE nazwa (...);Tworzy nową tabelę z określoną strukturąCREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
SHOW TABLES;Wyświetla listę tabel w aktualnej bazie-
DESCRIBE nazwa;Wyświetla strukturę tabeliDESCRIBE users;
INSERT INTO nazwa (...) VALUES (...);Dodaje nowy rekord do tabeliINSERT INTO users (id, name) VALUES (1, 'Jan');
SELECT * FROM nazwa;Pobiera wszystkie dane z tabeliSELECT * FROM users;
SELECT kolumna FROM nazwa WHERE warunek;Pobiera dane spełniające warunekSELECT name FROM users WHERE id = 1;
UPDATE nazwa SET kolumna=wartość WHERE warunek;Aktualizuje dane w tabeliUPDATE users SET name='Anna' WHERE id=1;
DELETE FROM nazwa WHERE warunek;Usuwa rekordy spełniające warunekDELETE FROM users WHERE id=1;
DROP TABLE nazwa;Usuwa tabelę z bazyDROP TABLE users;
ALTER TABLE nazwa ADD kolumna typ;Dodaje nową kolumnę do tabeliALTER TABLE users ADD age INT;
GRANT uprawnienia ON baza.* TO 'użytkownik'@'host';Przyznaje uprawnienia użytkownikowiGRANT ALL PRIVILEGES ON luckperms.* TO 'mc_luckperms'@'%';
FLUSH PRIVILEGES;Przeładowuje uprawnienia po zmianach-

Tworzenie bazy danych i użytkownika

Utworzenie bazy i użytkownika dla pluginu

Aby przygotować bazę danych MariaDB do współpracy z innymi usługami (np. plugin LuckPerms w Minecraft), wykonaj poniższe komendy SQL:

CREATE DATABASE luckperms;
CREATE USER 'luckperms_user'@'%' IDENTIFIED BY 'TwojeHaslo123!';
GRANT ALL PRIVILEGES ON luckperms.* TO 'luckperms_user'@'%';
FLUSH PRIVILEGES;

Przykład zastosowania MariaDB w Minecraft

Konfiguracja LuckPerms z MariaDB

Otwórz plik config.yml LuckPerms i znajdź sekcję storage:

plugins/luckperms/config.yml
storage-method: mariadb # lub mysql

data:
address: 83.168.94.0:00000 # IP-1 z panelu wraz z portem
database: luckperms # Nazwa utworzonej bazy
username: luckperms_user # Utworzony użytkownik
password: 'TwojeHaslo123!' # Hasło użytkownika

Dodatkowe ustawienia

Jeśli otrzymujesz ciągle błąd podobny do:

No operations allowed after connection closed
Failed to validate connection (xxx cannot be called on a closed connection)

Musisz dostosować ustawienie maximum-lifetime w konfiguracji LuckPerms oraz wait_timeout w MariaDB.

Kluczowe jest, aby wartość maximum-lifetime w konfiguracji LuckPerms była mniejsza od wartości wait_timeout w konfiguracji MariaDB.

Plik config.yml w pluginie LuckPerms

  • Domyślna wartość maximum-lifetime: 1800000 (30 minut w milisekundach)

Plik .my.cnf na serwerze MariaDB

  • Domyślna wartość wait_timeout: 600 (10 minut w minutach)

Rozwiązanie problemu:

Zmniejsz maximum-lifetime na wartość o 30 sekund mniejszą, niż wait_timeout na serwerze MariaDB.

plugins/luckperms/config.yml
  pool-settings:
maximum-lifetime: 1800000 → 570000 # z 30 minut na 9 i pół minuty

Redis 6 i 7

Czym jest Redis?

Redis to szybka baza danych typu in-memory (w pamięci RAM), która w serwerach służy jako system komunikacji między serwerami. Nie przechowuje trwale danych gracza - tylko przekazuje komunikaty między serwerami w czasie rzeczywistym (np. synchronizacja uprawnień, wiadomości cross-server, itp.).

Do czego służy Redis w aplikacjach?

  • Cache i przyspieszanie - buforowanie wyników zapytań do bazy danych (10-100x szybsze odczyty)
  • Komunikacja real-time - czaty, powiadomienia, synchronizacja między serwerami (PubSub)
  • Sesje użytkowników - przechowywanie danych logowania i sesji w pamięci RAM
  • Rankingi i leaderboardy - tabele wyników w grach, konkursy, statystyki na żywo
  • Kolejki zadań - przetwarzanie zadań w tle, systemy powiadomień

Konfiguracja Redis

Ustawienie hasła

  1. W zakładce Parametry Startowe znajdź pole Redis Password
  2. Ustaw silne hasło (np. 0fiT0DCeripKV*s7!)
  3. Zapisz zmiany i uruchom ponownie serwer Redis.

Wymagane dane do połączenia Redis

Po uruchomieniu Redis będziesz potrzebował:

  • IP serwera (IP-1 w panelu)
  • Port (domyślnie znajdziesz go po znaku : w IP-1)
  • Hasło (to które ustawiłeś w parametrach)

Przykład zastosowania Redis w Minecraft

Otwórz plik config.yml LuckPerms i znajdź sekcję messaging

Wykonaj poniższą konfigurację na minimum dwóch serwerach Minecraft, z zainstalowanym pluginem LuckPerms:

plugins/luckperms/config.yml
messaging-service: auto → redis

redis:
enabled: false → true
address: 83.168.94.0:00000 # IP-1 z zakładki Konsola.
username: ''
password: '0fiT0DCeripKV*s7!' # Ustawione hasło w Parametrach startowych Redis.

Testowanie połączenia

Po restarcie serwerów z wykonaj test:

  1. Na jednym serwerze: /lp user [nazwa_gracza] meta addprefix 100 "&aTEST"
  2. Sprawdź na drugim serwerze czy prefix się pojawił natychmiast
  3. W logach na drugim serwerze powinieneś zobaczyć: [luckperms]: [Messaging] Received user update ping

MongoDB

Czym jest MongoDB?

MongoDB to darmowa, open-source baza danych NoSQL typu dokumentowego, która przechowuje dane w formacie BSON (Binary JSON) - rozszerzonej wersji JSON. W przeciwieństwie do tradycyjnych baz relacyjnych (jak MariaDB/MySQL), MongoDB nie używa tabel i wierszy, lecz kolekcje i dokumenty.

Do czego służy MongoDB w aplikacjach?

  • Przechowywanie danych gracza z elastyczną strukturą (statystyki, inventory, ustawienia)
  • Systemy logowania - nieregularne struktury danych
  • Konfiguracje - różne pluginy, różne formaty danych
  • Cache i sesje - szybki dostęp do danych użytkownika
  • API data storage - naturalne dla JSON/REST API

Konfiguracja MongoDB

Ustawienie hasła administratora

  1. W zakładce Parametry Startowe znajdź pole Mongo Admin Password.
  2. Ustaw silne hasło (np. 0fiT0DCeripKV*s7!).
  3. Zapisz zmiany i uruchom serwer MongoDB.

Zmiana hasła w konsoli MongoDB

Po uruchomieniu serwera musisz wejść w zakładkę Konsola i ustawić to samo hasło dla użytkownika admin, co ustawiłeś w Parametrach Startowych:

use admin
db.changeUserPassword("admin", "0fiT0DCeripKV*s7!")

Wymagane dane do połączenia MongoDB

Po konfiguracji MongoDB potrzebujesz:

  • IP serwera (IP-1 w panelu)
  • Port (domyślnie znajdziesz go po znaku : w IP-1)
  • Użytkownik (admin lub utworzony przez Ciebie)
  • Hasło (to które ustawiłeś w parametrach)
  • Authentication Database (zazwyczaj admin lub utworzona)

Tworzenie bazy danych i użytkownika w MongoDB

Podstawowe komendy

  1. Przejdź do/utwórz bazę
use [nazwa_bazy] # np. use luckperms
  1. Utwórz użytkownika z uprawnieniami
db.createUser({user:"nazwa_uzytkownika",pwd:"TwojeHaslo123!",roles:[{role:"readWrite",db:"nazwa_bazy"},{role:"dbAdmin",db:"nazwa_bazy"}]}) # np. db.createUser({user:"luckperms_user",pwd:"TwojeHaslo123!",roles:[{role:"readWrite",db:"luckperms"},{role:"dbAdmin",db:"luckperms"}]})
  1. Wstaw pierwszy dokument aby baza faktycznie powstała
db.init.insertOne({created: new Date()})

Podstawowe najczęściej używane komendy MongoDB

Poniższa tabela przedstawia zestaw najważniejszych komend MongoDB wraz z opisem i przykładem użycia:

Komenda MongoDBOpisPrzykład użycia
show dbsWyświetla listę wszystkich baz danych-
use nazwa_bazyPrzełącza na wybraną bazę (tworzy jeśli nie istnieje)use luckperms
dbWyświetla aktualną bazę danych-
show collectionsWyświetla kolekcje w aktualnej bazie-
db.kolekcja.insertOne({...})Wstawia jeden dokument do kolekcjidb.users.insertOne({name:"Jan", age:25})
db.kolekcja.insertMany([{...}])Wstawia wiele dokumentów do kolekcjidb.users.insertMany([{name:"Anna"},{name:"Piotr"}])
db.kolekcja.find()Pobiera wszystkie dokumenty z kolekcjidb.users.find()
db.kolekcja.find({...})Pobiera dokumenty spełniające warunekdb.users.find({age: 25})
db.kolekcja.findOne({...})Pobiera pierwszy dokument spełniający warunekdb.users.findOne({name: "Jan"})
db.kolekcja.updateOne({...}, {$set:{...}})Aktualizuje jeden dokumentdb.users.updateOne({name:"Jan"}, {$set:{age:26}})
db.kolekcja.updateMany({...}, {$set:{...}})Aktualizuje wiele dokumentówdb.users.updateMany({age:25}, {$set:{status:"active"}})
db.kolekcja.deleteOne({...})Usuwa jeden dokumentdb.users.deleteOne({name:"Jan"})
db.kolekcja.deleteMany({...})Usuwa wiele dokumentówdb.users.deleteMany({age:{$lt:18}})
db.kolekcja.drop()Usuwa całą kolekcjędb.users.drop()
db.dropDatabase()Usuwa całą bazę danych-

Przykład zastosowania MongoDB w Minecraft

Konfiguracja LuckPerms z MongoDB

Sposób 1: Podstawowa konfiguracja (zalecana)

Otwórz plik config.yml LuckPerms i skonfiguruj sekcję storage:

plugins/luckperms/config.yml
storage-method: MongoDB

data:
address: 83.168.94.0:00000 # IP-1 z panelu wraz z portem
database: luckperms # Nazwa utworzonej bazy
username: luckperms_user # Utworzony użytkownik
password: 'TwojeHaslo123!' # Hasło użytkownika

mongodb-collection-prefix: 'lp_' # Prefiks dla kolekcji
mongodb-connection-uri: '' # Pozostaw puste
Sposób 2: Użycie Connection URI (alternatywny)
plugins/luckperms/config.yml
storage-method: MongoDB

data:
mongodb-connection-uri: 'mongodb://luckperms_user:TwojeHaslo123!@83.168.94.0:00000/luckperms'

String połączenia dla innych aplikacji

mongodb://nazwa_uzytkownika:TwojeHaslo123!@83.168.94.0:00000/nazwa_bazy