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 danych | Typ | Główne cechy | Kiedy wybrać? |
|---|---|---|---|
| MariaDB | Relacyjna (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 7 | NoSQL, klucz-wartość, w pamięci | Bardzo 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. |
| MongoDB | NoSQL, dokumentowa | Przechowuje 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-1w panelu) - Port (domyślnie znajdziesz go po znaku
:wIP-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 SQL | Opis | Przykład użycia |
|---|---|---|
CREATE DATABASE nazwa; | Tworzy nową bazę danych | CREATE DATABASE luckperms; |
USE nazwa; | Wybiera bazę do dalszej pracy | USE 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ę tabeli | DESCRIBE users; |
INSERT INTO nazwa (...) VALUES (...); | Dodaje nowy rekord do tabeli | INSERT INTO users (id, name) VALUES (1, 'Jan'); |
SELECT * FROM nazwa; | Pobiera wszystkie dane z tabeli | SELECT * FROM users; |
SELECT kolumna FROM nazwa WHERE warunek; | Pobiera dane spełniające warunek | SELECT name FROM users WHERE id = 1; |
UPDATE nazwa SET kolumna=wartość WHERE warunek; | Aktualizuje dane w tabeli | UPDATE users SET name='Anna' WHERE id=1; |
DELETE FROM nazwa WHERE warunek; | Usuwa rekordy spełniające warunek | DELETE FROM users WHERE id=1; |
DROP TABLE nazwa; | Usuwa tabelę z bazy | DROP TABLE users; |
ALTER TABLE nazwa ADD kolumna typ; | Dodaje nową kolumnę do tabeli | ALTER TABLE users ADD age INT; |
GRANT uprawnienia ON baza.* TO 'użytkownik'@'host'; | Przyznaje uprawnienia użytkownikowi | GRANT 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:
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.
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
- W zakładce Parametry Startowe znajdź pole
Redis Password - Ustaw silne hasło (np.
0fiT0DCeripKV*s7!) - Zapisz zmiany i uruchom ponownie serwer Redis.
Wymagane dane do połączenia Redis
Po uruchomieniu Redis będziesz potrzebował:
- IP serwera (
IP-1w panelu) - Port (domyślnie znajdziesz go po znaku
:wIP-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:
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:
- Na jednym serwerze:
/lp user [nazwa_gracza] meta addprefix 100 "&aTEST" - Sprawdź na drugim serwerze czy prefix się pojawił natychmiast
- 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
- W zakładce
Parametry Startoweznajdź poleMongo Admin Password. - Ustaw silne hasło (np.
0fiT0DCeripKV*s7!). - 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-1w panelu) - Port (domyślnie znajdziesz go po znaku
:wIP-1) - Użytkownik (
adminlub utworzony przez Ciebie) - Hasło (to które ustawiłeś w parametrach)
- Authentication Database (zazwyczaj
adminlub utworzona)
Tworzenie bazy danych i użytkownika w MongoDB
Podstawowe komendy
- Przejdź do/utwórz bazę
use [nazwa_bazy] # np. use luckperms
- 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"}]})
- 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 MongoDB | Opis | Przykład użycia |
|---|---|---|
show dbs | Wyświetla listę wszystkich baz danych | - |
use nazwa_bazy | Przełącza na wybraną bazę (tworzy jeśli nie istnieje) | use luckperms |
db | Wyświetla aktualną bazę danych | - |
show collections | Wyświetla kolekcje w aktualnej bazie | - |
db.kolekcja.insertOne({...}) | Wstawia jeden dokument do kolekcji | db.users.insertOne({name:"Jan", age:25}) |
db.kolekcja.insertMany([{...}]) | Wstawia wiele dokumentów do kolekcji | db.users.insertMany([{name:"Anna"},{name:"Piotr"}]) |
db.kolekcja.find() | Pobiera wszystkie dokumenty z kolekcji | db.users.find() |
db.kolekcja.find({...}) | Pobiera dokumenty spełniające warunek | db.users.find({age: 25}) |
db.kolekcja.findOne({...}) | Pobiera pierwszy dokument spełniający warunek | db.users.findOne({name: "Jan"}) |
db.kolekcja.updateOne({...}, {$set:{...}}) | Aktualizuje jeden dokument | db.users.updateOne({name:"Jan"}, {$set:{age:26}}) |
db.kolekcja.updateMany({...}, {$set:{...}}) | Aktualizuje wiele dokumentów | db.users.updateMany({age:25}, {$set:{status:"active"}}) |
db.kolekcja.deleteOne({...}) | Usuwa jeden dokument | db.users.deleteOne({name:"Jan"}) |
db.kolekcja.deleteMany({...}) | Usuwa wiele dokumentów | db.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:
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)
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