Frameworky a väčšina skriptov ukladajú postavy, peniaze, autá a inventáre do databázy. FiveM k nej pristupuje cez resource oxmysql. Ukážeme, ako databázu vytvoriť, správne pripojiť, naimportovať do nej SQL a zálohovať.
Čo budete potrebovať
- FiveM server u StormHostu (alebo vlastný FiveM server s databázou MariaDB)
- Oprávnenie Databázy (vlastník ho má vždy)
- Program HeidiSQL (otvorí sa v novom okne) vo Windows (na import a zálohu)
- Približne 20 minút
Prečo oxmysql#
oxmysql je knižnica, cez ktorú ostatné resources posielajú dopyty do databázy MySQL alebo MariaDB. Nahrádza staršie mysql-async a ghmattimysql a ovláda ich zápis, takže staršie skripty fungujú ďalej. Recepty txAdminu pre ESX, QBCore a Qbox ju inštalujú samy.
Autori oxmysql odporúčajú databázu MariaDB. Väčšina skriptov FiveM vznikla pre MySQL 5.7 a s MySQL 8 máva ťažkosti (viac rezervovaných slov, predvolené hodnoty pri stĺpcoch JSON).
Vytvorenie databázy#
- V zákazníckom účte otvorte Moje služby, kliknite na server a prejdite na záložku Databázy.
- Do poľa Názov databázy napíšte názov, napríklad
fivem. Povolené sú písmená, číslice a podčiarkovník. - Do poľa Povolený prístup z napíšte
%(predvolená hodnota). - Kliknite na Vytvoriť databázu.
Pri databáze uvidíte tieto údaje:
| Údaj | Čo znamená | Kam ho použijete |
|---|---|---|
| Názov databázy | Skutočný názov databázy. Môže sa líšiť od toho, čo ste napísali, preto ho vždy kopírujte zo zoznamu. | Connection string, HeidiSQL, txAdmin (Database Name). |
| Používateľ | Databázový používateľ s právami iba k tejto databáze. | Connection string, HeidiSQL. |
| Server | Adresa databázového servera v tvare IP:port, napríklad 203.0.113.20:3306. | Časť pred dvojbodkou je host, za dvojbodkou port. |
| Heslo | Heslo používateľa. Zobrazíte ho ikonou oka, ikonou vedľa skopírujete. | Connection string, HeidiSQL. |
| Povolený prístup z | Odkiaľ sa smie k databáze pripojiť. % = odkiaľkoľvek, inak jedna IP adresa. | % potrebujete, keď sa chcete pripojiť aj z počítača cez HeidiSQL. |
- Nové heslo vygeneruje nové heslo. Staré prestane fungovať, takže ho musíte zmeniť aj v
server.cfg. - Počet databáz je obmedzený podľa balíka, stav vidíte ako
Využito X z Y. - Keď sú Server, Používateľ alebo Povolený prístup z zakryté šrafovaným pruhom, je zapnutý režim streamu. Kliknite hore na Zobraziť údaje, alebo hodnotu skopírujte ikonou vedľa nej.
Zmazať maže aj dáta
Tlačidlo Zmazať databázu nenávratne odstráni aj so všetkými postavami a peniazmi hráčov. Zálohy v záložke Zálohy obsahujú iba súbory servera, databázu nie. Pred zmazaním si databázu vyexportujte (časť „Záloha databázy“).
Inštalácia oxmysql#
Ak ste server nasadili receptom txAdminu pre framework, oxmysql už máte a túto časť preskočte.
- Stiahnite najnovšie vydanie z GitHubu oxmysql (otvorí sa v novom okne) (súbor
oxmysql.zip, nie zdrojový kód). - Archív rozbaľte. Vznikne priečinok
oxmysqlso súboromfxmanifest.luaa podpriečinkamidist,lib,webalogger. - Nahrajte celý priečinok
oxmysqldoresourcesna serveri (podpriečinky vytvorte tlačidlom Nový priečinok, postup v návode FiveM resources).
Connection string#
oxmysql číta prihlasovacie údaje z premennej mysql_connection_string v server.cfg. Dá sa zapísať dvoma spôsobmi:
set mysql_connection_string "mysql://<UZIVATEL>:<HESLO>@<IP_DATABAZE>:<PORT>/<NAZEV_DATABAZE>"set mysql_connection_string "user=<UZIVATEL>;password=<HESLO>;host=<IP_DATABAZE>;port=<PORT>;database=<NAZEV_DATABAZE>"Použite iba jeden z riadkov. Pre heslo zo záložky Databázy je správna voľba prvý (URI) tvar, pretože si poradí so všetkými znakmi, ktoré sa v ňom objavujú (časť „Špeciálne znaky v hesle“). Za hodnoty v špicatých zátvorkách dosaďte údaje zo záložky Databázy, bez zátvoriek:
| Časť | Odkiaľ ju vziať |
|---|---|
<UZIVATEL> | Používateľ |
<HESLO> | Heslo |
<IP_DATABAZE> | Server, časť pred dvojbodkou (napríklad 203.0.113.20) |
<PORT> | Server, časť za dvojbodkou (zvyčajne 3306) |
<NAZEV_DATABAZE> | Názov databázy, presne ako je v zozname |
set– premenná zostane iba na serveri. Nikdy nepoužívajtesetranisets, heslo by sa poslalo hráčom alebo zverejnilo.mysql://– označuje prvý (URI) tvar. Druhý tvar sú dvojicekľúč=hodnotaoddelené bodkočiarkou.
Špeciálne znaky v hesle#
oxmysql reťazec nijako nedekóduje, takže zápis typu %40 namiesto @ nefunguje. Heslo vložte presne tak, ako je. Autori oxmysql všeobecne radia vyhnúť sa v hesle znakom ; , / ? : @ & = + $ #, prípadne prepnúť na druhý tvar zápisu. Podľa toho, ako oxmysql reťazec skutočne delí, platí:
| Heslo obsahuje | Použite |
|---|---|
iba písmená, číslice a znaky @ = + ! . ^ & $ , ; | URI tvar (mysql://…). Tieto znaky mu neprekážajú. Bodkočiarkový tvar sa však na = a ; rozdelí. |
: / ? alebo # | Bodkočiarkový tvar (user=…;password=…). URI tvar sa na týchto znakoch rozdelí. |
" | Ani jeden. Úvodzovka ukončí hodnotu v server.cfg. |
: / ? # a zároveň = alebo ; | Kliknite v záložke Databázy na Nové heslo a použite nové heslo. |
Heslá, ktoré vytvára záložka Databázy, obsahujú okrem písmen a číslic iba znaky, s ktorými si URI tvar poradí (napríklad @, =, +, !, .). Preto pri nich používajte URI tvar a heslo neupravujte.
Kam riadok dať#
Riadok so set mysql_connection_string musí byť v server.cfg pred riadkom ensure oxmysql a oxmysql musí štartovať pred všetkými skriptmi, ktoré databázu používajú:
set mysql_connection_string "mysql://<UZIVATEL>:<HESLO>@<IP_DATABAZE>:3306/<NAZEV_DATABAZE>"
ensure oxmysql
ensure ox_lib
ensure es_extendedImport SQL v HeidiSQL#
Skripty často obsahujú súbor .sql, ktorý vytvorí potrebné tabuľky. Import cez HeidiSQL:
Stiahnite a nainštalujte HeidiSQL (otvorí sa v novom okne).
Spustite ho. V okne Session manager kliknite vľavo dole na New.
Vyplňte záložku Settings:
Pole Čo zadať Network type MariaDB or MySQL (TCP/IP)Hostname / IP IP adresa z poľa Server (časť pred dvojbodkou) User Používateľ zo záložky Databázy Password Heslo zo záložky Databázy Port Port z poľa Server (časť za dvojbodkou), zvyčajne 3306Databases Názov databázy (voliteľné, HeidiSQL potom ukáže iba ju) Kliknite na Open. Vľavo uvidíte svoju databázu.
Kliknite na databázu, aby bola vybraná (aktívna).
V menu zvoľte File › Run SQL file… a vyberte súbor
.sql.Pri voľbe Encoding zvoľte
UTF-8a potvrďte.HeidiSQL príkazy rovno vykoná. Po dokončení stlačte F5 a v databáze uvidíte nové tabuľky.
Keď sa HeidiSQL nepripojí, skontrolujte, že Povolený prístup z je % (alebo vaša verejná IP adresa).
Ladenie dopytov#
| Nastavenie | Čo robí | Odporúčaná hodnota |
|---|---|---|
set mysql_slow_query_warning 300 | Varuje v konzole, keď dopyt trvá dlhšie než zadaný počet milisekúnd. Predvolená hodnota je 200. | Riadok nepridávajte, predvolená hodnota stačí. Vyššie číslo zadajte iba vtedy, keď vás varovania zahlcujú. Pomalé dopyty pri štarte servera neprekážajú. |
set mysql_debug true | Vypíše do konzoly všetky dopyty. Dá sa obmedziť iba na vybrané resources (zápis je v dokumentácii oxmysql). | Iba pri hľadaní chyby, potom vypnúť. |
set mysql_ui true | Zapne v hre príkaz /mysql s prehľadom dopytov a ich časov (vyžaduje oprávnenie command.mysql). | Iba pri vývoji alebo s malým počtom hráčov. |
Záloha databázy#
Záložka Zálohy zálohuje iba súbory servera. Databázu zálohujte zvlášť:
- V HeidiSQL kliknite pravým tlačidlom na databázu a zvoľte Export database as SQL.
- Zaškrtnite tabuľky (všetky), pri Data nechajte
Insert. - Pri Output zvoľte
Single .sql file, vyberte súbor a kliknite na Export.
Zálohu robte pred aktualizáciou frameworku, pred inštaláciou veľkého skriptu a pravidelne (napríklad raz týždenne). Obnova je import súboru postupom „Import SQL v HeidiSQL“.
Overenie#
Po reštarte servera nájdete v konzole riadok:
[<VERZE_DATABAZE>] Database server connection established!V hranatých zátvorkách je verzia databázového servera (napríklad s označením MariaDB). Potom už frameworky hlásia načítanie bez chýb databázy.
Keď niečo nefunguje#
Unable to establish a connection to the database (ER_ACCESS_DENIED_ERROR)! #
Nesprávny používateľ alebo heslo. Skopírujte ich znova zo záložky Databázy. Skontrolujte, že heslo nemáte v bodkočiarkovom tvare so znakom = (použite URI tvar, tabuľka vyššie), a že ste ho nijako nekódovali (%40 namiesto @). Pomôže aj Nové heslo.
Unable to establish a connection to the database (ECONNREFUSED)! alebo (ETIMEDOUT)#
Nesprávna adresa alebo port. Do connection stringu patrí IP adresa a port z poľa Server, nie localhost.
Unable to establish a connection to the database (ER_BAD_DB_ERROR)!#
Databáza s týmto názvom neexistuje. Odpíšte Názov databázy presne zo zoznamu.
mysql_connection_string structure was invalid#
Reťazec v URI tvare sa nedá rozobrať. Skontrolujte, že začína mysql:// a obsahuje @, a že heslo nemá znaky /, ? alebo #.
Table '….users' doesn't exist (alebo iná tabuľka)#
Chýbajú tabuľky skriptu alebo frameworku. Naimportujte jeho súbor .sql.
Can't create table … (Foreign Key Constraint is incorrectly formed)#
Nová tabuľka má inú znakovú sadu (collation) než existujúce. Na koniec príkazov CREATE TABLE v súbore .sql doplňte DEFAULT CHARSET=utf8mb4 COLLATE= a import zopakujte.
Po obnove zálohy chýbajú dáta hráčov#
Zálohy v záložke Zálohy obsahujú iba súbory servera, databázu nie. Obnova zálohy preto databázu nevráti. Dáta z databázy obnovíte z vlastného exportu .sql.
Zhrnutie
- Databázu vytvoríte v záložke Databázy. Host a port sú v poli Server, názov kopírujte zo zoznamu.
set mysql_connection_string "…"patrí doserver.cfgpredensure oxmysql, vždy cezset.- Heslo zo záložky Databázy patrí do URI tvaru (
mysql://…) presne tak, ako je. Bodkočiarkový tvar iba pre heslá so znakmi:/?#. URL kódovanie nefunguje. - SQL importujete v HeidiSQL cez File › Run SQL file…, databázu zálohujete cez Export database as SQL.