Skip to Content
🔥 Nová dokumentace BlazeHost.cz je online — prohlédnout

MySQL / MariaDB

MariaDB je otevřená náhrada za MySQL a mluví stejným jazykem. Většina aplikací i webů si s ní rozumí bez jediné změny.

Instalace MariaDB

sudo apt update sudo apt install mariadb-server -y

Na Rocky/AlmaLinux použij sudo dnf install mariadb-server -y. Poté službu zapni:

sudo systemctl enable --now mariadb

Zabezpečení instalace

První věc po instalaci — nastavit root heslo a zahodit výchozí nastavení:

sudo mysql_secure_installation

Na všechny otázky (odstranit anonymní uživatele, zakázat vzdálený root, smazat testovací databázi) odpověz ano.

Databáze a uživatel

Přihlas se a vytvoř databázi s vlastním uživatelem. Aplikace nikdy nemá běžet pod rootem.

sudo mysql -u root -p
CREATE DATABASE mojedb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'app'@'localhost' IDENTIFIED BY 'silne-heslo'; GRANT ALL PRIVILEGES ON mojedb.* TO 'app'@'localhost'; FLUSH PRIVILEGES;

utf8mb4 je jediné rozumné kódování. Klasické utf8 v MySQL neumí emoji ani část znaků a časem tě to kousne.

Uživatel 'app'@'localhost' se smí připojit jen z lokálu. Pro vzdálený přístup bys místo localhost uvedl konkrétní IP klienta.

Vzdálený přístup a bind-address

Ve výchozím stavu MariaDB poslouchá jen na 127.0.0.1. Pro připojení z jiného stroje musíš změnit bind-address.

/etc/mysql/mariadb.conf.d/50-server.cnf
# Puvodni bezpecna hodnota: # bind-address = 127.0.0.1 # Poslouchani na vsech rozhranich: bind-address = 0.0.0.0
sudo systemctl restart mariadb

bind-address = 0.0.0.0 bez firewallu vystaví databázi celému internetu a boti se do ní hned pustí. Buď ji nech na 127.0.0.1, nebo přístup na port 3306 omez firewallem jen na známé IP.

Správa přes GUI

Databázi nemusíš spravovat jen z terminálu:

NástrojKde běží
phpMyAdminWeb v prohlížeči, na serveru
HeidiSQLDesktop pro Windows, přes SSH tunel
DBeaverDesktop multiplatformní

HeidiSQL i DBeaver se umí připojit přes SSH tunel. Databázi pak necháš na 127.0.0.1 a nemusíš otevírat port 3306 do světa.

Záloha přes mysqldump

mysqldump --single-transaction -u root -p mojedb > mojedb.sql

Přepínač --single-transaction udělá konzistentní zálohu bez zamykání tabulek. Pro menší soubor rovnou komprimuj:

mysqldump --single-transaction -u root -p mojedb | gzip > mojedb.sql.gz

Obnova ze zálohy

# Nejdriv vytvor cilovou databazi, pokud neexistuje sudo mysql -u root -p -e "CREATE DATABASE mojedb;" # Nacti data mysql -u root -p mojedb < mojedb.sql

Komprimovaná záloha:

gunzip < mojedb.sql.gz | mysql -u root -p mojedb

Obnova zapisuje do existující databáze. Pokud tabulky už mají data, klidně je přepíšeš. Obnovuj do čerstvé databáze, dokud si nejsi jistý.

Tipy

  • Zálohuj přes cron. Ruční záloha je záloha, na kterou zapomeneš.
  • Heslo nepiš do příkazu (-pheslo). Je pak vidět v seznamu procesů.
  • Ověřuj obnovu. Záloha, kterou jsi nikdy nezkusil obnovit, není záloha.

Poznámka

Pro herní a webové služby dostaneš databázi hotovou v panelu. Vlastní MariaDB řešíš jen na VPS.

Související články