MySQL Community Server — бесплатная версия популярной СУБД от Oracle. Подходит для разработки, тестирования и эксплуатации малых и средних проектов. Система распространяется под лицензией GNU GPL, поддерживает большинство функций платных редакций и работает на всех основных операционных системах. В статье разбираем технические характеристики, ключевые отличия от коммерческих версий MySQL и процесс установки на Linux и Windows.
Что такое MySQL Community Server
MySQL Community Server — это открытая реляционная СУБД с поддержкой SQL. Oracle выпускает редакцию в рамках программы MySQL Community Edition и предоставляет её без ограничений по срокам или количеству подключений. Система включает базовый набор инструментов для работы с базами данных: движок InnoDB, репликацию master-slave, встроенные триггеры и хранимые процедуры.
MySQL Community Server используют в веб-приложениях, CMS (WordPress, Joomla, Drupal), системах аналитики и внутренних корпоративных порталах. СУБД работает на серверах под управлением Linux, Windows, macOS, FreeBSD. Минимальные требования к железу — 1 ГБ оперативной памяти и 2 ГБ свободного места на диске, но для production-нагрузки понадобятся более мощные серверы с достаточным объёмом RAM и быстрыми SSD-накопителями.
Технические характеристики
| Характеристика | Описание |
|---|---|
| Текущая версия | 8.0.36 (январь 2024) |
| Лицензия | GNU GPL v2 |
| Поддерживаемые ОС | Linux (RHEL, Ubuntu, Debian, SLES), Windows, macOS, FreeBSD, Solaris |
| Архитектура | x86_64, ARM64 |
| Движки хранения | InnoDB (по умолчанию), MyISAM, Memory, CSV, Archive |
| Максимальный размер БД | Зависит от файловой системы (до 64 ТБ на ext4, практически неограничен на XFS) |
| Максимальное количество таблиц | Ограничено только дисковым пространством |
| Максимальный размер строки | 65 535 байт (InnoDB поддерживает до 8 ТБ через BLOB/TEXT) |
| Репликация | Асинхронная master-slave, полусинхронная, Group Replication |
| Поддержка транзакций | ACID-compliant в InnoDB |
| Шифрование данных | TLS для соединений, шифрование таблиц InnoDB (с версии 8.0) |
| Языки программирования | SQL, хранимые процедуры, триггеры, представления |
| Интерфейсы подключения | ODBC, JDBC, API для C, C++, Python, PHP, Perl, Ruby, Node.js, Go |
| Аутентификация | Native password, SHA-256, caching_sha2_password (по умолчанию в 8.x), LDAP (только Enterprise) |
| Резервное копирование | mysqldump (логическое), MySQL Shell Dump (8.x), физическое копирование файлов (требует остановки сервера) |
Отличия MySQL Community от платных версий
Oracle предлагает три редакции MySQL: Community (бесплатная), Standard (от $2000/сервер/год) и Enterprise (от $5000/сервер/год). Community Edition подходит для большинства задач, но в крупных проектах с высокими требованиями к безопасности и производительности могут понадобиться возможности платных версий.
Что есть только в платных версиях
- MySQL Enterprise Monitor — система мониторинга с графиками производительности, предупреждениями о проблемах и советами по оптимизации. В Community придётся использовать сторонние инструменты (Zabbix, Prometheus + Grafana, Percona Monitoring and Management).
- MySQL Enterprise Backup — инструмент для горячего резервного копирования InnoDB без остановки сервера. Community-пользователи используют mysqldump (медленнее на больших базах) или Percona XtraBackup (open-source альтернатива).
- MySQL Enterprise Security — аутентификация через LDAP/Active Directory, интеграция с Kerberos, ротация паролей, аудит действий пользователей. В Community доступна только базовая аутентификация по логину/паролю.
- MySQL Enterprise Firewall — защита от SQL-инъекций на уровне СУБД. Анализирует запросы и блокирует подозрительные. В Community такой функциональности нет, требуется использовать WAF или прикладные средства защиты.
- MySQL Thread Pool — оптимизация обработки соединений для высоконагруженных систем. Community использует модель «одно соединение = один поток», что при сотнях одновременных подключений увеличивает нагрузку на CPU.
- Техническая поддержка Oracle — круглосуточная помощь инженеров, патчи безопасности в приоритетном порядке, консультации по архитектуре. Community-пользователи получают поддержку через форумы и документацию.
Что доступно в Community Edition
- Полнофункциональная СУБД с движком InnoDB, поддержкой транзакций, внешних ключей, триггеров, хранимых процедур.
- Репликация master-slave и Group Replication для отказоустойчивости.
- Шифрование TLS для соединений и шифрование таблиц InnoDB (с версии 8.0).
- Партиционирование таблиц для улучшения производительности на больших объёмах данных.
- Индексы JSON, полнотекстовый поиск, пространственные индексы для геоданных.
- MySQL Shell — современный клиент с поддержкой JavaScript, Python и SQL.
- Регулярные обновления безопасности и исправления багов (но с задержкой относительно Enterprise).
Для проектов без жёстких требований к SLA и интеграции с корпоративными системами аутентификации MySQL Community Server закрывает 95% потребностей. Если нужны горячее резервное копирование и мониторинг, можно использовать open-source инструменты: Percona XtraBackup, PMM, pt-toolkit.
Установка MySQL Community Server на Linux
Рассмотрим установку на Ubuntu 22.04 LTS и CentOS/RHEL 8. Процесс для других дистрибутивов Linux похож, меняются только команды пакетного менеджера и названия репозиториев.
Установка на Ubuntu/Debian
Установка MySQL на Ubuntu
- Обновите список пакетов:
sudo apt update - Установите MySQL Server:
sudo apt install mysql-server. Система скачает пакет (около 30 МБ) и автоматически запустит службу. - Проверьте статус службы:
sudo systemctl status mysql. Должно быть «active (running)». - Запустите скрипт безопасности:
sudo mysql_secure_installation. Скрипт предложит установить пароль для root, удалить анонимных пользователей, запретить удалённый вход для root, удалить тестовую базу данных. Рекомендуем ответить «Yes» на все вопросы. - Войдите в MySQL:
sudo mysql -u root -p, введите пароль root.
Если нужна конкретная версия MySQL (например, 8.0.36), скачайте DEB-пакет с официального сайта Oracle или добавьте репозиторий MySQL APT. Команда для добавления репозитория:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
sudo apt update
sudo apt install mysql-server
Установка на CentOS/RHEL
Установка MySQL на CentOS/RHEL
- Добавьте официальный репозиторий MySQL:
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm - Установите MySQL Server:
sudo dnf install mysql-server - Запустите службу:
sudo systemctl start mysqld - Включите автозапуск:
sudo systemctl enable mysqld - Найдите временный пароль root:
sudo grep 'temporary password' /var/log/mysqld.log. Oracle генерирует случайный пароль при первом запуске и записывает его в лог. - Войдите в MySQL:
mysql -u root -p, введите временный пароль. - Смените пароль root:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль';. Пароль должен содержать минимум 8 символов, заглавные и строчные буквы, цифры, спецсимволы. - Запустите скрипт безопасности:
sudo mysql_secure_installation
Проверка установки
После установки проверьте версию MySQL и список доступных баз данных:
mysql -u root -p -e "SELECT VERSION();"
mysql -u root -p -e "SHOW DATABASES;"
Должны увидеть версию сервера (например, 8.0.36) и список системных баз: information_schema, mysql, performance_schema, sys.
Установка MySQL Community Server на Windows
Oracle предоставляет два способа установки на Windows: через MySQL Installer (рекомендуется) и через ZIP-архив (для продвинутых пользователей). MySQL Installer включает все компоненты: сервер, клиент MySQL Workbench, коннекторы для .NET, ODBC, Java.
Установка через MySQL Installer
- Скачайте MySQL Installer с официального сайта dev.mysql.com/downloads/installer/. Выберите версию «Windows (x86, 32-bit), MSI Installer» размером около 450 МБ (полная версия с компонентами) или 2 МБ (веб-установщик, который скачает компоненты во время установки).
- Запустите установщик с правами администратора.
- Выберите тип установки: «Developer Default» (сервер + все инструменты разработки), «Server only» (только сервер), «Custom» (выбор компонентов вручную). Для production-серверов рекомендуем «Server only».
- Установщик проверит зависимости (Visual C++ Redistributable, .NET Framework). Если чего-то не хватает, предложит установить.
- На этапе конфигурации выберите тип сервера: «Development Computer» (минимальное потребление ресурсов), «Server Computer» (средняя нагрузка), «Dedicated Computer» (вся память и CPU для MySQL). Для тестирования подойдёт «Development Computer», для production — «Server Computer» или «Dedicated Computer» в зависимости от роли сервера.
- Настройте сетевые параметры: порт TCP/IP (по умолчанию 3306), открытие доступа из сети (если нужно удалённое подключение). Для безопасности оставьте «Open Windows Firewall port for network access» выключенным, если сервер используется только локально.
- Выберите метод аутентификации: «Use Strong Password Encryption (recommended)» — новый метод caching_sha2_password для MySQL 8.x, более безопасный, но требует обновления драйверов в старых приложениях; «Use Legacy Authentication» — старый метод mysql_native_password, совместим с приложениями до 2018 года. Рекомендуем Strong Password Encryption.
- Установите пароль root. Требования: минимум 8 символов, заглавные и строчные буквы, цифры, спецсимволы.
- Настройте службу Windows: имя службы (по умолчанию MySQL80), запуск при старте системы (рекомендуем включить), учётная запись для службы (по умолчанию «Local System Account»).
- Завершите установку. Установщик запустит службу MySQL и выполнит начальную конфигурацию.
Проверка установки на Windows
Откройте командную строку (Win + R, введите cmd) и выполните:
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
mysql -u root -p -e "SELECT VERSION();"
Если видите версию MySQL и командную строку mysql>, установка прошла успешно. Для удобства добавьте путь к mysql.exe в переменную PATH: «Панель управления → Система → Дополнительные параметры системы → Переменные среды → Path → Изменить → Добавить C:\Program Files\MySQL\MySQL Server 8.0\bin».
Начальная настройка MySQL Community Server
После установки СУБД работает с параметрами по умолчанию, которые не всегда оптимальны для production. Разберём ключевые настройки в конфигурационном файле.
Расположение файла конфигурации
- Linux: /etc/mysql/my.cnf (Ubuntu/Debian) или /etc/my.cnf (CentOS/RHEL). Иногда настройки разделены на несколько файлов в /etc/mysql/mysql.conf.d/ или /etc/my.cnf.d/.
- Windows: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Перед редактированием создайте резервную копию файла: sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup
Ключевые параметры для настройки
| Параметр | Описание | Рекомендуемое значение |
|---|---|---|
| innodb_buffer_pool_size | Размер кэша InnoDB. Самый важный параметр для производительности. InnoDB хранит здесь индексы и данные таблиц. | 50-70% от RAM сервера. Например, на сервере с 16 ГБ RAM ставьте 8-10 ГБ. |
| innodb_log_file_size | Размер лог-файла транзакций InnoDB. Влияет на скорость записи и время восстановления после сбоя. | 256 МБ — 1 ГБ. Чем больше, тем быстрее запись, но дольше recovery. |
| max_connections | Максимальное количество одновременных подключений. | 150-300 для веб-приложений. Каждое соединение потребляет 200-300 КБ RAM + память для буферов запросов. |
| query_cache_size | Размер кэша запросов (устарел в MySQL 8.x, удалён полностью). В MySQL 5.7 и ниже кэшировал результаты SELECT. | В MySQL 8.x не используется. В 5.7 — 0 (выключен) или 64-128 МБ. |
| tmp_table_size и max_heap_table_size | Максимальный размер временных таблиц в памяти. Если превышен, MySQL создаёт таблицу на диске (медленнее). | 64-128 МБ. Увеличивайте, если в SHOW STATUS видите много Created_tmp_disk_tables. |
| innodb_flush_log_at_trx_commit | Режим записи логов транзакций. 1 — запись на диск после каждой транзакции (максимальная надёжность, медленнее), 2 — запись в кэш ОС каждую секунду (быстрее, есть риск потери 1 сек данных при сбое), 0 — запись каждую секунду без fsync (самый быстрый, но опасный). | 1 для production, 2 для систем с низкими требованиями к сохранности данных. |
| character_set_server и collation_server | Кодировка по умолчанию для новых баз данных. | utf8mb4 и utf8mb4_unicode_ci (поддержка всех символов Unicode, включая эмодзи). |
| bind-address | IP-адрес, на котором MySQL слушает подключения. 127.0.0.1 — только локальные соединения, 0.0.0.0 — со всех интерфейсов. | 127.0.0.1 для разработки, внутренний IP сервера для production (не 0.0.0.0 в публичной сети!). |
Пример конфигурации для production-сервера
Конфигурация для сервера с 16 ГБ оперативной памяти и SSD-накопителями:
[mysqld]
# Основные настройки
port = 3306
bind-address = 10.0.1.50
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
# Кодировка
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
# InnoDB
innodb_buffer_pool_size = 10G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
# Соединения
max_connections = 200
max_connect_errors = 100
wait_timeout = 600
interactive_timeout = 600
# Временные таблицы
tmp_table_size = 128M
max_heap_table_size = 128M
# Логирование
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:
# Linux
sudo systemctl restart mysql
# Windows (в cmd с правами администратора)
net stop MySQL80
net start MySQL80
Создание пользователя и базы данных
По умолчанию существует только пользователь root. Для каждого приложения создавайте отдельного пользователя с минимальными правами (принцип least privilege).
Создание пользователя и БД
- Войдите в MySQL:
mysql -u root -p - Создайте базу данных:
CREATE DATABASE my_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - Создайте пользователя:
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'secure_password'; - Выдайте права на базу:
GRANT ALL PRIVILEGES ON my_app.* TO 'app_user'@'localhost'; - Примените изменения:
FLUSH PRIVILEGES;
Если приложение подключается с другого сервера, замените ‘localhost’ на IP-адрес или ‘%’ (любой хост, небезопасно для production). Пример: CREATE USER 'app_user'@'10.0.1.100' IDENTIFIED BY 'secure_password';
Права доступа
Вместо ALL PRIVILEGES выдавайте только нужные права:
- SELECT, INSERT, UPDATE, DELETE — стандартный набор для веб-приложений.
- CREATE, DROP, ALTER — управление структурой БД. Нужно для миграций, но опасно давать рабочему пользователю.
- INDEX — создание и удаление индексов.
- EXECUTE — выполнение хранимых процедур.
Пример для пользователя только на чтение:
GRANT SELECT ON my_app.* TO 'readonly_user'@'localhost';
Настройка репликации master-slave
Репликация позволяет дублировать данные на несколько серверов для отказоустойчивости и распределения нагрузки чтения. MySQL Community Server поддерживает асинхронную репликацию: мастер записывает изменения в бинарный лог, слейв-серверы считывают лог и применяют изменения.
Конфигурация мастера
Добавьте в my.cnf на мастере:
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7
Перезапустите MySQL. Создайте пользователя репликации:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
Получите текущую позицию в бинарном логе:
SHOW MASTER STATUS;
Запишите значения File и Position (например, mysql-bin.000003 и 154). Понадобятся на слейве.
Конфигурация слейва
Добавьте в my.cnf на слейве:
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
read_only = 1
Перезапустите MySQL. Настройте репликацию:
CHANGE MASTER TO
MASTER_HOST='10.0.1.50',
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154;
START SLAVE;
Проверьте статус:
SHOW SLAVE STATUS\G
Параметры Slave_IO_Running и Slave_SQL_Running должны быть «Yes». Если «No», смотрите Last_Error для диагностики.
Частые проблемы и решения
MySQL не запускается после установки
Причины: повреждённые файлы данных, неправильные права доступа, конфликт портов, нехватка места на диске. Проверьте лог ошибок: sudo tail -n 50 /var/log/mysql/error.log (Linux) или C:\ProgramData\MySQL\MySQL Server 8.0\Data\*.err (Windows). Частые ошибки:
- «Can’t create test file» — нет прав на запись в datadir. Решение:
sudo chown -R mysql:mysql /var/lib/mysql - «Address already in use» — порт 3306 занят. Решение: найдите процесс (
sudo netstat -tulpn | grep 3306) и остановите или измените порт в my.cnf. - «Out of memory» — слишком большое значение innodb_buffer_pool_size. Решение: уменьшите до 1-2 ГБ, запустите, затем увеличьте постепенно.
Забыли пароль root
Решение для Linux:
- Остановите MySQL:
sudo systemctl stop mysql - Запустите с пропуском проверки прав:
sudo mysqld_safe --skip-grant-tables & - Войдите без пароля:
mysql -u root - Смените пароль:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; - Остановите mysqld_safe, запустите нормально:
sudo systemctl start mysql
Медленные запросы
Включите лог медленных запросов (см. конфигурацию выше) и анализируйте с помощью mysqldumpslow:
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
Покажет 10 самых медленных запросов. Оптимизируйте их: добавьте индексы, перепишите сложные JOIN, используйте EXPLAIN для анализа плана выполнения.
Ошибка «Too many connections»
Приложение создаёт больше соединений, чем разрешено в max_connections. Решения:
- Увеличьте max_connections в my.cnf (но каждое соединение потребляет RAM).
- Настройте пулинг соединений в приложении (например, через HikariCP для Java, SQLAlchemy для Python).
- Проверьте, закрывает ли приложение соединения после использования.
Мониторинг и обслуживание
MySQL Community Server не включает инструменты мониторинга, но можно использовать open-source решения:
- Percona Monitoring and Management (PMM) — веб-интерфейс с графиками производительности, анализом медленных запросов, метриками InnoDB. Бесплатная альтернатива MySQL Enterprise Monitor.
- Prometheus + MySQL Exporter + Grafana — гибкая система мониторинга с настраиваемыми дашбордами.
- Zabbix — мониторинг инфраструктуры с поддержкой MySQL. Шаблоны для отслеживания нагрузки, репликации, доступности.
- MySQLTuner — скрипт для анализа конфигурации и рекомендаций по оптимизации. Установка:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl; perl mysqltuner.pl
Регулярные задачи обслуживания
- Резервное копирование: настройте ежедневный mysqldump или Percona XtraBackup с ротацией копий (7 дневных, 4 недельных, 12 месячных). Пример скрипта:
mysqldump --all-databases --single-transaction --quick --lock-tables=false > backup-$(date +%F).sql - Обновление безопасности: подписывайтесь на уведомления Oracle MySQL Security и применяйте патчи в течение 30 дней после релиза.
- Очистка бинарных логов: если не используете репликацию, логи занимают место. Удаляйте старые:
PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 7 DAY); - Анализ и оптимизация таблиц: раз в месяц выполняйте
OPTIMIZE TABLEдля таблиц с частыми UPDATE/DELETE. Освобождает фрагментированное пространство.
Сравнение MySQL Community с альтернативами
| Параметр | MySQL Community | MariaDB | PostgreSQL |
|---|---|---|---|
| Лицензия | GNU GPL v2 | GNU GPL v2 | PostgreSQL License (BSD-подобная) |
| Компания-разработчик | Oracle | MariaDB Foundation | PostgreSQL Global Development Group |
| Совместимость с MySQL | 100% | 95% (форк MySQL 5.5) | Частичная (нужна миграция) |
| Производительность OLTP | Высокая | Высокая (чуть быстрее на некоторых нагрузках) | Средняя |
| Производительность OLAP | Средняя | Средняя | Высокая |
| Репликация | Master-slave, Group Replication | Master-slave, Galera Cluster | Streaming, логическая репликация |
| JSON | Поддержка с MySQL 5.7 | Поддержка | Нативная поддержка с индексами |
| Полнотекстовый поиск | Есть (InnoDB FTS) | Есть | Есть (более гибкий) |
| Геоданные | Пространственные типы и индексы | Пространственные типы и индексы | PostGIS (самая мощная реализация) |
| Популярность | Очень высокая (веб, CMS) | Высокая (растёт) | Высокая (корпоративные системы) |
MySQL Community Server оптимален для веб-приложений, CMS, e-commerce с высокой нагрузкой на транзакции и чтение. PostgreSQL лучше подходит для аналитики, сложных запросов, работы с JSON/XML. MariaDB — полностью совместимая замена MySQL с дополнительными движками хранения (Aria, ColumnStore).
Когда переходить на платную версию MySQL
Рассмотрите MySQL Enterprise, если:
- У вас более 100 ГБ данных и нужно горячее резервное копирование без блокировки таблиц (MySQL Enterprise Backup работает в 5-10 раз быстрее mysqldump).
- Требуется интеграция с корпоративным Active Directory или LDAP для единой аутентификации.
- SLA проекта требует техподдержки 24/7 от вендора с гарантированным временем ответа.
- Нужна защита от SQL-инъекций на уровне СУБД (MySQL Enterprise Firewall).
- Система обрабатывает тысячи одновременных подключений и требует Thread Pool для оптимизации.
Во всех остальных случаях MySQL Community + open-source инструменты (Percona Toolkit, PMM, XtraBackup) закрывают потребности с нулевыми затратами на лицензии.
Аппаратные рекомендации для MySQL
Производительность MySQL сильно зависит от железа. Рекомендации для типовых нагрузок:
Малая нагрузка (до 100 одновременных запросов, 10-50 ГБ данных)
- Процессор: 4 ядра серверного процессора Intel Xeon или AMD EPYC.
- Память: 16 ГБ RAM, из них 8-10 ГБ на innodb_buffer_pool_size.
- Диск: SATA SSD 240-500 ГБ или NVMe SSD для максимальной скорости чтения индексов.
- Сеть: 1 Гбит/с.
Средняя нагрузка (100-500 одновременных запросов, 50-200 ГБ данных)
- Процессор: 8-16 ядер.
- Память: 32-64 ГБ RAM.
- Диск: NVMe SSD 1-2 ТБ или RAID 10 из SSD.
- Сеть: 10 Гбит/с.
Высокая нагрузка (500+ одновременных запросов, 200+ ГБ данных)
- Процессор: 16-32 ядра с высокой частотой (MySQL плохо масштабируется на 64+ ядрах из-за блокировок).
- Память: 128-256 ГБ RAM.
- Диск: несколько NVMe SSD в RAID 10 или распределённая система хранения.
- Сеть: 10-25 Гбит/с, желательно выделенный канал для репликации.
Для подбора конфигурации под конкретную задачу используйте конфигуратор серверов. Наши специалисты помогут рассчитать нужную производительность на основе объёма данных, количества запросов и бюджета.
Часто задаваемые вопросы
Можно ли использовать MySQL Community Server в коммерческих проектах?
Да, MySQL Community Server распространяется под лицензией GNU GPL v2, которая разрешает коммерческое использование. Вы можете запускать сервер для любых задач, включая платные услуги и SaaS. Ограничения GPL касаются только распространения модифицированных версий MySQL: если вы встраиваете изменённый код MySQL в проприетарный продукт, который продаёте клиентам, нужно либо открыть исходники, либо купить коммерческую лицензию у Oracle. Если вы просто используете MySQL как серверную СУБД без модификаций, никаких ограничений нет.
Чем MySQL 8.0 отличается от MySQL 5.7?
Основные изменения: новый метод аутентификации caching_sha2_password (безопаснее старого mysql_native_password), удалён Query Cache (неэффективен на многоядерных процессорах), добавлены оконные функции SQL (ROW_NUMBER, RANK, LEAD, LAG), улучшена производительность InnoDB (до 2 раз быстрее на записи), поддержка невидимых индексов (можно временно отключить индекс без удаления), улучшенная поддержка JSON (функции для работы с массивами, слияние документов), роли пользователей (упрощают управление правами). MySQL 5.7 получает только критические патчи безопасности до октября 2023, новые проекты рекомендуем запускать на 8.0.
Как перенести базу данных с одного сервера MySQL на другой?
Для небольших баз (до 10 ГБ) используйте mysqldump: создайте дамп на исходном сервере mysqldump -u root -p database_name > dump.sql, скопируйте файл на новый сервер, импортируйте mysql -u root -p database_name < dump.sql. Для больших баз используйте Percona XtraBackup (физическое копирование файлов InnoDB, работает без остановки сервера) или настройте временную репликацию: сделайте новый сервер слейвом, дождитесь синхронизации, переключите приложение на новый сервер, отключите репликацию. Если версии MySQL разные, проверьте совместимость с помощью mysql_upgrade после импорта.
Какой размер innodb_buffer_pool_size оптимален?
Правило: 50-70% от общей RAM сервера на выделенной машине (где работает только MySQL). На сервере с 32 ГБ ставьте 16-22 ГБ. Если на сервере работают другие приложения (веб-сервер, Redis, Elasticsearch), оставьте им минимум 25% RAM. Не ставьте 90-95% RAM — операционной системе нужна память для файлового кэша, сетевых буферов, процессов. Слишком большое значение может вызвать swap и замедлить систему. Проверяйте утилизацию через SHOW ENGINE INNODB STATUS; — параметр «Buffer pool hit rate» должен быть >99%. Если ниже, увеличивайте buffer pool.
Нужно ли обновлять MySQL регулярно?
Да, Oracle выпускает обновления безопасности каждые 3 месяца (Critical Patch Update). Пропуск патчей увеличивает риск эксплуатации уязвимостей, особенно если MySQL доступен из интернета. Рекомендуем обновлять минорные версии (8.0.35 → 8.0.36) в течение месяца после релиза, мажорные версии (5.7 → 8.0) — после тестирования на staging-среде. Перед обновлением: сделайте резервную копию, прочитайте Release Notes (могут быть breaking changes), протестируйте приложение на новой версии. Обновление обычно занимает 5-15 минут с учётом остановки сервера (используйте репликацию для обновления без простоя).
