Установка и настройка MySQL на Ubuntu 18.04
Этот материал шаг за шагом показывает установку MySQL на Ubuntu 18.04, настройку базовой безопасности, управление службой и проверку работоспособности. Включены варианты аутентификации (auth_socket и mysql_native_password), примеры команд, рекомендации по безопасности и чек-листы для ролей.

Что такое MySQL — в двух словах: MySQL — это популярная реляционная СУБД с поддержкой SQL. Она хранит данные в таблицах и подходит для веб-приложений, аналитики и OLTP-нагрузок.
Важно: команды в примерах выполняются в терминале Ubuntu под пользователем с правами sudo. Сохраняйте пароли в безопасном хранилище.
Шаг 1: Установка клиента MySQL
Цель: иметь возможность подключаться к удалённому серверу MySQL и проверять соединение.
Установите клиент:
sudo apt install mysql-client -yПроверьте версию клиента, чтобы убедиться в успехе установки:
mysql -VОжидаемый тип вывода (пример):
mysql Ver 8.0.28-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))Подключение к удалённому серверу (пример):
mysql -u -p -h HOSTNAME_OR_IP Примечание: опция -p запросит ввод пароля в интерактивном режиме, что безопаснее, чем указывать пароль в командной строке.
Шаг 2: Установка сервера MySQL
Ubuntu 18.04 по умолчанию содержит в репозиториях MySQL 5.7. Если вам нужна другая версия (например, MySQL 8.0), рассмотрите официальный репозиторий MySQL или контейнеры.
Обновите список пакетов:
sudo apt updateУстановите сервер:
sudo apt install mysql-server -yПосле установки служба MySQL обычно запускается автоматически. Проверим её состояние (см. раздел «Управление службой»).
Альтернатива: если вы хотите последнюю стабильную версию без привязки к репозиторию Ubuntu, используйте официальный MySQL APT Repository (https://dev.mysql.com/downloads/repo/apt/) или запускайте MySQL в контейнере Docker.
Шаг 3: Базовая конфигурация безопасности
MySQL предоставляет утилиту безопасности, которая помогает убрать небезопасные настройки по умолчанию: удалённые root-логины, анонимные учётные записи, тестовые базы и т. п.
Запустите скрипт:
sudo mysql_secure_installationУтилита задаст несколько вопросов (Yes/No). Рекомендуемые ответы:
- Включите плагин проверки паролей (Validate Password) — Yes. Это поможет задать политику сложности.
- Задайте пароль для root — да (если ещё не задан).
- Удалите анонимных пользователей — Y.
- Отключите удалённый вход под root — Y.
- Удалите тестовые базы — Y.
- Перезагрузите таблицы привилегий — Y.
После установки пароля утилита покажет оценку силы пароля и предложит подтвердить продолжение.
Примечание: в старых версиях MySQL (до 5.7.6) требовалась ручная инициализация каталога данных. Для современных релизов инициализация обычно выполняется автоматически. При необходимости можно запустить инициализацию вручную:
mysqld --initializeШаг 4: Аутентификация пользователей и плагины
По умолчанию на некоторых системах root-аутентификация настроена через плагин auth_socket, который позволяет входить в MySQL без пароля, когда вы подключаетесь с локального UNIX‑пользователя root. Это удобно локально, но неудобно для удалённого доступа и автоматизированных сценариев.
Ниже — два распространённых варианта настройки аутентификации.
Вариант A — заставить root использовать пароль (mysql_native_password)
- Откройте MySQL от имени администратора:
sudo mysql- Посмотрите, какие плагины используются пользователями:
SELECT user, authentication_string, plugin, host FROM mysql.user;- Если root использует
auth_socket, переключите наmysql_native_passwordи задайте пароль:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPasswordHere';
FLUSH PRIVILEGES;- Проверьте изменения:
SELECT user, authentication_string, plugin, host FROM mysql.user;- Подключение как root затем выглядит так:
mysql -u root -pВажное замечание: mysql_native_password — это традиционный плагин для паролей. Новые инсталляции MySQL 8 могут использовать caching_sha2_password по умолчанию; он безопаснее и рекомендуется при поддержке клиентами.
Вариант B — создать выделённого административного пользователя
Если вы не хотите менять поведение root, создайте отдельного пользователя с нужными привилегиями:
sudo mysqlВнутри MySQL выполните:
CREATE USER 'ubuntu'@'localhost' IDENTIFIED BY 'StrongPasswordHere';
GRANT ALL PRIVILEGES ON *.* TO 'ubuntu'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;Этот подход даёт гибкость: root остаётся локальным пользователем, а административные действия выполняются через отдельный аккаунт.
Управление службой MySQL (systemctl)
В Ubuntu используйте systemd для управления службой mysql.
Включить автозапуск при старте системы:
sudo systemctl enable mysqlПроверить состояние:
sudo systemctl status mysql
# или
sudo systemctl status mysql.serviceЗапуск/остановка/перезапуск:
sudo systemctl start mysql
sudo systemctl stop mysql
sudo systemctl restart mysql
sudo systemctl reload mysqlЕсли служба не запускается, смотрите логи:
sudo journalctl -u mysql --since "1 hour ago"
sudo tail -n 200 /var/log/mysql/error.logТестирование и проверка работоспособности
Быстрые проверки после настройки:
- Локальное подключение:
mysql -u root -p -e "SELECT VERSION(), USER();"- Пинг сервера:
mysqladmin -u root -p ping- Проверка сетевого слушания (порт по умолчанию 3306):
ss -tulpen | grep 3306
# или
sudo netstat -plnt | grep 3306- Firewall (ufw) — открыть порт только при необходимости:
sudo ufw allow from to any port 3306 proto tcp
sudo ufw status numbered - Попробуйте подключение с удалённого хоста (если разрешено):
mysql -u ubuntu -p -h DB_HOST_IPКритерии приёмки (минимальные тесты):
- Служба запущена и отвечает на запросы.
- Локальный и (если нужно) удалённый доступ работают с ожидаемыми правами.
- Привилегии и политики паролей применены.
- Порта 3306 открыт только для доверенных адресов.
Рекомендации по безопасности и жёсткая установка
- Отключите удалённый вход под root и используйте привилегированные аккаунты с минимумом прав.
- В конфигурации
/etc/mysql/mysql.conf.d/mysqld.cnfукажитеbind-address = 127.0.0.1, если не нужен удалённый доступ. - Включите шифрование трафика (TLS) между клиентами и сервером.
- Настройте резервное копирование (mysqldump, Percona XtraBackup или логические/физические бэкапы).
- Регулярно обновляйте пакеты безопасности и применяйте патчи.
- Настройте аудит и мониторинг: slow query log, performance_schema, метрики SLI/SLO.
- Защитите сервер на уровне сети — VPN, приватные подсети, ACL.
- Используйте fail2ban для защиты от брутфорса по соединениям.
Альтернативные подходы и когда они уместны
- MariaDB — форк MySQL, совместим и часто используется как drop-in замена. Подходит, если требуется открытый стек с активной разработкой.
- Percona Server — фокус на производительности и расширенных возможностях для бэкапов и мониторинга.
- Запуск в контейнере Docker — быстрое развертывание и изоляция; удобен для тестов и CI.
- Управляемые базы данных (Amazon RDS, Google Cloud SQL, Azure Database) — подходят, если хотите снять с себя операции по обновлениям, бэкапам и масштабированию.
Контрпример: если у вас крупная распределённая архитектура с высокими требованиями к репликации, рассмотрите кластерные решения и прокси (ProxySQL, MySQL Group Replication, Galera) вместо одиночной инстанции.
Чек-листы по ролям
DBA:
- Проверить конфигурации
innodb_buffer_pool_size,max_connections. - Включить slow_query_log и оптимизировать медленные запросы.
- Настроить регулярные бэкапы и проверять их восстановление.
Системный администратор:
- Обеспечить обновления ОС и безопасность сети.
- Настроить мониторинг (CPU, RAM, диск, сеть).
- Управлять доступом через firewall и VPN.
Разработчик:
- Использовать отдельные учётные записи с ограниченными правами.
- Не хранить чувствительные данные в открытом виде; применять шифрование на уровне приложения.
- Тестировать миграции на staging перед production.
SOP: Быстрый план развёртывания (Playbook)
- Подготовка сервера: обновите пакеты
sudo apt update && sudo apt upgrade. - Установка MySQL:
sudo apt install mysql-server. - Запустить
sudo mysql_secure_installationи настроить политику паролей. - Настроить аутентификацию и создать сервисных пользователей.
- Настроить firewall и открыть порт 3306 только для доверенных IP.
- Включить бэкапы и мониторинг.
- Тесты: локальное и удалённое подключение, резервное восстановление.
Инцидент-руководство (Runbook)
Проблема: MySQL не запускается.
- Посмотреть статус:
sudo systemctl status mysql. - Логи:
sudo journalctl -u mysql -n 200иsudo tail -n 200 /var/log/mysql/error.log. - Проверить свободное место на диске:
df -h. - Проверить права каталога данных (обычно
/var/lib/mysql). - Попробовать перезапуск:
sudo systemctl restart mysql. - При повреждении данных — восстановить из последней корректной резервной копии.
Шпаргалка по командам (Cheat sheet)
- Установить клиент:
sudo apt install mysql-client -y - Установить сервер:
sudo apt install mysql-server -y - Запустить MySQL:
sudo systemctl start mysql - Проверить статус:
sudo systemctl status mysql - Подключиться:
mysql -u user -p -h host - Сменить плагин аутентификации:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd'; - Сохранить привилегии:
FLUSH PRIVILEGES; - Пинг сервера:
mysqladmin -u root -p ping
Сравнение на высоком уровне
- MySQL: стабильность, широкая экосистема, поддержка коммерческих функций в Oracle MySQL.
- MariaDB: активная open-source разработка, совместимость, некоторые расширения.
- Percona: оптимизации производительности, инструменты для бэкапа и восстановления.
Выбор зависит от требований: совместимость, производительность, поддержка.
Миграция и совместимость
- При миграции с MySQL 5.7 на 8.0 проверьте совместимость SQL и изменений в поведении плагинов аутентификации.
- Тестируйте дампы на staging, прежде чем вносить изменения в production.
- При переходе на MariaDB убедитесь, что используемые функции поддерживаются.
Ключевые факты и пути конфигурации
- Порт по умолчанию: 3306.
- Файлы конфигурации:
/etc/mysql/mysql.conf.d/mysqld.cnfи/etc/mysql/my.cnf. - Каталог данных по умолчанию:
/var/lib/mysql. - Утилита безопасности:
mysql_secure_installation.
Глоссарий (одной строкой)
- RDBMS — реляционная система управления базами данных.
- auth_socket — плагин аутентификации, использующий UNIX-сокет.
- mysql_native_password, caching_sha2_password — плагины аутентификации паролей.
- mysqld — демон сервера MySQL.
Заключение
Эта инструкция помогает быстро развернуть и безопасно настроить MySQL на Ubuntu 18.04. Она охватывает установку клиента и сервера, базовую жёсткую настройку, варианты аутентификации, управление службой, проверки и рекомендации по безопасности. Для production‑развёртываний дополнительно планируйте мониторинг, репликацию и регулярные бэкапы.
Заметки:
- Если вы развертываете новую инфраструктуру, рассмотрите более новые версии ОС и СУБД для длительной поддержки.
- Для облачных или критичных систем подумайте о managed-решениях, чтобы снять часть операционных задач.