// FiveM

MySQL na serwerze FiveM: poprawna konfiguracja oxmysql

MySQL na serwerze FiveM: poprawna konfiguracja oxmysql

Serwer freeroam niczego nie pamięta i to jest w porządku. Ale gdy tylko budujesz prawdziwy serwer roleplay z frameworkiem takim jak ESX czy QBCore, wszystko musi zostać zapisane: postacie, salda bankowe, pojazdy, przedmioty w kieszeniach i bagażnikach. Do tego praktycznie każdy serwer FiveM używa bazy MySQL, a most między Twoim serwerem a tą bazą nazywa się dziś oxmysql. W tym artykule porządnie ustawisz to połączenie i zadbasz o to, żeby dane Twoich graczy były bezpieczne.

Dlaczego serwer RP nie obejdzie się bez bazy danych

Za każdym razem, gdy gracz się wylogowuje, framework zapisuje jego postępy: pozycję, pieniądze, pracę, ekwipunek. Gdy gracz zaloguje się jutro znowu, framework wszystko odczytuje z powrotem. Bez bazy danych każdy zaczyna każdą sesję od zera, a dla roleplay to zabójcze. Baza danych jest więc dosłownie pamięcią Twojego miasta, a wszystkie skrypty, które muszą coś pamiętać (garaże, domy, telefony), podpinają się do tej samej bazy.

oxmysql: obecny standard

Przez lata standardowym łącznikiem był mysql-async, później doszedł ghmattimysql. Żaden z nich nie jest już aktywnie utrzymywany. Następcą jest oxmysql: aktywnie rozwijany i będący łącznikiem, którego nowoczesne frameworki i skrypty dziś oczekują. Jeśli w jakimś tutorialu wciąż trafiasz na mysql-async, to znak, że tutorial jest przestarzały. Warto wiedzieć: oxmysql ma warstwę kompatybilności, dzięki której wiele starszych skryptów proszących o mysql-async po prostu dalej działa.

Sama instalacja to niewiele pracy: oxmysql to zwykły zasób, który wrzucasz do katalogu resources i uruchamiasz linijką ensure. Jeśli używasz przepisu txAdmin dla ESX lub QBCore, oxmysql często jest już w zestawie i musisz tylko poprawnie ustawić dane bazy.

Connection string w server.cfg

oxmysql musi wiedzieć, gdzie jest Twoja baza i jak może się zalogować. Załatwiasz to jednym convarem w server.cfg, który musi stać przed ensure oxmysql:

set mysql_connection_string "mysql://uzytkownik:[email protected]/nazwa_bazy?charset=utf8mb4"

ensure oxmysql
ensure es_extended

Dane (użytkownik, hasło, host i nazwa bazy) dostajesz przy zakładaniu bazy. Jeśli zamówisz serwer FiveM w MC-Node, zarządzanie bazą danych jest po prostu częścią panelu; w bazie wiedzy opisano, jak założyć bazę danych i jak podłączyć ją do serwera.

Jedno ostrzeżenie, którego nie da się powtarzać zbyt często: ta linijka zawiera hasło do Twojej bazy. Nigdy nie udostępniaj więc ot tak całego server.cfg, gdy gdzieś prosisz o pomoc, tylko najpierw wytnij connection string. I trzymaj się kolejności: najpierw connection string, potem ensure oxmysql, a dopiero po nim framework. Jeśli oxmysql nie wystartuje jako pierwszy, framework wstaje z błędami bazy danych i gracze nie mogą się nawet zalogować.

Jak ESX i QBCore używają Twojej bazy

Nie musisz zostawać administratorem baz danych, ale ogólny obraz ogromnie pomaga przy rozwiązywaniu problemów. Podczas instalacji frameworka importujesz dołączony plik .sql, który tworzy podstawowe tabele. ESX trzyma graczy na przykład w tabeli users, a pojazdy w owned_vehicles; QBCore używa m.in. players i player_vehicles. Każdy większy skrypt, który instalujesz później (garaże, domy, prace), często ma własny plik .sql z dodatkowymi tabelami. Importuj je porządnie, inaczej dostaniesz błędy w konsoli o brakujących tabelach, gdy tylko skrypt spróbuje coś zapisać.

Jeśli chcesz sam zajrzeć do danych, zrobisz to przez zarządzanie bazą w panelu; w bazie wiedzy opisano, jak założyć bazę danych i nią zarządzać. Patrzeć możesz zawsze, ale z ręcznymi zmianami bądź ostrożny. Zmiana pieniędzy albo przedmiotów bezpośrednio w tabeli, gdy serwer działa, zostanie nadpisana przy najbliższym zapisie, a w gorszym razie zostawi krzywe dane. Do takich ingerencji używaj raczej narzędzi administracyjnych swojego frameworka.

Rozpoznawanie wolnych zapytań

Baza, która odpowiada wolno, czuje się jak lagi serwera: przycinki przy logowaniu, przedmioty opieszale pojawiające się w ekwipunku, miasto, które działa ociężale, choć procesor ma niewiele do roboty. Tak sprawdzisz, czy winowajcą jest baza:

  • Metryki txAdmin. Dashboard txAdmin pokazuje, jak radzi sobie serwer i które zasoby pochłaniają czas. Jeśli szczyty pokrywają się z momentami, w których dużo się zapisuje, jak zaplanowane zapisy albo godziny szczytu, wskazuje to na bazę danych.
  • Konsola. oxmysql potrafi zgłaszać wolne zapytania w konsoli serwera, razem z zasobem, który je wystrzelił. To jest na wagę złota: od razu widzisz, który skrypt powoduje problem.
  • Testy po każdej instalacji. Jeśli zauważasz przycinki zaraz po dodaniu nowego skryptu, masz już podejrzanego. Dlatego duże skrypty dodawaj pojedynczo i przez pierwsze dni miej metryki na oku.

Przyczyną praktycznie nigdy nie jest "MySQL jest wolny", a niemal zawsze skrypt, który zapisuje za dużo albo za często, na przykład co kilka sekund całe ekwipunki. Rozwiązanie tkwi wtedy w skrypcie: dłuższy interwał zapisu albo lepiej napisana alternatywa. Mocniejszy pakiet co najwyżej na chwilę przykryje taki problem.

Backupy: najnudniejszy temat, dopóki nie będziesz go potrzebować

Twoja baza zawiera wszystko, co zbudowała Twoja społeczność. Jedna nieudana aktualizacja frameworka albo jeden skrypt, który opróżni tabelę, i miesiące postaci oraz dobytku znikają. Dlatego:

  • Rób backup przed każdą dużą zmianą. Aktualizacja frameworka, nowy skrypt ekwipunku, duża migracja: najpierw eksport, potem instalacja.
  • Zautomatyzuj regularne backupy przez funkcję backupów w panelu i co jakiś czas pobieraj kopię na własny komputer.
  • Od czasu do czasu przetestuj przywracanie. Backup, którego nigdy nie przywróciłeś, to założenie, nie pewność.

Brzmi to przesadnie, dopóki coś się nie wysypie. W społeczności RP baza danych to nie są zwykłe dane: to postępy wszystkich Twoich graczy, a oni ufają, że o nie dbasz.

Czytaj dalej

// WYPRÓBUJ SAM
Twój serwer Minecraft online w 60 sekund
Zobacz pakiety →