Установка MySQL или MariaDB на Ubuntu Server — терминал и домашний серверный угол

MySQL или MariaDB на Ubuntu Server: установка, безопасность, настройка и здравый выбор

25.01.2026

Это ещё один рабочий вариант установки: MySQL или MariaDB на Ubuntu Server — без лишней магии, с безопасной конфигурацией и проверками.

Когда на сервере появляется база данных, начинается взрослая жизнь: права, бэкапы, обновления, лимиты, предсказуемость. На Ubuntu у тебя есть два реальных пути — MySQL (Oracle) или MariaDB (форк, community-driven). Оба — нормальные. Но различия важны, потому что “а потом разберёмся” обычно означает “а потом горело”.

Что выбрать: MySQL или MariaDB

MySQL чаще выбирают, когда нужна максимальная совместимость с облачными сервисами и экосистемой “вокруг MySQL”, или когда ты хочешь именно Oracle-ветку с её поведением, репликацией и документацией MySQL.

MariaDB часто выбирают как “Linux-friendly дефолт”: на Ubuntu она ставится проще, живёт предсказуемо, и в бытовых кейсах (WordPress, панели, игровые сервисы, боты, веб-приложения) закрывает 99% потребностей. Но важно помнить: MariaDB и MySQL — не один продукт. Версии, фичи, поведение оптимизатора и системные таблицы местами расходятся.

Эвристика простая: если у тебя есть требование “именно MySQL” (софт/вендор/поддержка) — ставь MySQL. Если требования нет — MariaDB на Ubuntu обычно проще и спокойнее.

Подготовка системы

Сначала обновим индексы пакетов и поставим базовые утилиты:

sudo apt update
sudo apt -y upgrade

sudo apt -y install ca-certificates gnupg lsb-release curl unzip htop

Проверь имя хоста и время (для TLS и логов это внезапно важно):

hostnamectl
timedatectl

Вариант A: установка MariaDB из репозиториев Ubuntu

Это самый прямой путь.

Установка MariaDB

sudo apt -y install mariadb-server mariadb-client

Проверим, что сервис поднялся:

systemctl status mariadb --no-pager -l

Быстрый чек версии:

mariadb --version

Базовая безопасность (обязательно)

На MariaDB на Ubuntu root часто входит через unix_socket (без пароля) — это нормально и безопасно для локального сервера. Важно понимать, что ты делаешь.

sudo mysql_secure_installation

Рекомендую включить: удаление анонимных пользователей, запрет удалённого логина root, удаление тестовой базы, перезагрузку привилегий.

Создаём отдельного пользователя под приложения

Никогда не давай приложению root. Никогда.

sudo mariadb
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'app'@'localhost' IDENTIFIED BY 'SOME_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON appdb.* TO 'app'@'localhost';

FLUSH PRIVILEGES;
quit;

Проверка логина:

mariadb -u app -p -D appdb

Вариант B: установка MySQL (Oracle) на Ubuntu

На Ubuntu MySQL ставится так же просто, но нюансы есть.

Установка MySQL

sudo apt -y install mysql-server mysql-client

Проверим сервис:

systemctl status mysql --no-pager -l

Проверим версию:

mysql --version

Базовая безопасность

sudo mysql_secure_installation

Дальше логика та же: отдельный пользователь, отдельная база.

sudo mysql
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'app'@'localhost' IDENTIFIED BY 'SOME_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON appdb.* TO 'app'@'localhost';

FLUSH PRIVILEGES;
quit;

Общая настройка: кодировка, доступ, сеть

UTF-8 по-взрослому: utf8mb4

Если ты ставишь базу под WordPress/ботов/игровые панели — utf8mb4 нужен почти всегда (эмодзи, расширенные символы, нормальная совместимость).

Проверка текущих параметров:

mysql -e "SHOW VARIABLES LIKE 'character_set_%';"
mysql -e "SHOW VARIABLES LIKE 'collation%';"

Если нужно зафиксировать utf8mb4 по умолчанию — добавим отдельный конфиг (и не ломаем пакетный):

Для MariaDB: /etc/mysql/mariadb.conf.d/60-charset.cnf
Для MySQL: /etc/mysql/mysql.conf.d/60-charset.cnf

sudo nano /etc/mysql/mariadb.conf.d/60-charset.cnf
# или
sudo nano /etc/mysql/mysql.conf.d/60-charset.cnf
[mysqld]
character-set-server = utf8mb4
collation-server     = utf8mb4_unicode_ci

[client]
default-character-set = utf8mb4

Перезапуск:

sudo systemctl restart mariadb || sudo systemctl restart mysql

Слушать только localhost (рекомендовано по умолчанию)

Если база нужна только локальным сервисам — лучший дизайн: слушать 127.0.0.1 и не выставлять MySQL наружу.

Проверим bind-address:

# MariaDB
sudo grep -R "bind-address" -n /etc/mysql/mariadb.conf.d | head

# MySQL
sudo grep -R "bind-address" -n /etc/mysql/mysql.conf.d | head

Если нужно зафиксировать:

[mysqld]
bind-address = 127.0.0.1

Если нужен удалённый доступ — делай через SSH туннель

Открывать MySQL в интернет — это проситься в логи чужих брутфорсеров. Схема простая: база слушает localhost, а ты подключаешься через туннель.

ssh -L 3307:127.0.0.1:3306 user@your-server

Дальше подключаешься к 127.0.0.1:3307.

Бэкапы: без них база — временное явление

Логический бэкап (mysqldump / mariadb-dump)

mkdir -p ~/db-backups
TS=$(date +%F-%H%M%S)

mysqldump --single-transaction --routines --triggers --events \
  -u app -p appdb | gzip > ~/db-backups/appdb-$TS.sql.gz

Проверка, что архив не пустой:

ls -lh ~/db-backups | tail
zcat ~/db-backups/appdb-$TS.sql.gz | head

Восстановление:

zcat ~/db-backups/appdb-$TS.sql.gz | mysql -u app -p appdb

Мини-тюнинг: чтобы не умереть от дефолтов

На небольших серверах дефолты обычно “вроде нормально”. На живых проектах — нет. Быстрые метрики прямо сейчас:

mysql -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';"
mysql -e "SHOW GLOBAL STATUS LIKE 'Queries';"
mysql -e "SHOW VARIABLES LIKE 'max_connections';"
mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

Если сервер под веб/панели/игровые базы — главный рычаг обычно InnoDB buffer pool. Но ставить “на глаз” опасно: лучше смотреть по памяти сервера и реальной нагрузке.

Типовые проверки и диагностика

Порт слушается?

sudo ss -lntp | grep 3306 || true

Логи сервиса:

sudo journalctl -u mariadb -n 200 --no-pager || sudo journalctl -u mysql -n 200 --no-pager

Проверка входа локально:

mysql -u app -p -e "SELECT 1;"