Установка MySQL на VPS с Ubuntu 24.04: инструкция

Сайты и веб-серверы
Установка MySQL на VPS с Ubuntu 24.04: инструкция

Установка MySQL на VPS — первое, что приходится делать после веб-сервера: без базы данных не заработает ни WordPress, ни интернет-магазин, ни самописное приложение. Хорошая новость в том, что в Ubuntu 24.04 LTS MySQL 8.0 ставится из штатного репозитория за пару минут. Плохая — что установка «по умолчанию» оставляет открытые вопросы: root без пароля, отсутствие отдельных пользователей, настройки памяти под сервер, которого у вас нет. В этой инструкции разберём весь путь: установка MySQL на Ubuntu, защита через mysql_secure_installation, создание базы и пользователя, настройка под ваш объём RAM и автоматические бэкапы. Все команды проверены на Ubuntu 24.04 и выполняются от пользователя с sudo.

Что понадобится перед установкой

Для комфортной работы MySQL 8 вместе с веб-сервером и PHP нужен VPS минимум с 2 ГБ RAM, а лучше — с запасом: базе выгодно держать «горячие» данные в памяти, и чем больше буфер, тем меньше обращений к диску. Второй фактор — скорость диска: MySQL постоянно пишет журналы транзакций, поэтому NVMe-накопитель даёт ощутимый выигрыш по сравнению с обычным SSD и тем более HDD.

Если сервера ещё нет, для типового сайта с базой данных подойдёт тариф Start у Cheap-Host: 6 vCPU, 8 ГБ RAM и 96 ГБ NVMe за 450 ₽/мес — этого хватает и на MySQL, и на Nginx с PHP-FPM. Сервер выдаётся за 45–60 секунд, так что к установке можно приступать почти сразу после оплаты.

Перед началом убедитесь, что:

  • вы подключены по SSH под пользователем с правами sudo (работать под root напрямую — плохая привычка);
  • система обновлена;
  • настроен файрвол — если ещё нет, начните с нашей инструкции по настройке UFW на Ubuntu.

Установка MySQL на Ubuntu 24.04

Обновляем индекс пакетов и систему:

sudo apt update && sudo apt upgrade -y

Ставим сервер MySQL:

sudo apt install mysql-server -y

В Ubuntu 24.04 из репозитория устанавливается MySQL 8.0 — актуальная стабильная ветка. Проверяем версию и состояние службы:

mysql --version
sudo systemctl status mysql

В выводе systemctl должно быть active (running). Включаем автозапуск при перезагрузке сервера:

sudo systemctl enable mysql

На этом установка формально закончена — но оставлять базу в таком виде нельзя. Переходим к защите.

Защита MySQL: mysql_secure_installation

В комплекте с MySQL идёт скрипт первичной защиты. Запускаем его от sudo:

sudo mysql_secure_installation

Скрипт задаст несколько вопросов. Рекомендуемые ответы:

  1. VALIDATE PASSWORD component — ответьте Y и выберите уровень 1 (MEDIUM): пароли пользователей должны будут содержать буквы разных регистров, цифры и спецсимволы.
  2. Remove anonymous users?Y. Анонимные учётки нужны только для тестов.
  3. Disallow root login remotely?Y. Root должен входить только локально.
  4. Remove test database?Y. Тестовая база в продакшене не нужна.
  5. Reload privilege tables now?Y, чтобы изменения применились сразу.

Важный нюанс Ubuntu: root-пользователь MySQL здесь по умолчанию аутентифицируется через плагин auth_socket. Это значит, что войти под ним можно только командой sudo mysql с самого сервера — пароль не спрашивается, но и удалённо этой учёткой воспользоваться невозможно. Это безопасная схема, менять её не нужно. Для приложений мы создадим отдельных пользователей.

Создание базы данных и пользователя

Никогда не подключайте сайт к базе под root. Правильная схема: одна база — один пользователь с правами только на неё. Входим в консоль MySQL:

sudo mysql

Создаём базу с корректной кодировкой (utf8mb4 поддерживает полный Unicode, включая эмодзи):

CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Создаём пользователя и выдаём ему права только на эту базу:

CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'Slozhny-Parol_2026!';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Ограничение @'localhost' означает, что подключиться этот пользователь сможет только с самого сервера — именно так работают сайты, где база и приложение живут на одном VPS. Проверяем вход:

mysql -u myapp_user -p myapp

Если консоль открылась — учётка работает. Эти же логин и пароль вы укажете в конфигурации сайта, например при установке WordPress на VPS или сборке LEMP-стека.

Первичная настройка MySQL под ваш объём RAM

Конфигурация по умолчанию рассчитана на минимальное потребление памяти, а не на производительность. Главный параметр, который стоит поправить, — innodb_buffer_pool_size: это кеш данных и индексов InnoDB. Чем он больше, тем реже MySQL ходит на диск.

Ориентиры по размеру буфера:

RAM сервераСценарийinnodb_buffer_pool_size
2 ГБMySQL + веб-сервер + PHP512M
8 ГБMySQL + веб-сервер + PHP2G
8 ГБТолько MySQL (отдельный сервер БД)4G–5G
16 ГБMySQL + остальной стек4G–6G

