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.
Każda zmiana hasła użytkownika lub uprawnień bazy danych wymaga pełnego restartu serwera bazy danych, aby nowe poświadczenia zostały prawidłowo zaaplikowane przez system.
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:3306 # 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.
TwojeHaslo123!) - Zapisz zmiany i uruchom ponownie serwer Redis.
Po zmianie hasła w polu Redis Password wymagane jest wykonanie pełnego restartu usługi Redis, aby nowy klucz uwierzytelniający został załadowany.
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:6379 # 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.
TwojeHaslo123!). - 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", "TwojeHaslo123!")
Ustawienie nowego hasła administratora w Parametrach Startowych oraz Konsoli będzie w pełni aktywne dla zewnętrznych połączeń dopiero po przeprowadzeniu pełnego restartu bazy danych MongoDB.
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:27017 # 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:27017/luckperms'
String połączenia dla innych aplikacji
mongodb://nazwa_uzytkownika:TwojeHaslo123!@83.168.94.0:27017/nazwa_bazy