Home » Установка MySQL на Ubuntu 24 — Полная серверная настройка
Установка MySQL на Ubuntu 24 — Полная серверная настройка

Установка MySQL на Ubuntu 24 — Полная серверная настройка

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

Эта статья поможет вам не просто установить MySQL, а настроить его правильно с первого раза — с учетом production-требований, безопасности и производительности. Рассмотрим как стандартные, так и продвинутые сценарии конфигурации.

Подготовка системы и установка

Перед установкой MySQL убедимся, что система обновлена и готова к работе. Ubuntu 24 поставляется с MySQL 8.0 в официальных репозиториях, что отлично подходит для большинства задач.

sudo apt update && sudo apt upgrade -y
sudo apt install mysql-server mysql-client -y

После установки MySQL автоматически запустится как системный сервис. Проверим статус:

sudo systemctl status mysql
sudo systemctl enable mysql

Интересный факт: в Ubuntu 24 MySQL по умолчанию использует authentication_socket для root пользователя, что означает, что вы можете подключиться как root только через sudo без пароля.

Базовая настройка безопасности

Сразу после установки запускаем скрипт безопасности — это обязательный шаг для любого production-сервера:

sudo mysql_secure_installation

Скрипт предложит настроить следующие параметры:

  • Установить пароль для root (рекомендуется для удаленного доступа)
  • Удалить анонимных пользователей
  • Запретить удаленный доступ для root
  • Удалить тестовую базу данных
  • Перезагрузить таблицы привилегий

Для большинства случаев отвечаем “Yes” на все вопросы. Если планируете удаленное администрирование, можете оставить удаленный доступ для root, но лучше создать отдельного пользователя.

Конфигурация MySQL для production

Стандартная конфигурация MySQL подходит для разработки, но для production требуется тонкая настройка. Основной файл конфигурации находится в /etc/mysql/mysql.conf.d/mysqld.cnf.

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

Ключевые параметры для оптимизации:

[mysqld]
# Базовые настройки
bind-address = 127.0.0.1  # Для локальных подключений
# bind-address = 0.0.0.0  # Для удаленных подключений
max_connections = 200
max_connect_errors = 10000

# Оптимизация памяти
innodb_buffer_pool_size = 2G  # 70-80% от RAM
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2

# Безопасность
sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
local_infile = 0

# Логирование
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

После изменения конфигурации перезапускаем MySQL:

sudo systemctl restart mysql

Создание пользователей и управление доступом

Создадим пользователя для приложения и административного доступа:

sudo mysql -u root -p

-- Создаем пользователя приложения
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'strong_password_here';
CREATE DATABASE app_database;
GRANT ALL PRIVILEGES ON app_database.* TO 'app_user'@'localhost';

-- Создаем административного пользователя
CREATE USER 'admin'@'%' IDENTIFIED BY 'admin_password_here';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;

-- Применяем изменения
FLUSH PRIVILEGES;

Для удаленного доступа не забудьте изменить bind-address в конфигурации и настроить firewall:

sudo ufw allow 3306/tcp
sudo ufw reload

Сравнение подходов к установке

Метод установки Преимущества Недостатки Рекомендации
apt (Ubuntu репозиторий) Простота, стабильность, автообновления Может быть не последняя версия Идеально для production
MySQL официальный репозиторий Последние версии, больше пакетов Потенциальные конфликты зависимостей Для специфических требований
Docker Изоляция, легкое развертывание Дополнительная сложность в управлении Для разработки и микросервисов
Компиляция из исходников Полный контроль, оптимизация Сложность, время на компиляцию Только для экспертов

Настройка репликации и резервного копирования

Для production-среды критически важно настроить репликацию и бэкапы. Настроим простую master-slave репликацию:

На master-сервере добавляем в конфигурацию:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = app_database

Создаем пользователя для репликации:

CREATE USER 'replication'@'%' IDENTIFIED BY 'replication_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
FLUSH PRIVILEGES;

Для автоматического резервного копирования создаем скрипт:

#!/bin/bash
# /opt/mysql-backup.sh
BACKUP_DIR="/opt/mysql-backups"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="app_database"

mkdir -p $BACKUP_DIR

mysqldump -u root -p$ROOT_PASSWORD $DB_NAME > $BACKUP_DIR/backup_$DB_NAME_$DATE.sql

# Удаляем старые бэкапы (старше 7 дней)
find $BACKUP_DIR -name "backup_*.sql" -mtime +7 -delete

Добавляем в cron для ежедневного выполнения:

sudo crontab -e
0 2 * * * /opt/mysql-backup.sh

Мониторинг и оптимизация производительности

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

  • mysqltuner — скрипт для анализа конфигурации
  • pt-query-digest — анализ медленных запросов
  • mytop — мониторинг в реальном времени

Установка и использование:

sudo apt install mysqltuner -y
sudo mysqltuner

# Установка Percona Toolkit
sudo apt install percona-toolkit -y
pt-query-digest /var/log/mysql/slow.log