Открываем конфиг:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

В секцию [mysqld] добавляем (пример для VPS с 8 ГБ RAM, где рядом работают Nginx и PHP):

innodb_buffer_pool_size = 2G
innodb_log_buffer_size = 32M
max_connections = 150

Перезапускаем службу и убеждаемся, что она поднялась:

sudo systemctl restart mysql
sudo systemctl status mysql

Параметр max_connections держите разумным: каждое соединение потребляет память, и 150 одновременных подключений для сайта — это уже серьёзная нагрузка. Если память на сервере в дефиците и MySQL периодически убивает OOM-killer, посмотрите статью про настройку swap на VPS — своп не заменит RAM, но спасёт от аварийных падений.

Доступ извне: когда открывать и как не подставиться

По умолчанию MySQL в Ubuntu слушает только локальный интерфейс — за это отвечает строка bind-address = 127.0.0.1 в конфиге. Для сайта на том же сервере это идеальный режим: снаружи база недоступна в принципе.

Открывать порт 3306 наружу стоит только в одном случае — когда к базе подключается другой ваш сервер (например, приложение и БД разнесены по разным VPS). Тогда:

  1. В mysqld.cnf замените bind-address на IP-адрес, на котором сервер должен принимать подключения (или 0.0.0.0, если интерфейсов несколько).
  2. Создайте пользователя с привязкой к конкретному IP клиента: CREATE USER 'myapp_user'@'203.0.113.10' IDENTIFIED BY '...';
  3. Откройте порт в UFW только для этого адреса: sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp

Порт 3306, открытый всему интернету, сканеры находят за часы — дальше начинается перебор паролей и попытки эксплуатации. Правило простое: нет явной причины открывать — не открывайте.

Бэкапы: mysqldump по расписанию

База без бэкапов — это данные, которые вы согласны потерять. Минимально достаточная схема для баз до нескольких десятков гигабайт — ежедневный логический дамп:

mysqldump --single-transaction -u myapp_user -p myapp | gzip > /var/backups/myapp-$(date +%F).sql.gz

Ключ --single-transaction снимает согласованный снимок InnoDB-таблиц без блокировки записи — сайт продолжит работать во время дампа. Для автоматизации создайте файл с учётными данными ~/.my.cnf (права 600), чтобы не хранить пароль в скриптах, и добавьте задачу в cron на ночное время. Восстановление из дампа — одной командой:

gunzip < /var/backups/myapp-2026-07-17.sql.gz | mysql -u myapp_user -p myapp

Хранить копии только на том же VPS — половина дела: при отказе диска пропадёт и база, и бэкап. Как выстроить полноценную схему хранения по правилу 3-2-1, мы разбирали в статье о резервном копировании VPS.

FAQ

Какая версия MySQL ставится на Ubuntu 24.04 из репозитория?

Команда apt install mysql-server устанавливает MySQL 8.0 — актуальную стабильную ветку. Она получает обновления безопасности вместе с системой через apt upgrade, поэтому подключать сторонние репозитории для типового проекта не нужно.

Почему sudo mysql пускает без пароля — это дыра в безопасности?

Нет. В Ubuntu root-пользователь MySQL по умолчанию использует плагин auth_socket: вход возможен только локально и только из-под системного root. Снаружи этим способом воспользоваться нельзя. Для приложений создавайте отдельных пользователей с паролями.

Сколько RAM нужно VPS для MySQL?

Для сайта или небольшого приложения достаточно 2–4 ГБ свободной памяти под MySQL, при этом innodb_buffer_pool_size ставят в 50–60% RAM на выделенном под базу сервере или 25–30% там, где рядом работают веб-сервер и PHP. VPS с 8 ГБ RAM хватает на весь стек с запасом.

Можно ли открыть MySQL для подключения извне?

Можно, но только при реальной необходимости: измените bind-address, создайте пользователя с ограничением по IP и откройте порт 3306 в файрволе только для конкретного адреса. Держать 3306 открытым для всего интернета нельзя — базу быстро найдут сканеры.

Чем делать бэкапы MySQL?

Для баз до нескольких десятков гигабайт достаточно mysqldump с ключом --single-transaction по расписанию cron. Дамп сжимайте gzip и храните копии не только на самом VPS, но и на другом сервере или в облачном хранилище.

Вывод

Полный цикл — установка MySQL, прогон mysql_secure_installation, создание изолированного пользователя, настройка буфера под RAM и бэкап по cron — занимает минут двадцать, а избавляет от большинства типовых проблем: от взлома через открытый порт до потери данных при сбое диска. База данных любит память и быстрый диск, поэтому экономить именно на этих ресурсах не стоит.

Если для проекта с MySQL вам нужен сервер — у Cheap-Host тариф Start от 450 ₽/мес: 6 vCPU, 8 ГБ RAM, 96 ГБ NVMe, KVM с полным root и безлимитный трафик. Сервер выдаётся за минуту, а при росте базы CPU, RAM и диск можно расширить без потери данных: cheap-host.onl.

Читайте также