MySQL-i või MariaDB paigaldamine Ubuntule — juhend

14 Apr 2026 Autor: Roman Sokolov

Käivita serveris ühe käsuga (kontrolli enne skripti sisu allpool):

curl -sSL https://cp.lv/scripts/ustanovit-mysql-mariadb.sh | sudo bash

…või wgetiga:

wget -qO- https://cp.lv/scripts/ustanovit-mysql-mariadb.sh | sudo bash

Skripti sisu ustanovit-mysql-mariadb.sh:

#!/usr/bin/env bash
# Install MySQL, create a database and a user
set -e
export DEBIAN_FRONTEND=noninteractive

DB_NAME=app_db
DB_USER=app_user
DB_PASS='StrongPassword123!'

# 1. Install the server (use mariadb-server for MariaDB)
sudo apt-get update
sudo apt-get install -y mysql-server
sudo systemctl enable --now mysql

# 2. utf8mb4 database and a user with rights to that database only
sudo mysql << EOF
CREATE DATABASE IF NOT EXISTS ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';
FLUSH PRIVILEGES;
EOF

echo "Done: database ${DB_NAME} and user ${DB_USER} created."

MySQL ja sellega ühilduv MariaDB on veebirakenduste kõige levinumad relatsioonilised andmebaasisüsteemid. Käsud on peaaegu identsed, seega sobib juhend mõlemale. Allpool on paigaldus Ubuntule, serveri turvamine ja saidi jaoks andmebaasi loomine.

Samm 1. Serveri paigaldamine

MySQL-i jaoks:

sudo apt update
sudo apt install mysql-server -y

MariaDB jaoks (kergem alternatiiv, täielikult ühilduv):

sudo apt install mariadb-server -y

Luba automaatne käivitus:

sudo systemctl enable --now mysql   # MariaDB puhul: mariadb

Kontrolli olekut:

sudo systemctl status mysql

Samm 2. Serveri turvamine

Skript mysql_secure_installation sulgeb vaikekonfiguratsiooni tüüpilised augud:

sudo mysql_secure_installation

Vasta nii:

  • Validate password plugin — soovi korral (lülitab sisse paroolide keerukuse kontrolli).
  • Set root password — määra tugev root-parool.
  • Remove anonymous users — Yes.
  • Disallow root login remotely — Yes.
  • Remove test database — Yes.
  • Reload privilege tables — Yes.

Samm 3. Konsooli sisenemine

Värskes paigalduses siseneb root pistiku kaudu ilma paroolita:

sudo mysql

Kui määrasid parooli ja soovid siseneda tavapärasel viisil:

mysql -u root -p

Samm 4. Andmebaasi ja kasutaja loomine

Loo andmebaas kodeeringuga utf8mb4 (emojide ja kõigi keelte tugi) ning eraldi kasutaja:

CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Anna õigused ainult vajalikule andmebaasile (app_db.*), mitte kõigile (*.*) — see on vähimate privileegide põhimõte.

Samm 5. Ühenduse kontroll

mysql -u app_user -p app_db

Sisesta parool. Viip mysql> tähendab edukat sisselogimist. Kontrolli andmebaaside loendit:

SHOW DATABASES;

Samm 6. Kaugligipääs (valikuline)

Kui taustarakendus asub teises serveris, loo kasutaja konkreetse IP-ga sidumisega ja luba kuulamine. Ava konfiguratsioonifail redaktoris (nano, vim või mcedit):

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Sektsioonis [mysqld] määra kuulatav aadress:

bind-address = 10.0.0.5

Või loo eraldi ülekirjutusfail ühe käsuga — kopeeri ja kleebi konsooli (MySQL loeb kaustast kõik .cnf-failid):

sudo tee /etc/mysql/mysql.conf.d/zz-bind-address.cnf > /dev/null << 'EOF'
[mysqld]
bind-address = 10.0.0.5
EOF
CREATE USER 'app_user'@'10.0.0.10' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'10.0.0.10';
FLUSH PRIVILEGES;

Ava port ainult usaldusväärsele allikale:

sudo ufw allow from 10.0.0.10 to any port 3306
sudo systemctl restart mysql

Korduma kippuvad küsimused

MySQL või MariaDB — kumba valida? Enamiku saitide jaoks on vahe märkamatu. MariaDB on veidi kergem ja täielikult ühilduv MySQL-i jaoks kirjutatud rakendustega. Oracle’i MySQL-il on mõned ärikliendi funktsioonid. SQL-i süntaks on identne.

Miks siseneb root ainult käsuga sudo mysql? Vaikimisi kasutatakse pistiku kaudu autentimist (auth_socket). Parooliga sisselogimise lubamiseks: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'parool';.

Viga «Access denied for user» — mida kontrollida? Võrdle kasutajanime, hosti ('user'@'localhost''user'@'%') ja parooli. Kasutajakirje host peab kattuma ühenduse allikaga.

Milleks on vaja kodeeringut utf8mb4? Vana utf8 hoiab MySQL-is maksimaalselt 3 baiti sümboli kohta ega toeta emojisid. utf8mb4 on täisväärtuslik UTF-8, kasuta seda vaikimisi.

Andmebaasid vajavad kiiret ketast ja stabiilset ressurssi. MySQL-ile ja MariaDB-le sobivad paketid lehel VPS-i rent ja eriotstarbeline andmebaasi VPS.

Roman Sokolov