Полезные команды для мониторинга производительности:

-- Показать активные подключения
SHOW PROCESSLIST;

-- Статистика по таблицам
SHOW TABLE STATUS FROM app_database;

-- Системные переменные
SHOW VARIABLES LIKE 'innodb%';
SHOW STATUS LIKE 'innodb%';

-- Анализ медленных запросов
SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;

Интеграция с Docker и автоматизация

Для разработки и тестирования удобно использовать Docker. Создадим docker-compose.yml для быстрого разворачивания:

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql_dev
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: app_database
      MYSQL_USER: app_user
      MYSQL_PASSWORD: app_password
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
    command: --default-authentication-plugin=mysql_native_password

volumes:
  mysql_data:

Для автоматизации развертывания создадим Ansible playbook:

---
- name: Install and configure MySQL
  hosts: servers
  become: yes
  tasks:
    - name: Install MySQL
      apt:
        name: mysql-server
        state: present
        update_cache: yes
    
    - name: Start MySQL service
      systemd:
        name: mysql
        state: started
        enabled: yes
    
    - name: Set MySQL root password
      mysql_user:
        name: root
        password: "{{ mysql_root_password }}"
        login_unix_socket: /var/run/mysqld/mysqld.sock
    
    - name: Create application database
      mysql_db:
        name: "{{ app_database }}"
        state: present
        login_user: root
        login_password: "{{ mysql_root_password }}"

Альтернативные решения и сравнение

MySQL — не единственный вариант для реляционных баз данных. Рассмотрим альтернативы:

  • PostgreSQL — более продвинутые возможности, лучше для сложных запросов
  • MariaDB — форк MySQL с дополнительными возможностями
  • SQLite — для простых приложений и разработки

Статистика популярности СУБД (Stack Overflow Survey 2024):

  • MySQL: 45.8%
  • PostgreSQL: 43.2%
  • SQLite: 30.9%
  • MariaDB: 16.2%

Troubleshooting и частые проблемы

Самые распространенные проблемы и их решения:

# Проблема: "ERROR 1698 (28000): Access denied for user 'root'@'localhost'"
# Решение: использовать sudo или изменить плагин аутентификации
sudo mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

# Проблема: "Can't connect to MySQL server on 'localhost'"
# Решение: проверить статус сервиса
sudo systemctl status mysql
sudo systemctl start mysql

# Проблема: слишком много подключений
# Решение: увеличить max_connections в конфигурации
SET GLOBAL max_connections = 500;

Полезные скрипты для автоматизации

Создадим скрипт для автоматической установки и настройки MySQL:

#!/bin/bash
# mysql-setup.sh

set -e

echo "Updating system..."
apt update && apt upgrade -y

echo "Installing MySQL..."
apt install mysql-server -y

echo "Starting MySQL service..."
systemctl start mysql
systemctl enable mysql

echo "Running security script..."
# Автоматическая настройка безопасности
mysql -e "DELETE FROM mysql.user WHERE User='';"
mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
mysql -e "DROP DATABASE IF EXISTS test;"
mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';"
mysql -e "FLUSH PRIVILEGES;"

echo "Creating application user..."
mysql -e "CREATE DATABASE IF NOT EXISTS app_database;"
mysql -e "CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';"
mysql -e "GRANT ALL PRIVILEGES ON app_database.* TO 'app_user'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"

echo "MySQL installation completed!"

Интеграция с мониторингом

Для production-серверов рекомендую настроить мониторинг через Prometheus и Grafana. Устанавливаем mysql_exporter:

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.14.0.linux-amd64.tar.gz
sudo mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/

# Создаем пользователя для мониторинга
mysql -e "CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'exporter_password';"
mysql -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';"

Если вы планируете разворачивать MySQL на VPS, рекомендую взглянуть на наши VPS-решения, которые отлично подходят для баз данных средней нагрузки. Для высоконагруженных проектов стоит рассмотреть выделенные серверы.

Заключение и рекомендации

MySQL на Ubuntu 24 — это надежная и проверенная временем связка для большинства веб-приложений. Ключевые моменты для успешного развертывания:

  • Всегда запускайте mysql_secure_installation после установки
  • Настраивайте конфигурацию под ваши потребности по памяти и нагрузке
  • Создавайте отдельных пользователей для каждого приложения
  • Обязательно настройте резервное копирование и мониторинг
  • Используйте репликацию для критически важных данных

Для большинства проектов стандартная установка через apt будет оптимальным выбором — она обеспечивает стабильность и простоту обслуживания. Docker подходит для разработки и микросервисной архитектуры, а официальные репозитории Oracle стоит использовать только при необходимости самых свежих возможностей.

Не забывайте регулярно обновлять MySQL и мониторить производительность — это поможет избежать проблем в будущем и обеспечит стабильную работу ваших приложений.

Полезные ссылки для дальнейшего изучения: официальная документация MySQL, документация Ubuntu Server.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked