MySQL un MariaDB uzstādīšana Ubuntu: pilna pamācība
Palaist serverī ar vienu komandu (vispirms pārbaudiet skripta saturu zemāk):
curl -sSL https://cp.lv/scripts/ustanovit-mysql-mariadb.sh | sudo bash…vai ar wget:
wget -qO- https://cp.lv/scripts/ustanovit-mysql-mariadb.sh | sudo bashSkripta saturs ustanovit-mysql-mariadb.sh:
#!/usr/bin/env bash
# MySQL uzstādīšana, datubāzes un lietotāja izveide
set -e
export DEBIAN_FRONTEND=noninteractive
DB_NAME=app_db
DB_USER=app_user
DB_PASS='StrongPassword123!'
# 1. Servera uzstādīšana (MariaDB gadījumā nomainiet uz mariadb-server)
sudo apt-get update
sudo apt-get install -y mysql-server
sudo systemctl enable --now mysql
# 2. Datubāze utf8mb4 kodējumā un lietotājs ar tiesībām tikai uz to
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 "Gatavs: datubāze ${DB_NAME} un lietotājs ${DB_USER} izveidoti."
MySQL un ar to savietojamā MariaDB ir izplatītākās relāciju datubāzes tīmekļa lietotnēm. Komandas ir gandrīz identiskas, tāpēc pamācība der abām. Zemāk — uzstādīšana uz Ubuntu, aizsardzība un datubāzes izveide vietnei.
1. solis. Servera uzstādīšana
MySQL variants:
sudo apt update
sudo apt install mysql-server -y
MariaDB variants (vieglāka alternatīva, pilnībā savietojama):
sudo apt install mariadb-server -y
Ieslēdziet automātisko startu:
sudo systemctl enable --now mysql # MariaDB gadījumā: mariadb
Pārbaudiet statusu:
sudo systemctl status mysql
2. solis. Servera aizsardzība
Skripts mysql_secure_installation aizver tipiskās noklusējuma konfigurācijas nepilnības:
sudo mysql_secure_installation
Atbildiet šādi:
- Validate password plugin — pēc izvēles (ieslēdz paroļu sarežģītības pārbaudi).
- Set root password — iestatiet drošu root paroli.
- Remove anonymous users — Yes.
- Disallow root login remotely — Yes.
- Remove test database — Yes.
- Reload privilege tables — Yes.
3. solis. Pieteikšanās konsolē
Svaigā instalācijā root piesakās caur soketu bez paroles:
sudo mysql
Ja esat iestatījis paroli un vēlaties pieteikties parastajā veidā:
mysql -u root -p
4. solis. Datubāzes un lietotāja izveide
Izveidojiet datubāzi ar kodējumu utf8mb4 (emocijzīmju un visu valodu atbalsts) un atsevišķu lietotāju:
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;
Piešķiriet tiesības tikai vajadzīgajai datubāzei (app_db.*), nevis visām (*.*) — tas ir mazāko privilēģiju princips.
5. solis. Savienojuma pārbaude
mysql -u app_user -p app_db
Ievadiet paroli. Uzvedne mysql> nozīmē veiksmīgu pieteikšanos. Pārbaudiet datubāzu sarakstu:
SHOW DATABASES;
6. solis. Attālinātā piekļuve (pēc izvēles)
Ja aizmugursistēma darbojas citā serverī, izveidojiet lietotāju ar piesaisti konkrētai IP adresei un atļaujiet klausīšanos. Atveriet konfigurāciju redaktorā (nano, vim vai mcedit):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Sadaļā [mysqld] norādiet klausīšanās adresi:
bind-address = 10.0.0.5
Vai arī izveidojiet atsevišķu override failu ar vienu komandu — nokopējiet un ielīmējiet konsolē (MySQL nolasīs visus .cnf failus no kataloga):
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;
Atveriet portu tikai uzticamajam avotam:
sudo ufw allow from 10.0.0.10 to any port 3306
sudo systemctl restart mysql
Biežākie jautājumi
MySQL vai MariaDB — ko izvēlēties? Vairumam vietņu atšķirība nav jūtama. MariaDB ir mazliet vieglāka un pilnībā savietojama ar MySQL lietotnēm. Oracle MySQL piedāvā dažas korporatīvas funkcijas. SQL sintakse ir identiska.
Kāpēc root piesakās tikai ar sudo mysql?
Pēc noklusējuma tiek izmantota autentifikācija caur soketu (auth_socket). Lai ieslēgtu pieteikšanos ar paroli: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'parole';.
Kļūda «Access denied for user» — ko pārbaudīt?
Salīdziniet lietotājvārdu, hostu ('user'@'localhost' nav tas pats, kas 'user'@'%') un paroli. Hostam lietotāja ierakstā jāsakrīt ar savienojuma avotu.
Kāpēc vajadzīgs utf8mb4 kodējums?
Vecais utf8 MySQL glabā ne vairāk kā 3 baitus uz simbolu un neatbalsta emocijzīmes. utf8mb4 ir pilnvērtīgs UTF-8 — lietojiet to pēc noklusējuma.
Datubāzēm vajadzīgs ātrs disks un stabils resurss. MySQL un MariaDB derēs tarifi lapā VPS serveru noma un specializētais VPS datu bāzēm.