VDS · Базы данных

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 быстрый, но он один.