MySQL

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
MySQL
Логотип программы MySQL
Скриншот программы MySQL
Тип реляционная СУБД,серверное программное обеспечениеиоткрытое программное обеспечение
Разработчики MySQL AB,OracleиSun Microsystems
Написана на C++[4]иСи[5]
Операционные системы Unix-подобная операционная система,Windows[6],FreeBSD[6],Solaris[6],Linux[6]иmacOS[6]
Первый выпуск 2001
Аппаратные платформы x86-64[7],IA-32[7],A64[7]иSPARC[7]
Последняя версия
Тестовая версия
Репозиторий github.com/mysql/mysql-s…
Лицензия GNU GPL 2[8]ипроприетарная[9]
Сайт mysql.com(англ.)
Логотип ВикискладаМедиафайлы на Викискладе

MySQL(МФА:[maɪ ˌɛskjuːˈɛl]) —свободнаяреляционная система управления базами данных[10].Разработку и поддержку MySQL осуществляет корпорацияOracle,получившая права на торговую марку вместе с поглощённойSun Microsystems,которая ранее приобрела шведскую компаниюMySQL AB.Продукт распространяется как подGNU General Public License,так и под собственной коммерческой лицензией. Помимо этого, разработчики создают функциональность по заказу лицензионных пользователей. Именно благодаря такому заказу почти в самых ранних версиях появился механизмрепликации.

MySQL является решением для малых и средних приложений. Входит в состав серверовWAMP,AppServ,LAMPи в портативные сборки серверовДенвер,XAMPP,VertrigoServ.Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.

Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типаMyISAM,поддерживающие полнотекстовый поиск, так и таблицыInnoDB,поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц.

26 февраля 2008 годаSun MicrosystemsприобрелаMySQL ABза 1 млрд долларов[11],27 января 2010 годаOracleприобрелаSun Microsystemsза 7,4 млрд долларов[12]и включила MySQL в свою линейкуСУБД[13].

Сообществом разработчиков MySQL созданы различныефоркикода, такие какDrizzle[англ.],OurDelta,Percona ServerиMariaDB.Все эти форки уже существовали на моментпоглощениякомпании Sun корпорацией Oracle.

О происхождении MySQL

[править|править код]

MySQL возникла как попытка применитьmSQLк собственным разработкам компании: таблицам, для которых использовалисьISAM— подпрограммы низкого уровня. В результате был выработан новыйSQL-интерфейс, ноAPI-интерфейс остался в наследство от mSQL. Откуда происходит название «MySQL» — доподлинно неизвестно. Разработчики дают два варианта: либо потому, что практически все наработки компании начинались с префикса «My…» (сангл. — «моё…»), либо в честь дочери сименем Мю(фин.My) одного из разработчиков системыМикаэля Видениуса[14][15].

Логотип MySQL в виде дельфина носит имя «Sakila». Он был выбран из большого списка предложенных пользователями «имён дельфина». Имя «Sakila» было отправленоOpen Source-разработчикомAmbrose Twebaze.

Лицензирование

[править|править код]

MySQL имеет двойное лицензирование. MySQL может распространяться в соответствии с условиями лицензииGPL.Однако по условиям GPL, если какая-либо программа использует библиотеки (или включает в себя другой GPL-код) MySQL, то она тоже должна распространяться по лицензии GPL. Это может расходиться с планами разработчиков, не желающих открывать исходные тексты своих программ. Для таких случаев предусмотрена коммерческая лицензия, которая также обеспечивает качественную сервисную поддержку. Для свободного программного обеспечения Oracle предоставляет отдельное исключение из правил, явным образом разрешающее использование и распространение MySQL вместе с ПО, распространяемым под лицензией из определённого Oracle списка.[16]

