MySQL
MySQL — это система управления реляционными базами данных (СУБД) с открытым исходным кодом, разрабатываемая и поддерживаемая компанией Oracle Corporation. MySQL работает по принципу клиент-серверной архитектуры, использует язык структурированных запросов (SQL) и является одной из наиболее распространённых реляционных СУБД в мире, особенно в сфере веб-разработки.
История
Создание и ранние годы (1995—2000)
Разработка MySQL была начата шведской компанией MySQL AB, основанной Дэвидом Аксмарком, Алланом Ларссоном и Михаэлем Видениусом. Название «MySQL» происходит от имени дочери Видениуса — Ми (My; по другой версии, от английского «my» — «мой»), а «SQL» — аббревиатура от Structured Query Language. Первая внутренняя версия была выпущена в 1995 году, а первая публичная версия (3.11) — в 1996 году.
Изначально MySQL создавалась как альтернатива коммерческим СУБД, таким как Oracle и Informix. Она была оптимизирована для быстрой работы на недорогом оборудовании и не поддерживала сложные функции, такие как хранимые процедуры, триггеры и представления, что компенсировалось высокой скоростью выполнения запросов.
Эпоха роста и приобретение Sun Microsystems (2000—2008)
В 2001 году компания MySQL AB начала предлагать коммерческую лицензию в дополнение к открытой (GNU General Public License). К середине 2000-х годов MySQL стала стандартом для веб-приложений, благодаря тесной интеграции с языком программирования PHP и широкому использованию в связке Apache — MySQL — PHP (позже Linux, Apache, MySQL, Perl/PHP/Python — стек LAMP).
В 2008 году компания MySQL AB была приобретена корпорацией Sun Microsystems за 1 миллиард долларов США. Основным мотивом покупки было желание Sun получить контроль над популярной СУБД для интеграции со своими продуктами, такими как Solaris и Java.
Приобретение Oracle и последствия (2009 — настоящее время)
В 2009 году компанию Sun Microsystems приобрела корпорация Oracle Corporation, которая уже владела коммерческой СУБД Oracle. Сделка на сумму 7,4 миллиарда долларов была завершена в 2010 году и вызвала серьёзные опасения среди пользователей MySQL и регулирующих органов по поводу возможного свёртывания разработки открытой версии.
Чтобы получить одобрение антимонопольных органов, Oracle взяла на себя обязательства по развитию MySQL и поддержанию её открытого кода. После приобретения серверная часть MySQL осталась полностью открытой (GPL), хотя Oracle предлагает платные коммерческие лицензии с дополнительной поддержкой.
Архитектура и принципы работы
Клиент-серверная модель
MySQL работает по классической клиент-серверной архитектуре. Серверный процесс (mysqld) принимает соединения от клиентов (например, веб-сервера), обрабатывает запросы SQL и возвращает результаты. Клиент может быть как локальным (на той же машине), так и удалённым. Для связи используется протокол TCP/IP (по умолчанию порт 3306) или UNIX-сокеты для локального взаимодействия.
Подсистемы хранения данных (Storage Engines)
Ключевая особенность MySQL — поддержка различных подсистем хранения данных (storage engines), каждая из которых оптимизирована под определённые задачи:
- InnoDB — транзакционный механизм с поддержкой внешних ключей, блокировок на уровне строк и восстановления после сбоев. Стандартный и наиболее распространённый движок с версии 5.5.
- MyISAM — нетабличное, нетранзакционное хранение, оптимизированное на скорость для операций чтения. Используется в устаревших системах и для полнотекстового поиска (до появления полнотекстовых индексов в InnoDB).
- Memory (HEAP) — хранит данные в оперативной памяти, что обеспечивает экстремальную скорость, но данные теряются при перезапуске сервера. Применяется для временных таблиц и кэшей.
- Archive — для хранения больших объёмов редко читаемых данных. Поддерживает только вставку и запросы SELECT.
- CSV — хранит данные в формате CSV (текстовый файл с разделителями запятыми), что позволяет напрямую редактировать таблицы внешними программами.
- Federated — позволяет обращаться к таблицам на удалённых серверах MySQL так, как если бы они были локальными.
- NDB Cluster — используется в конфигурациях MySQL Cluster для обеспечения высокой отказоустойчивости и горизонтального масштабирования.
В ранних версиях (до 5.5) по умолчанию использовался MyISAM, однако он не поддерживал транзакции и блокировки на уровне строк. С переходом на InnoDB MySQL стала полноценной ACID-совместимой СУБД (Atomicity, Consistency, Isolation, Durability).
Основные возможности
Типы данных
MySQL поддерживает широкий спектр типов данных:
- Числовые: TINYINT, SMALLINT, MEDIUMINT, INT (INTEGER), BIGINT (целые); DECIMAL, FLOAT, DOUBLE (дробные).
- Строковые: CHAR, VARCHAR (фиксированная и переменная длина); TEXT, MEDIUMTEXT, LONGTEXT (длинные строки); BLOB (бинарные данные).
- Дата и время: DATE, TIME, DATETIME, TIMESTAMP, YEAR.
- Пространственные (Spatial): GEOMETRY, POINT, LINESTRING, POLYGON (для работы с географическими данными).
- JSON: начиная с версии 5.7, MySQL поддерживает нативный тип данных JSON с функциями для работы с документами.
Индексы
Для ускорения запросов MySQL использует различные типы индексов:
- B-Tree — основной тип для операций сравнения и сортировки (используется в InnoDB, MyISAM).
- Hash — только для равенства (=), очень быстрый для точного поиска (движок MEMORY).
- FULLTEXT — для полнотекстового поиска по строкам (InnoDB, MyISAM).
- Spatial — для геоданных (R-Tree).
Транзакции и блокировки
InnoDB поддерживает транзакции с четырьмя уровнями изоляции по стандарту SQL:
- READ UNCOMMITTED (грязное чтение)
- READ COMMITTED (неповторяющееся чтение)
- REPEATABLE READ (повторяющееся чтение, стандартный режим в MySQL)
- SERIALIZABLE (полная сериализация)
MySQL использует блокировки на уровне таблиц (MyISAM, MEMORY), страниц и строк (InnoDB). Блокировки могут быть общими (shared) и исключительными (exclusive).
Репликация
MySQL поддерживает несколько видов репликации для обеспечения отказоустойчивости и распределения нагрузки:
- Асинхронная репликация — основной режим: мастер записывает события в бинарный лог, слейвы (подчинённые серверы) получают их с задержкой.
- Полусинхронная репликация — мастер ждёт подтверждения от одного из слейвов до фиксации транзакции.
- Синхронная репликация — реализуется через MySQL Cluster (NDB-движок) с использованием протокола Paxos.
Применение
MySQL является одной из самых популярных СУБД в мире, занимая лидирующие позиции среди реляционных баз данных с открытым кодом. Основные области применения:
- Веб-разработка — фундамент для систем управления контентом (WordPress, Joomla, Drupal), интернет-магазинов (Magento, OpenCart), социальных сетей и форумов (vBulletin, phpBB).
- Банковское ПО и финансовые системы — с использованием транзакционного движка InnoDB.
- Электронная коммерция — обработка заказов, каталоги товаров, история покупок.
- Системы аналитики и отчётов — в связке с OLAP-инструментами и системами бизнес-аналитики (BI).
- Мобильные приложения — в качестве бэкенда для мобильных сервисов (часто в связке с REST API).
По данным рейтинга DB-Engines (2024 год), MySQL стабильно входит в тройку самых популярных СУБД в мире, уступая только Oracle Database и Microsoft SQL Server, и опережая все остальные свободные СУБД, включая PostgreSQL и MariaDB.
Форки и ответвления
Поскольку MySQL распространяется под лицензией GPL, появилось несколько независимых ответвлений (форков):
- MariaDB — создан в 2009 году основателями MySQL Майклом Видениусом, Дэвидом Аксмарком и Алланом Ларссоном как реакция на приобретение Sun Microsystems компанией Oracle. MariaDB стремится сохранить полную обратную совместимость с MySQL, добавляя при этом новые механизмы хранения (Aria, XtraDB) и расширения. Является стандартной СУБД в большинстве дистрибутивов Linux (Red Hat, Fedora, openSUSE, Arch Linux) и используется в сервисах (Wikipedia (до 2020 года), Facebook, Google).
- Percona Server — форк MySQL от компании Percona, ориентированный на оптимизацию производительности, особенно для больших нагрузок. Включает расширенные возможности аудита, ведения журналов и настройки.
- Amazon Aurora — проприетарная совместимая с MySQL база данных от Amazon Web Services (AWS), не являющаяся форком, но полностью совместимая с протоколом и API MySQL.
Критика
Несмотря на широкую популярность, MySQL подвергается критике по нескольким направлениям:
- Проблемы с ACID-совместимостью в ранних версиях — до перехода на InnoDB как стандарт, MyISAM не поддерживал транзакции и корректное восстановление, что приводило к потерям данных.
- Ограниченная поддержка стандарта SQL — MySQL не в полной мере соответствует стандарту SQL:2003/SQL:2008. Например, отсутствие полноценной поддержки оконных функций (до версии 8.0) и рекурсивных запросов.
- Нестабильность в конфигурациях репликации — асинхронная репликация по умолчанию может приводить к расхождениям данных (дрейфу) при сбоях.
- Приобретение Oracle — многие разработчики и администраторы баз данных опасаются, что Oracle может ограничить развитие открытой версии в пользу своей коммерческой СУБД Oracle Database, что привело к массовому переходу на MariaDB (т.н. «форк-миграция»).
- Вопросы производительности при больших объёмах данных — - InnoDB испытывает трудности с горячими точками записи и требует тонкой настройки для больших проектов (свыше 1 ТБ данных).
Интересные факты
- MySQL был назван в честь дочери сооснователя проекта Михаэля Видениуса — Ми.
- Слоган MySQL — «The world's most popular open source database» (Самая популярная в мире база данных с открытым исходным кодом).
- MySQL используется в таких крупных проектах, как Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ), Twitter, YouTube, GitHub, Wikipedia (перешла на MariaDB в 2020 году), WordPress (около 40% всех сайтов в мире работают на WordPress с MySQL).
- Первая версия MySQL была написана на C и C++. Современные версии также используют C++.
- В 2020 году компания Oracle опубликовала статистику, согласно которой ежедневно выполняется более 300 миллиардов запросов к базам данных MySQL по всему миру.
Источники
- Официальная документация MySQL (MySQL 8.0 Reference Manual)
- Книга Пола Дюбуа «MySQL» (4-е издание)
- История MySQL на сайте Oracle
- Рейтинг DB-Engines (db-engines.com, 2024)
- Статья «MySQL: The history of the world's most popular open source database» (opensource.com)
- Технические блоги компаний Percona и MariaDB Foundation
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →