MAATRIX / Блог / VPS для MySQL / MariaDB: тюнинг InnoDB

VPS для MySQL / MariaDB: тюнинг InnoDB

VPS для MySQL и MariaDB: установка и тюнинг InnoDB
Блог MAATRIX · 2026-07-07

MySQL и его форк MariaDB — рабочая лошадка большинства сайтов и CMS. Разберём установку, обязательную первичную защиту, тюнинг движка InnoDB под объём памяти, создание пользователей и бэкап. Команды подходят и для MySQL, и для MariaDB.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

MySQL или MariaDB: что ставить

MariaDB — форк MySQL, созданный после покупки MySQL корпорацией Oracle. Синтаксис и протокол совместимы, большинство приложений не заметят разницы. MariaDB чуть быстрее в ряде сценариев и полностью открыт, MySQL чуть впереди по некоторым корпоративным фичам.

Для типового сайта, WordPress или самописного приложения смело берите любую из них. Ниже команды универсальны: где нужно, отмечу отличие пакета.

  • Совместимый протокол — драйверы и ORM работают с обеими.
  • InnoDB по умолчанию — транзакционный движок, важен его тюнинг.
  • Диск решает — как и любая транзакционная СУБД, чувствительна к IOPS.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для MySQL

Установка и первичная защита

Ставим сервер из репозитория. Для MariaDB пакет называется mariadb-server, для MySQL — mysql-server.

sudo apt update
# MariaDB
sudo apt install -y mariadb-server
# либо MySQL
# sudo apt install -y mysql-server
sudo systemctl enable --now mariadb

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

sudo mysql_secure_installation

База, пользователь и права

Создаём базу под проект и отдельного пользователя с доступом только к ней. Хост localhost ограничивает вход локальной машиной.

sudo mysql <<'SQL'
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
SQL

Кодировка utf8mb4 — единственно правильный выбор: она поддерживает полный Unicode, включая эмодзи, в отличие от устаревшей utf8 (по факту трёхбайтной).

Тюнинг InnoDB под память

Главный параметр производительности InnoDB — buffer pool, кэш данных и индексов в памяти. Если рабочий набор помещается в него, база почти не ходит на диск для чтения. Настройки правим в отдельном файле конфигурации.

# /etc/mysql/mariadb.conf.d/99-tuning.cnf
[mysqld]
innodb_buffer_pool_size = 2G        # 50-70% RAM на выделенном сервере
innodb_log_file_size = 512M         # крупнее лог = реже чекпоинты
innodb_flush_log_at_trx_commit = 1  # 1 = максимальная надёжность
innodb_flush_method = O_DIRECT      # без двойного кэширования ОС
max_connections = 150
innodb_file_per_table = 1

Параметр innodb_flush_log_at_trx_commit — компромисс скорости и надёжности. Значение 1 гарантирует, что подтверждённая транзакция уже на диске (ACID), но требует быстрый диск. На NVMe накладные расходы fsync минимальны, поэтому держать 1 безопасно. Значение 2 быстрее, но при сбое ОС можно потерять последнюю секунду транзакций. После правок перезапускаем.

sudo systemctl restart mariadb
mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

Удалённый доступ и мониторинг

По умолчанию сервер слушает localhost. Если приложение на другом хосте, поменяйте bind-address и заведите пользователя с нужного IP, а не с '%'.

# в конфиге
bind-address = 0.0.0.0

# пользователь только с конкретного адреса
CREATE USER 'appuser'@'10.0.0.5' IDENTIFIED BY 'pass';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'10.0.0.5';

Живую картину нагрузки дают встроенные команды. Медленные запросы стоит логировать, чтобы находить кандидатов на индексы.

mysql -e "SHOW PROCESSLIST;"
# включить лог медленных запросов
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

Бэкап и выбор железа

Логический бэкап делают mysqldump. Для крупных баз удобнее физический бэкап через mariabackup/xtrabackup, но для большинства сайтов дампа достаточно.

# бэкап со сжатием
mysqldump --single-transaction appdb | gzip > /var/backups/appdb_$(date +%F).sql.gz
# восстановление
gunzip < /var/backups/appdb_2026-01-01.sql.gz | mysql appdb

Флаг --single-transaction снимает согласованный снимок без блокировки таблиц InnoDB. Под базу берите сервер с быстрым диском: buffer pool ускоряет чтение, но записи и чекпоинты всё равно идут на диск. AMD EPYC + NVMe у MAATRIX дают высокие IOPS и низкую латентность, поэтому InnoDB не тормозит на фиксации транзакций. Ежедневные бэкапы MAATRIX дублируют вашу схему резервирования, локации UK/США/РФ удобны для зарубежной аудитории, а оплата картой РФ, СБП, криптой или MAAT снимает барьер санкций.

  • Пропустили mysql_secure_installation — пустой пароль root и тестовая база наружу.
  • Маленький buffer pool — база читает с диска то, что должно жить в памяти.
  • utf8 вместо utf8mb4 — обрезаются эмодзи и часть символов.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для MySQL

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Насколько большим делать innodb_buffer_pool_size?

На выделенном под БД сервере — 50-70% RAM, чтобы рабочий набор помещался в память. Оставьте запас операционной системе и другим процессам.

mysqldump блокирует таблицы?

С флагом --single-transaction для InnoDB бэкап идёт без блокировки на согласованном снимке. Для MyISAM блокировка неизбежна, но этот движок сейчас почти не используют.

Можно ли мигрировать с MySQL на MariaDB?

Как правило да: дамп mysqldump из MySQL импортируется в MariaDB совместимой версии. Проверьте специфичные функции и типы, если использовали их.