MySQL портирована на большое количество платформ:AIX,BSDi,FreeBSD,HP-UX,Linux,macOS,NetBSD,OpenBSD,OS/2Warp,SGIIRIX,Solaris,SunOS,SCO OpenServer,UnixWare,Tru64,Windows 95,Windows 98,Windows NT,Windows 2000,Windows XP,Windows Server 2003,WinCE,Windows Vista,Windows 7иWindows 10.Существует также порт MySQL кOpenVMS.На официальном сайте СУБД для свободной загрузки предоставляются не только исходные коды, но и откомпилированные и оптимизированные под конкретные операционные системы готовые исполняемые модулиСУБДMySQL.

Языки программирования

[править|править код]

MySQL имеетAPI[17]и коннекторы для языковDelphi,C,C++,Эйфель,Java,Лисп,Perl,PHP,Python,Ruby,Smalltalk,Компонентный Паскаль,TclиLua,библиотеки для языков платформы.NET,а также обеспечивает поддержку дляODBCпосредством ODBC-драйвераMyODBC.

MyODBC представляет собой драйверODBC(2.50) уровня 0 (с некоторыми возможностями уровней 1 и 2) для подсоединения совместимого с ODBC приложения к MySQL. MyODBC работает на всех системахMicrosoft Windowsи на большинстве платформUnix.

История выпусков

[править|править код]

[18][19][20][21][22][23][24]

  • Версия для Windows систем (Windows 95 и NT) выпущена 8 января 1998.
  • Версия 3.23:бета-версияв июне 2000, выпуск в январе 2001.
  • Версия 4.0: бета в августе 2002, релиз в марте 2003.
  • Версия 4.1: бета в июне 2004, релиз в октябре 2004.
  • Версия 5.0: бета в марте 2005, релиз в октябре 2005.
  • Версия 5.1: разработка велась с ноября 2005, релиз в ноябре 2008.
  • Версия 5.4: бета в апреле 2009, не была выпущена.
  • Версия 5.5: релиз в декабре 2010.
  • Версия 5.6: в разработке (последний релиз — 5.6.50 от 19.10.2020).[25]
  • Версия 5.7: в разработке (последний релиз — 5.7.32 от 19.10.2020).[26]

Несмотря на то, что версия 4.0 является устаревшей, она всё ещё имеет значительное распространение[источник не указан 1837 дней].Основные возможности этой версии:

  • практически полная реализацияANSISQL-99,плюс расширения;
  • межплатформенная совместимость;
  • независимые типы таблиц (MyISAMдля быстрого чтения,InnoDBдля транзакций и ссылочной целостности);
  • транзакции;
  • поддержкаSSL;
  • кэшированиезапросов;
  • репликация:один головной сервер на одного подчинённого, много подчинённых на одного головного;
  • полнотекстовая индексация и поиск с использованием типа таблиц MyISAM;
  • внедрённая библиотека базы данных;
  • поддержкаЮникода(UTF-8);
  • таблицыInnoDB,обеспечивающие соответствие требованиямACID;
  • встроенный сервер, позволяющий включать MySQL в автономные приложения.

Рекомендованной версией на2005 годявляется MySQL 4.1, вышедшая27 октября2004.Она содержит следующие нововведения:

  • вложенные запросы и производные таблицы.
  • новая система кодировок и сортировок;
  • более быстрый и гибкий протокол клиент-сервер с поддержкой подготовленных запросов, обеспечивающий их оптимальное исполнение;
  • новая программа установки и настройки дляMicrosoft WindowsиLinux;
  • защищённые черезOpenSSLсоединения клиент-сервер;
  • высокооптимизированная библиотека, которая может быть использована в сторонних программах;
  • полноценная поддержка Юникода (UTF-8 и UCS2);
  • стандартные пространственные типы данныхGISдля хранения географической информации;
  • улучшенный полнотекстовый поиск и система помощи.

Версия MySQL 5.0 вышла 24 октября 2005 года, в этой версии значительно расширена функциональность, которая ставит MySQL в один ряд с коммерческимиСУБД.Если раньшеСУБДMySQL обвиняли в недостаточной поддержке стандартаSQL,то с появлением пятой версии этой популярной базы данных появилась практически полная поддержка стандарта SQL. MySQL 5.0 содержит следующие нововведения:

