# MySQL и MariaDB

> Самая распространённая открытая реляционная СУБД веба и её форк от создателей; движок InnoDB, репликация, сравнение с PostgreSQL и различия между ветками Oracle и MariaDB Foundation.

Источник: https://llmdocs.ru/wiki/mysql-mariadb/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: реляционная СУБД
- **MySQL — первый выпуск**: 1995 (MySQL AB, Швеция)
- **MySQL — владелец**: Oracle (с 2010)
- **MariaDB — форк**: 2009, Майкл Видениус
- **Основной движок**: InnoDB (транзакции, MVCC, внешние ключи)
- **Лицензия**: GPL v2 (+ коммерческая у MySQL)
- **Порт по умолчанию**: 3306
**MySQL** — открытая [реляционная СУБД](https://llmdocs.ru/wiki/relational-database.md), одна из самых распространённых в мире, исторически — основа веба: буква «M» в стеке LAMP (Linux, Apache, MySQL, PHP). **MariaDB** — её форк, созданный в 2009 году основателем MySQL Майклом Видениусом после покупки Sun компанией Oracle. На MySQL построены WordPress, Drupal, ранние Facebook, YouTube, Twitter, а сегодня — крупнейшие сервисы через шардирующие надстройки вроде Vitess.[1][7]

## История

MySQL создали в 1995 году шведская компания MySQL AB — Майкл Видениус, Давид Аксмарк и Аллан Ларссон. Название — по имени дочери Видениуса My (а MariaDB — по имени младшей дочери, Марии). Ранние версии были быстрыми, но упрощёнными: таблицы MyISAM не поддерживали транзакции и внешние ключи. Ситуацию изменил движок **InnoDB**, ставший основным в версии 5.5 (2010).

В 2008 году MySQL AB купила Sun Microsystems, а в 2010-м Sun поглотила Oracle. Опасаясь за будущее проекта, Видениус основал MariaDB, а Percona выпускает собственную сборку Percona Server. С 2023 года у MySQL модель с LTS-выпусками (8.4, затем 9.7) и промежуточными «Innovation»-версиями.[3]

## Архитектура

Особенность MySQL — **подключаемые движки хранения**: SQL-слой (разбор, оптимизация) отделён от слоя, хранящего данные.

- **InnoDB** — движок по умолчанию: [ACID-транзакции](https://llmdocs.ru/wiki/transaction-acid.md), построчные блокировки, [MVCC](https://llmdocs.ru/wiki/mvcc.md), внешние ключи, восстановление после сбоя. Таблицы хранятся как кластерный индекс по первичному ключу ([B+-дерево](https://llmdocs.ru/wiki/b-tree.md)): строки физически упорядочены по ключу, а вторичные индексы ссылаются на первичный ключ.[5]
- **MyISAM** — устаревший нетранзакционный движок.
- В MariaDB дополнительно Aria, ColumnStore (колоночный, см. [Колоночное хранение](https://llmdocs.ru/wiki/columnar-storage.md)), Spider (шардирование).

Из кластерного индекса вытекает практический совет: первичный ключ должен быть коротким и монотонным (автоинкремент или UUIDv7), иначе вставки фрагментируют таблицу.

## MySQL и MariaDB сегодня

Изначально MariaDB был совместимой заменой «один в один», но к 2020-м годам ветки разошлись:[4]

| | MySQL (Oracle) | MariaDB |
|---|---|---|
| Развитие | Oracle, часть функций — в коммерческой Enterprise | MariaDB Foundation и MariaDB plc, открытое |
| JSON | бинарный тип `JSON` | `JSON` — псевдоним `LONGTEXT` с проверкой |
| Репликация | GTID MySQL, Group Replication, InnoDB Cluster | свой формат GTID, Galera Cluster |
| Особенности | оконные функции, CTE, `EXPLAIN ANALYZE` | системно-версионированные таблицы, последовательности, векторный тип (11.7+) |
| Дистрибутивы Linux | Ubuntu, Oracle Linux | по умолчанию в Debian, RHEL, Fedora, Arch |

Переход между ними на новых версиях уже не гарантированно бесшовен — особенно с бинарными данными репликации и JSON.

## Быстрый старт

```bash
docker run -d --name db -e MARIADB_ROOT_PASSWORD=secret -p 3306:3306 mariadb:11
mysql -h 127.0.0.1 -u root -p
```

```sql
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
CREATE TABLE orders (
  id         BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  user_id    BIGINT NOT NULL,
  total      DECIMAL(10,2) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_user (user_id)
) ENGINE=InnoDB;
```

Ловушка из прошлого: кодировка `utf8` в MySQL — на самом деле трёхбайтовая `utf8mb3`, она не вмещает эмодзи и часть символов [Unicode](https://llmdocs.ru/wiki/unicode-utf8.md). Всегда используйте `utf8mb4` (по умолчанию с MySQL 8.0). Другая ловушка — нестрогий режим SQL в старых версиях, при котором неверные значения молча обрезались; сейчас `STRICT_TRANS_TABLES` включён по умолчанию.

## Репликация и масштабирование

MySQL давно славится простой [репликацией](https://llmdocs.ru/wiki/replication.md): основной сервер пишет бинарный журнал (binlog), реплики его применяют. Варианты — асинхронная, полусинхронная, Group Replication с автоматическим выбором лидера. Binlog также служит источником для захвата изменений (CDC) через Debezium. Для [шардирования](https://llmdocs.ru/wiki/sharding.md) используют Vitess (разработан в YouTube, применяется в Slack, GitHub, Shopify) и прокси ProxySQL.

## MySQL или PostgreSQL

Обе СУБД зрелые и подходят для большинства задач. [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md) богаче по возможностям SQL (типы, расширения вроде PostGIS и pgvector, частичные индексы, транзакционный DDL) и строже к стандарту; поэтому в новых проектах в 2020-х его выбирают чаще. MySQL проще в эксплуатации репликации, имеет огромную базу установок, хостинга и специалистов, хорошо проверен на очень высоких нагрузках чтения. По рейтингу DB-Engines MySQL остаётся второй по популярности СУБД после Oracle.[6]

## Инструменты

- `mysqldump` / `mariadb-dump` — логические бэкапы; Percona XtraBackup и Mariabackup — горячие физические (см. [Бэкапы: правило 3-2-1](https://llmdocs.ru/wiki/backup-3-2-1.md));
- MySQL Shell, MySQL Workbench, DBeaver — клиенты;
- `pt-online-schema-change`, gh-ost — изменение больших таблиц без блокировок (см. [Миграции схемы БД](https://llmdocs.ru/wiki/schema-migrations.md));
- драйверы: PyMySQL и mysqlclient (Python), go-sql-driver/mysql, `mysql2` (Node.js).

## См. также

- [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md)
- [SQL](https://llmdocs.ru/wiki/sql.md)
- [Репликация баз данных](https://llmdocs.ru/wiki/replication.md)
- [SQLite](https://llmdocs.ru/wiki/sqlite.md)

## Источники

1. [MySQL 8.4 Reference Manual](https://dev.mysql.com/doc/refman/8.4/en/)
2. [MariaDB Documentation](https://mariadb.com/docs/)
3. [MySQL — Release model (LTS and Innovation)](https://dev.mysql.com/doc/refman/8.4/en/mysql-releases.html)
4. [MariaDB versus MySQL: Compatibility](https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/)
5. [MySQL — The InnoDB Storage Engine](https://dev.mysql.com/doc/refman/8.4/en/innodb-storage-engine.html)
6. [DB-Engines Ranking](https://db-engines.com/en/ranking)
7. [Vitess — scalable MySQL clustering](https://vitess.io/)
