Frameworky a většina skriptů ukládají postavy, peníze, auta a inventáře do databáze. FiveM k ní přistupuje přes resource oxmysql. Ukážeme, jak databázi vytvořit, správně připojit, naimportovat do ní SQL a zálohovat.
Co budete potřebovat
- FiveM server u StormHostu (nebo vlastní FiveM server s databází MariaDB)
- Oprávnění Databáze (vlastník ho má vždy)
- Program HeidiSQL (otevře se v novém okně) ve Windows (pro import a zálohu)
- Asi 20 minut
Proč oxmysql#
oxmysql je knihovna, přes kterou ostatní resources posílají dotazy do databáze MySQL nebo MariaDB. Nahrazuje starší mysql-async a ghmattimysql a umí jejich zápis, takže starší skripty fungují dál. Recepty txAdminu pro ESX, QBCore a Qbox ji instalují samy.
Autoři oxmysql doporučují databázi MariaDB. Většina skriptů FiveM vznikla pro MySQL 5.7 a s MySQL 8 mívá potíže (víc rezervovaných slov, výchozí hodnoty u sloupců JSON).
Vytvoření databáze#
- V zákaznické zóně otevřete Moje služby, klikněte na server a přejděte na záložku Databáze.
- Do pole Název databáze napište název, například
fivem. Povolená jsou písmena, číslice a podtržítko. - Do pole Povolený přístup z napište
%(výchozí hodnota). - Klikněte na Vytvořit databázi.
U databáze uvidíte tyto údaje:
| Údaj | Co znamená | Kam ho použijete |
|---|---|---|
| Název databáze | Skutečný název databáze. Může se lišit od toho, co jste napsali, proto ho vždy kopírujte ze seznamu. | Connection string, HeidiSQL, txAdmin (Database Name). |
| Uživatel | Databázový uživatel s právy jen k této databázi. | Connection string, HeidiSQL. |
| Server | Adresa databázového serveru ve tvaru IP:port, například 203.0.113.20:3306. | Část před dvojtečkou je host, za dvojtečkou port. |
| Heslo | Heslo uživatele. Zobrazíte ho ikonou oka, ikonou vedle zkopírujete. | Connection string, HeidiSQL. |
| Povolený přístup z | Odkud se smí k databázi připojit. % = odkudkoli, jinak jedna IP adresa. | % potřebujete, když se chcete připojit i z počítače přes HeidiSQL. |
- Nové heslo vygeneruje nové heslo. Staré přestane fungovat, takže ho musíte změnit i v
server.cfg. - Počet databází je omezený podle balíčku, stav vidíte jako
Využito X z Y. - Když jsou Server, Uživatel nebo Povolený přístup z zakryté šrafovaným pruhem, je zapnutý režim streamu. Klikněte nahoře na Zobrazit údaje, nebo hodnotu zkopírujte ikonou vedle ní.
Smazat maže i data
Tlačítko Smazat databázi nevratně odstraní i se všemi postavami a penězi hráčů. Zálohy v záložce Zálohy obsahují jen soubory serveru, databázi ne. Před smazáním si databázi vyexportujte (část „Záloha databáze“).
Instalace oxmysql#
Pokud jste server nasadili receptem txAdminu pro framework, oxmysql už máte a tuto část přeskočte.
- Stáhněte nejnovější vydání z GitHubu oxmysql (otevře se v novém okně) (soubor
oxmysql.zip, ne zdrojový kód). - Archiv rozbalte. Vznikne složka
oxmysqlse souboremfxmanifest.luaa podsložkamidist,lib,webalogger. - Nahrajte celou složku
oxmysqldoresourcesna serveru (podsložky vytvořte tlačítkem Nová složka, postup v návodu FiveM resources).
Connection string#
oxmysql čte přihlašovací údaje z proměnné mysql_connection_string v server.cfg. Jde ji zapsat dvěma způsoby:
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žijte jen jeden z řádků. Pro heslo ze záložky Databáze je správná volba první (URI) tvar, protože si poradí se všemi znaky, které se v něm objevují (část „Speciální znaky v hesle“). Za hodnoty ve špičatých závorkách dosaďte údaje ze záložky Databáze, bez závorek:
| Část | Odkud ji vzít |
|---|---|
<UZIVATEL> | Uživatel |
<HESLO> | Heslo |
<IP_DATABAZE> | Server, část před dvojtečkou (například 203.0.113.20) |
<PORT> | Server, část za dvojtečkou (obvykle 3306) |
<NAZEV_DATABAZE> | Název databáze, přesně jak je v seznamu |
set– proměnná zůstane jen na serveru. Nikdy nepoužívejtesetranisets, heslo by se poslalo hráčům nebo zveřejnilo.mysql://– označuje první (URI) tvar. Druhý tvar jsou dvojiceklíč=hodnotaoddělené středníkem.
Speciální znaky v hesle#
oxmysql řetězec nijak nedekóduje, takže zápis typu %40 místo @ nefunguje. Heslo vložte přesně tak, jak je. Autoři oxmysql obecně radí vyhnout se v hesle znakům ; , / ? : @ & = + $ #, případně přepnout na druhý tvar zápisu. Podle toho, jak oxmysql řetězec skutečně dělí, platí:
| Heslo obsahuje | Použijte |
|---|---|
jen písmena, číslice a znaky @ = + ! . ^ & $ , ; | URI tvar (mysql://…). Tyto znaky mu nevadí. Středníkový tvar se ale na = a ; rozdělí. |
: / ? nebo # | Středníkový tvar (user=…;password=…). URI tvar se na těchto znacích rozdělí. |
" | Ani jeden. Uvozovka ukončí hodnotu v server.cfg. |
: / ? # a zároveň = nebo ; | Klikněte v záložce Databáze na Nové heslo a použijte nové heslo. |
Hesla, která vytváří záložka Databáze, obsahují kromě písmen a číslic jen znaky, se kterými si URI tvar poradí (například @, =, +, !, .). Proto u nich používejte URI tvar a heslo neupravujte.
Kam řádek dát#
Řádek s set mysql_connection_string musí být v server.cfg před řádkem ensure oxmysql a oxmysql musí startovat před všemi skripty, které databázi 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í soubor .sql, který vytvoří potřebné tabulky. Import přes HeidiSQL:
Stáhněte a nainstalujte HeidiSQL (otevře se v novém okně).
Spusťte ho. V okně Session manager klikněte vlevo dole na New.
Vyplňte záložku Settings:
Pole Co zadat Network type MariaDB or MySQL (TCP/IP)Hostname / IP IP adresa z pole Server (část před dvojtečkou) User Uživatel ze záložky Databáze Password Heslo ze záložky Databáze Port Port z pole Server (část za dvojtečkou), obvykle 3306Databases Název databáze (volitelné, HeidiSQL pak ukáže jen ji) Klikněte na Open. Vlevo uvidíte svou databázi.
Klikněte na databázi, aby byla vybraná (aktivní).
V menu zvolte File › Run SQL file… a vyberte soubor
.sql.U volby Encoding zvolte
UTF-8a potvrďte.HeidiSQL příkazy rovnou provede. Po dokončení stiskněte F5 a v databázi uvidíte nové tabulky.
Když se HeidiSQL nepřipojí, zkontrolujte, že Povolený přístup z je % (nebo vaše veřejná IP adresa).
Ladění dotazů#
| Nastavení | Co dělá | Doporučená hodnota |
|---|---|---|
set mysql_slow_query_warning 300 | Varuje v konzoli, když dotaz trvá déle než zadaný počet milisekund. Výchozí hodnota je 200. | Řádek nepřidávejte, výchozí hodnota stačí. Vyšší číslo zadejte jen tehdy, když vás varování zahlcují. Pomalé dotazy při startu serveru nevadí. |
set mysql_debug true | Vypíše do konzole všechny dotazy. Jde omezit jen na vybrané resources (zápis je v dokumentaci oxmysql). | Jen při hledání chyby, pak vypnout. |
set mysql_ui true | Zapne ve hře příkaz /mysql s přehledem dotazů a jejich časů (vyžaduje oprávnění command.mysql). | Jen při vývoji nebo s malým počtem hráčů. |
Záloha databáze#
Záložka Zálohy zálohuje jen soubory serveru. Databázi zálohujte zvlášť:
- V HeidiSQL klikněte pravým tlačítkem na databázi a zvolte Export database as SQL.
- Zaškrtněte tabulky (všechny), u Data nechte
Insert. - U Output zvolte
Single .sql file, vyberte soubor a klikněte na Export.
Zálohu dělejte před aktualizací frameworku, před instalací velkého skriptu a pravidelně (například jednou týdně). Obnova je import souboru postupem „Import SQL v HeidiSQL“.
Ověření#
Po restartu serveru najdete v konzoli řádek:
[<VERZE_DATABAZE>] Database server connection established!V hranatých závorkách je verze databázového serveru (například s označením MariaDB). Pak už frameworky hlásí načtení bez chyb databáze.
Když něco nefunguje#
Unable to establish a connection to the database (ER_ACCESS_DENIED_ERROR)! #
Špatný uživatel nebo heslo. Zkopírujte je znovu ze záložky Databáze. Zkontrolujte, že heslo nemáte ve středníkovém tvaru se znakem = (použijte URI tvar, tabulka výše), a že jste ho nijak nekódovali (%40 místo @). Pomůže i Nové heslo.
Unable to establish a connection to the database (ECONNREFUSED)! nebo (ETIMEDOUT)#
Špatná adresa nebo port. Do connection stringu patří IP adresa a port z pole Server, ne localhost.
Unable to establish a connection to the database (ER_BAD_DB_ERROR)!#
Databáze s tímto názvem neexistuje. Opište Název databáze přesně ze seznamu.
mysql_connection_string structure was invalid#
Řetězec v URI tvaru nejde rozebrat. Zkontrolujte, že začíná mysql:// a obsahuje @, a že heslo nemá znaky /, ? nebo #.
Table '….users' doesn't exist (nebo jiná tabulka)#
Chybí tabulky skriptu nebo frameworku. Naimportujte jeho soubor .sql.
Can't create table … (Foreign Key Constraint is incorrectly formed)#
Nová tabulka má jinou znakovou sadu (collation) než stávající. Na konec příkazů CREATE TABLE v souboru .sql doplňte DEFAULT CHARSET=utf8mb4 COLLATE= a import zopakujte.
Po obnově zálohy chybí data hráčů#
Zálohy v záložce Zálohy obsahují jen soubory serveru, databázi ne. Obnova zálohy proto databázi nevrátí. Data z databáze obnovíte z vlastního exportu .sql.
Shrnutí
- Databázi vytvoříte v záložce Databáze. Host a port jsou v poli Server, název kopírujte ze seznamu.
set mysql_connection_string "…"patří doserver.cfgpředensure oxmysql, vždy přesset.- Heslo ze záložky Databáze patří do URI tvaru (
mysql://…) přesně tak, jak je. Středníkový tvar jen pro hesla se znaky:/?#. URL kódování nefunguje. - SQL importujete v HeidiSQL přes File › Run SQL file…, databázi zálohujete přes Export database as SQL.