Версия MySQL 5.1 продолжает путь к стандартуSQL:2003.MySQL 5.1 содержит следующие нововведения[27][28].

  • Сегментирование— возможность разбить одну большую таблицу на несколько частей, размещенных в разных файловых системах, основываясь на определённой пользователем функции. При определённых условиях это может дать серьёзное увеличение производительности и, кроме того, облегчает масштабирование таблиц.
  • Изменено поведение ряда операторов, для обеспечения большей совместимости со стандартом SQL2003.
  • Построчнаярепликация(англ.row-based replication), при которой в бинарный лог будет записываться только информация о реально изменённых строках таблицы вместо оригинального (и, возможно, медленного) текста запроса. Построчную репликацию можно использовать только для определённых типов sql-запросов, в терминах MySQL — смешанная репликация (англ.mixed replication).
  • Встроенныйпланировщикпериодически запускаемых работ. По синтаксису добавление задачи похоже на добавлениетриггерак таблице, по идеологии — наcrontab.
  • Дополнительный набор функций для обработкиXML,реализация поддержкиXPath.
  • Новые средства диагностики проблем и утилиты для анализа производительности. Расширены возможности по управлению содержимым лог-файлов, логи теперь могут быть сохранены и в таблицах general_log и slow_log. Утилита mysqlslap позволяет провести нагрузочное тестирование БД с записью времени реакции на каждый запрос.
  • Для упрощения операции обновления подготовлена утилита mysql_upgrade, которая выполнит проверку всех существующих таблиц на предмет совместимости с новой версией, и при необходимости выполнит надлежащие корректировки.
  • MySQL Cluster отныне выпущен как отдельный продукт, базирующийся на MySQL 5.1 и хранилище NDBCLUSTER.
  • Значительные изменения в работе MySQL Cluster, такие, как, например, возможность хранения табличных данных на диске.
  • Возврат к использованию встроенной библиотеки libmysqld, отсутствовавшей в MySQL 5.0.
  • APIдля плагинов, которое позволяет загружать сторонние модули, расширяющие функциональность (например, полнотекстовый поиск), без перезапуска сервера.
  • Реализация парсера полнотекстового поиска в виде plug-in.
  • Новый тип таблиц Maria (устойчивый к сбоям клонMyISAM).

Тип таблиц Maria

[править|править код]

Maria(начиная с версии 5.2.x — Aria) — расширенная версия хранилищаMyISAM,с добавлением средств сохранения целостности данных после краха.

Основные достоинства Maria[29]:

  • В случае краха производится откат результатов выполнения текущей операции или возврат в состояние до команды LOCK TABLES. Реализация через ведение лога операций.
  • Возможность восстановления состояния из любой точки в журнале операций, включая поддержку CREATE/DROP/RENAME/TRUNCATE. Может быть использовано для создания инкрементальных резервных копий, через периодическое копирование журнала операций.
  • Поддержка всех форматов столбцов MyISAM, расширена новым форматом «rows-in-block», использующим страничный способ хранения данных, при котором данные в столбцах могут кэшироваться.
  • В будущем будет реализовано два режима: транзакционный и без отражения в журнале транзакций, для некритичных данных.
  • Размер страницы данных равен 8Кб(в MyISAM 1 Кб), что позволяет достичь более высокой производительности для индексов по полям фиксированного размера, но медленнее в случае индексирования ключей переменной длины.

Ветка MySQL 5.5 базируется на невыпущенной серии MySQL 5.4 и содержит ряд значительных улучшений, связанных с повышением масштабируемости и производительности, среди которых:

  • Использование по умолчанию движка InnoDB.
  • Поддержка полусинхронного (semi-synchronous) механизма репликации, основанного на патчах к InnoDB от компании Google.
  • Улучшение функций по секционированию данных. Расширенный синтаксис для разбиения больших таблиц на несколько частей, размещенных в файловых системах (partitioning). Добавлены операции RANGE, LIST и метод оптимизации «partition pruning».
  • Новый механизм оптимизации вложенных запросов и JOIN-операций.
  • Переработана система внутренних блокировок.
  • Интегрированы патчи Google с оптимизацией работы InnoDB на процессорах с большим количеством ядер.

