MySQL и MariaDB: установка и первая база
Установка сервера баз на VDS, безопасная первичная настройка, создание базы и пользователя, проверка подключения и первые ошибки.
Обновлено 23 августа 2026 г.
MySQL и его совместимая ветка MariaDB — то, на чём работает большинство сайтов на PHP. Команды и клиент у них одинаковые, различия начинаются в тонкой настройке.
Установка
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
Если нужен именно MySQL от Oracle, ставьте mysql-server из его официального репозитория. Служба будет называться mysql.
Сразу закройте базовые дыры:
mariadb-secure-installation
Скрипт попросит задать пароль root, удалить анонимных пользователей, запретить удалённый вход root и снести тестовую базу. Отвечайте «да» на всё.
База и пользователь
Не работайте приложением от root — заведите отдельного пользователя на каждый проект:
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'длинный-случайный-пароль';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
Кодировка utf8mb4 обязательна: старая utf8 в MySQL хранит только три байта на символ и ломается на эмодзи и части символов.
Проверка:
mariadb -u shop -p shop -e "SELECT 1;"
Подробнее о правах — пользователи и права.
Первичная настройка
Настройки лежат в /etc/mysql/mariadb.conf.d/50-server.cnf или /etc/my.cnf.d/. Минимум, что стоит поправить сразу:
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
bind-address = 127.0.0.1 оставляет базу доступной только локально. Если приложение на этой же машине — так и должно быть. Если база нужна снаружи, читайте удалённое подключение прежде, чем что-то менять.
Размер буферного пула подбирается по ступени — см. настройку памяти.
После правки: systemctl restart mariadb.
Частые ошибки
| Симптом | Причина | Что делать |
|---|---|---|
Access denied for user | Неверный пароль или запись пользователя привязана к другому хосту | Проверьте SELECT user, host FROM mysql.user; |
Can't connect through socket | Служба не запущена | systemctl status mariadb, смотрите journalctl -u mariadb |
Too many connections | Приложение не закрывает соединения | Пул на стороне приложения, затем max_connections |
| Крякозябры в тексте | Разные кодировки базы и соединения | Приведите всё к utf8mb4 |
| База не стартует после перезагрузки | Служба не в автозапуске | systemctl enable mariadb |
Автоматических резервных копий машины нет. Настройте дамп сразу после первой рабочей таблицы — резервные копии баз. Диск NVMe быстрый, но он один.