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 -yNa Rocky/AlmaLinux použij sudo dnf install mariadb-server -y. Poté službu
zapni:
sudo systemctl enable --now mariadbZabezpečení instalace
První věc po instalaci — nastavit root heslo a zahodit výchozí nastavení:
sudo mysql_secure_installationNa 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 -pCREATE 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.
# Puvodni bezpecna hodnota:
# bind-address = 127.0.0.1
# Poslouchani na vsech rozhranich:
bind-address = 0.0.0.0sudo systemctl restart mariadbbind-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ástroj | Kde běží |
|---|---|
| phpMyAdmin | Web v prohlížeči, na serveru |
| HeidiSQL | Desktop pro Windows, přes SSH tunel |
| DBeaver | Desktop 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.sqlPř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.gzObnova 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.sqlKomprimovaná záloha:
gunzip < mojedb.sql.gz | mysql -u root -p mojedbObnova 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.