MySQL-i või MariaDB paigaldamine Ubuntule — juhend
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 bashSkripti 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.