Версия MySQL 6.0 была заморожена на стадии альфа-тестирования. Первоначально было принято решение о создании версии 5.2, вскоре эта версия была переименована в 6.0. Однако позже информация о MySQL 6.0 исчезла с сайта, а разработчики сосредоточились на версии 5.5 и следующей за ней версии 5.6.

Одним из основных нововведений версии 6.0 планировался новый тип таблицFalcon,разработанный в качестве потенциальной замены дляInnoDBкомпанииInnobase,приобретённой компаниейOracle.В связи с приобретением в 2010 годуSun Microsystemsтем жеOracle,судьба Falcon остаётся под вопросом.

Первая версия ветки MySQL 5.7.1 анонсирована 23 апреля 2013. Версия MySQL 5.7.8 адаптирована для Debian 8 и Ubuntu 15.04. Последний релиз — 5.7.32 от 19.10.2020.[26]

Версия 8.0.0 была выпущена 12.09.2016, но официально пригодной к повсеместному использованию была версия 8.0.11, выпущенная 19.04.2018. Последняя версия — 8.0.33 (релиз от 18.04.2023)[30]

Версия 8.4.0 выпущена 30.04.2024.

Технические характеристики

[править|править код]

Максимальные размеры таблиц

[править|править код]

Максимальный размер таблиц в MySQL 3.22 — до 4 гигабайт, в последующих версиях ограничений нет.

Размер таблицы ограничен её типом. В общем случае типMyISAMограничен предельным размером файла вфайловой системеоперационной системы. Например, вNTFSэтот размер теоретически может быть до 32эксабайт.В случаеInnoDBодна таблица может храниться в нескольких файлах, представляющих единоетабличное пространство.Размер последнего может достигать 64терабайт.

В отличие отMyISAMInnoDBимеется значительное ограничение на количество столбцов, которое можно добавить в одну таблицу. Размер страницы памяти по умолчанию составляет 16 килобайт, из которых под данные отведено 8123 байта. Размер указателя на динамические поля составляет 20 байт. Таким образом, в случае использования динамического формата строки (ROW_FORMAT=DYNAMIC), одна таблица может вместить максимум 409 столбцов типаblobилиtext.

Локализация

[править|править код]

Начиная с версии 4.1 вСУБДMySQL внедрена новая система кодировок и сопоставлений. При использовании кодировки Windows-1251, перед выполнением SQL-инструкций необходимо настроить кодировку соединения при помощи операторов:

SETcharacter_set_client='cp1251';
SETcharacter_set_results='cp1251';
SETcharacter_set_connection='cp1251';

Эти три оператора эквивалентны вызову одного оператора:

SETNAMES'cp1251'

Переменнаяcharacter_set_clientустанавливает кодировку данных, отправляемых от клиента, переменнаяcharacter_set_resultsустанавливает кодировку данных, отправляемых клиенту, переменнаяcharacter_set_connectionустанавливает кодировку, в которую преобразуется информация, пришедшая от клиента, перед выполнением запроса на сервере.

При использованииЮникодаUTF-8 этот оператор выглядит следующим образом:

SETNAMES'utf8mb4'

КодировкаISO 8859-5не поддерживается.

Проблема с Юникодом

[править|править код]

