MySQL / MariaDB
MySQL — самая распространённая открытая реляционная СУБД и основа LAMP-стека, MariaDB — её форк, созданный после покупки MySQL компанией Oracle.
Что такое MySQL
MySQL — свободная реляционная СУБД, одна из самых распространённых в вебе. Появилась в 1995 году, стала стандартной базой LAMP/LEMP-стека и работает под большинством массовых CMS — WordPress, Bitrix, Drupal, Magento. Название читают «май-эс-кью-эль», написания «my sql» и «mysql» означают одно и то же.
Причина популярности историческая и практическая: MySQL прост в установке, нетребователен к ресурсам, есть на любом хостинге и хорошо документирован. Под типовую веб-нагрузку — много простых чтений — его достаточно.
MySQL и MariaDB
MariaDB — форк MySQL, начатый в 2009 году Микаэлем Видениусом, одним из создателей MySQL, после того как компания Sun (владевшая MySQL) была куплена Oracle. Мотив — опасение, что открытая версия будет развиваться в интересах проприетарного продукта. Название дано по имени дочери основателя.
| MySQL | MariaDB | |
|---|---|---|
| Владелец | Oracle | MariaDB Foundation |
| Лицензия | GPL + коммерческая | GPL |
| Community-версия | Часть возможностей — только в Enterprise | Всё открыто |
| Движки | InnoDB | InnoDB, Aria, ColumnStore |
| Совместимость | — | На уровне протокола и SQL, с расхождениями |
На практике: для типового приложения они взаимозаменяемы, драйверы и клиенты работают с обеими. Расхождение версий накопилось — MariaDB давно не «просто MySQL с другим шильдиком», и совместимость в обратную сторону (перенести с MariaDB на MySQL) хуже, чем в прямую. В большинстве дистрибутивов Linux MariaDB стоит по умолчанию вместо MySQL.
Движки: InnoDB против MyISAM
Особенность MySQL — сменные движки хранения на уровне таблицы. Исторически это источник проблем в старых проектах:
| InnoDB | MyISAM | |
|---|---|---|
| Транзакции | Есть | Нет |
| Внешние ключи | Есть | Игнорируются |
| Блокировки | Строк | Всей таблицы |
| Восстановление после сбоя | Через журнал | Ручной REPAIR TABLE |
InnoDB — движок по умолчанию начиная с MySQL 5.5, и правильный ответ почти всегда «InnoDB». MyISAM встречается в унаследованных базах: он молча игнорирует FOREIGN KEY, не даёт транзакций и блокирует таблицу целиком на запись. Проверить и исправить:
SELECT table_name, engine FROM information_schema.tables
WHERE table_schema = 'shop' AND engine <> 'InnoDB';
ALTER TABLE legacy_orders ENGINE = InnoDB;
Начало работы
sudo apt install mariadb-server
sudo mysql_secure_installation # снять анонимный доступ, задать пароль root
mysql -u root -p
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app'@'localhost' IDENTIFIED BY 'secret';
GRANT ALL PRIVILEGES ON shop.* TO 'app'@'localhost';
FLUSH PRIVILEGES;
Кодировка — обязательно utf8mb4, а не utf8. Историческая ловушка MySQL: его utf8 хранит максимум 3 байта на символ и не вмещает эмодзи и часть символов — при вставке они превращаются в мусор или вызывают ошибку. Настоящий UTF-8 в MySQL называется utf8mb4.
Базовый тюнинг
# /etc/mysql/my.cnf
[mysqld]
innodb_buffer_pool_size = 8G # ~60-70% RAM на выделенном сервере
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 1 # надёжно; 2 быстрее, но теряет ~1 с при сбое
max_connections = 200
slow_query_log = 1
long_query_time = 1 # логировать запросы дольше 1 секунды
innodb_buffer_pool_size — главная ручка: это кеш данных и индексов в памяти. Значение по умолчанию (128 МБ) не подходит ни одному боевому серверу — если рабочий набор помещается в буферный пул, диск почти не читается.
Диагностика
EXPLAIN SELECT * FROM orders WHERE user_id = 42;
-- type: ALL → полный скан таблицы, нужен индекс
-- type: ref → индекс используется
SHOW ENGINE INNODB STATUS\G -- блокировки, дедлоки
SHOW PROCESSLIST; -- что выполняется прямо сейчас
MySQL Workbench
MySQL Workbench — официальный бесплатный GUI-клиент от Oracle для Windows, macOS и Linux. Умеет визуальный редактор запросов с подсветкой, ER-диаграммы и проектирование схемы, forward/reverse engineering (схема из диаграммы и наоборот), администрирование пользователей и мониторинг, импорт-экспорт дампов.
Альтернативы: phpMyAdmin — веб-интерфейс, стандарт на shared-хостинге; DBeaver — универсальный клиент под все СУБД сразу.
Масштабирование
Стандартный путь роста: репликация primary → реплики через binlog, чтение с реплик, а при исчерпании возможностей одного сервера — шардирование (Vitess, ProxySQL). Кластерные решения — Galera Cluster (синхронная мультимастер-репликация, в MariaDB из коробки) и MySQL Group Replication / InnoDB Cluster.
Связанные термины
- СУБД — класс, к которому относится MySQL
- SQL — язык запросов
- PostgreSQL — основной конкурент среди открытых СУБД
- phpMyAdmin — веб-интерфейс управления MySQL
- LEMP-стек — связка, где MySQL традиционно выступает базой
- Дамп базы данных —
mysqldumpи восстановление
Готовы запустить GPU-задачу?
Запустить GPU-сервер