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

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

Блог MAATRIX · 2026-07-07

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

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\n# MariaDB\nsudo apt install -y mariadb-server\n# либо MySQL\n# sudo apt install -y mysql-server\nsudo systemctl enable --now mariadb
', 'Сразу после установки обязательно прогоните мастер защиты: он задаёт пароль root, удаляет анонимных пользователей и тестовую базу, закрывает удалённый вход root.', '
sudo mysql_secure_installation
']

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

['Создаём базу под проект и отдельного пользователя с доступом только к ней. Хост localhost ограничивает вход локальной машиной.', "
sudo mysql <<'SQL'\nCREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_password_here';\nGRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';\nFLUSH PRIVILEGES;\nSQL
", 'Кодировка utf8mb4 — единственно правильный выбор: она поддерживает полный Unicode, включая эмодзи, в отличие от устаревшей utf8 (по факту трёхбайтной).']

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

['Главный параметр производительности InnoDB — buffer pool, кэш данных и индексов в памяти. Если рабочий набор помещается в него, база почти не ходит на диск для чтения. Настройки правим в отдельном файле конфигурации.', '
# /etc/mysql/mariadb.conf.d/99-tuning.cnf\n[mysqld]\ninnodb_buffer_pool_size = 2G        # 50-70% RAM на выделенном сервере\ninnodb_log_file_size = 512M         # крупнее лог = реже чекпоинты\ninnodb_flush_log_at_trx_commit = 1  # 1 = максимальная надёжность\ninnodb_flush_method = O_DIRECT      # без двойного кэширования ОС\nmax_connections = 150\ninnodb_file_per_table = 1
', 'Параметр innodb_flush_log_at_trx_commit — компромисс скорости и надёжности. Значение 1 гарантирует, что подтверждённая транзакция уже на диске (ACID), но требует быстрый диск. На NVMe накладные расходы fsync минимальны, поэтому держать 1 безопасно. Значение 2 быстрее, но при сбое ОС можно потерять последнюю секунду транзакций. После правок перезапускаем.', '
sudo systemctl restart mariadb\nmysql -e "SHOW VARIABLES LIKE \'innodb_buffer_pool_size\';"
']

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

["По умолчанию сервер слушает localhost. Если приложение на другом хосте, поменяйте bind-address и заведите пользователя с нужного IP, а не с '%'.", "
# в конфиге\nbind-address = 0.0.0.0\n\n# пользователь только с конкретного адреса\nCREATE USER 'appuser'@'10.0.0.5' IDENTIFIED BY 'pass';\nGRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'10.0.0.5';
", 'Живую картину нагрузки дают встроенные команды. Медленные запросы стоит логировать, чтобы находить кандидатов на индексы.', '
mysql -e "SHOW PROCESSLIST;"\n# включить лог медленных запросов\nSET GLOBAL slow_query_log = \'ON\';\nSET GLOBAL long_query_time = 1;
']

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

['Логический бэкап делают mysqldump. Для крупных баз удобнее физический бэкап через mariabackup/xtrabackup, но для большинства сайтов дампа достаточно.', '
# бэкап со сжатием\nmysqldump --single-transaction appdb | gzip > /var/backups/appdb_$(date +%F).sql.gz\n# восстановление\ngunzip < /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

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

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

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

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

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

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

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