MySQL не позволяет корректно применятьрегулярные выражения(операторы REGEXP и RLIKE) на строках в многобайтовых кодировках, например, для Юникода (UTF-8)[31].При необходимости таких операций приходится переходить на однобайтовые кодировки, например русскуюWin-1251илиKOI-8.

  1. Changes in MySQL 9.0.0 (2024-07-01, Innovation Release)— 2024.
  2. Changes in MySQL 8.4.1 (2024-07-01, LTS Release)— 2024.
  3. Changes in MySQL 8.0.38 (2024-07-01, General Availability)— 2024.
  4. The mysql Open Source Project on Open Hub: Languages Page(англ.)— 2006.
  5. The mysql Open Source Project on Open Hub: Languages Page— 2006.
  6. 12345Supported Platforms: MySQL Database(англ.)
  7. 1234Supported Platforms: MySQL Database
  8. COPYING
  9. https://www.mysql.com/about/legal/licensing/oem/
  10. http://dev.mysql.com/doc/refman/5.7/en/what-is-mysql.htmlАрхивная копияот 14 июля 2017 наWayback Machine1.3.1. What is MySQL? MySQL 5.7 Reference Manual.
  11. MySQL:: Observations by Kaj Arnö @SunАрхивная копияот 23 марта 2012 наWayback Machine(англ.)
  12. Oracle to Buy Sun.Дата обращения: 24 апреля 2013. Архивировано изоригинала22 апреля 2009 года.
  13. Oracle завершила поглощение SunАрхивная копияот 27 января 2012 наWayback Machine(англ.)
  14. MySQL. Руководство администратора= MySQL. Administrator's Guide. —М.:Издательский дом «Вильямс»,2005. — С.624.—ISBN 5-8459-0805-1.
  15. [История MySQL(англ.).Дата обращения: 25 марта 2008.Архивировано31 августа 2009 года.История MySQL(англ.)]
  16. FOSS License Exception.Дата обращения: 6 мая 2016.Архивировано15 мая 2016 года.
  17. MySQL:: MySQL 8.0 Reference Manual:: 28 Connectors and APIs.dev.mysql.com. Дата обращения: 15 апреля 2019.Архивировано5 апреля 2019 года.
  18. B.3. Changes in Release 3.23.x (Lifecycle Support Ended).Oracle. Дата обращения: 24 августа 2010. Архивировано изоригинала4 апреля 2013 года.
  19. B.2. Changes in Release 4.0.x (Lifecycle Support Ended).Oracle. Дата обращения: 24 августа 2010. Архивировано изоригинала4 апреля 2013 года.
  20. B.1. Changes in Release 4.1.x (Lifecycle Support Ended).Oracle. Дата обращения: 24 августа 2010. Архивировано изоригинала4 апреля 2013 года.
  21. C.1. Changes in Release 5.0.x (Lifecycle Support Ended).Oracle. Дата обращения: 24 августа 2010. Архивировано изоригинала4 апреля 2013 года.
  22. C.1. Changes in Release 5.1.x (Production).Oracle. Дата обращения: 24 августа 2010. Архивировано изоригинала4 апреля 2013 года.
  23. C.1. Changes in Release 5.5.x (Production).Oracle. Дата обращения: 24 августа 2010. Архивировано изоригинала4 апреля 2013 года.
  24. C.1. Changes in Release 5.6.x (Development).Oracle. Дата обращения: 24 августа 2010. Архивировано изоригинала4 апреля 2013 года.
  25. [Changes in MySQL 5.6.50 (2020-10-19, General Availability) Сообщение о выпуске релиза MySQL 5.6.50 от 19.10.2020]
  26. 12Сообщение о выпуске релиза MySQL 5.7.32 от 19.10.2020.Дата обращения: 16 января 2021.Архивировано28 февраля 2021 года.
  27. Нововведения MySQL 5.1.Дата обращения: 13 августа 2009. Архивировано изоригинала28 июня 2009 года.
  28. Обзор новшеств MySQL 5.1 на русском языке.Дата обращения: 22 декабря 2008.Архивировано26 декабря 2008 года.
  29. Обзор возможностей хранилища Maria на opennet.ru.Дата обращения: 7 января 2009.Архивировано9 февраля 2009 года.
  30. Сообщение о выпуске релиза MySQL 8.0.32 от 17.01.2023.Дата обращения: 16 января 2021.Архивировано26 февраля 2021 года.
  31. «The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multi-byte safe and may produce unexpected results with multi-byte character sets.»Дата обращения: 30 июля 2014.Архивировано29 июля 2014 года.