MySQL

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
MySQL
Mysql.png
Тип

Реляционная СУБД

Разработчик

MySQL AB (до 2008),
Sun Microsystems (2008-2010),
Oracle (с 2010)

Написана на

Си и C++

Операционная система

кроссплатформенное программное обеспечение

Последняя версия

5.6.15 (3 декабря 2013)[1]

Тестовая версия

5.7.5 m15[2] (25 сентября 2014)

Лицензия

GNU GPL и лицензия несвободного программного обеспечения

Сайт

mysql.com

MySQL на Викискладе

MySQL (МФА: [maɪ ˌɛskjuːˈɛl])[3] — свободная реляционная система управления базами данных. Разработку и поддержку 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 млрд[4], 27 января 2010 года Oracle приобрела Sun Microsystems за $7,4 млрд[5] и включила MySQL в свою линейку СУБД.[6]

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

О происхождении MySQL[править | править вики-текст]

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

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

Лицензирование[править | править вики-текст]

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

Платформы[править | править вики-текст]

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

Языки программирования[править | править вики-текст]

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

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

История выпусков[править | править вики-текст]

[9][10][11][12][13][14][15]

  • Первый внутренний выпуск MySQL состоялся 23 мая 1995 года [источник не указан 1837 дней].
  • Версия для 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.6 m9 7 августа 2012).

MySQL 4.0[править | править вики-текст]

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

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

MySQL 4.1[править | править вики-текст]

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

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

MySQL 5.0[править | править вики-текст]

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

MySQL 5.1[править | править вики-текст]

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

  • Сегментирование — возможность разбить одну большую таблицу на несколько частей, размещенных в разных файловых системах, основываясь на определенной пользователем функции. При определенных условиях это может дать серьёзное увеличение производительности и, кроме того, облегчает масштабирование таблиц.
  • Изменено поведение ряда операторов, для обеспечения большей совместимости со стандартом 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[18].

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

MySQL 5.5[править | править вики-текст]

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

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

MySQL 6.0[править | править вики-текст]

Версия 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 3.22 до 4 ГБ, в последующих версиях максимальный размер ограничивается максимальным размером файла используемой операционной системы.

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

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

Локализация[править | править вики-текст]

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

  SET character_set_client='cp1251';
  SET character_set_results='cp1251'; 
  SET character_set_connection='cp1251';

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

  SET NAMES 'cp1251'

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

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

  SET NAMES 'utf8'

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

Проблема с Юникод[править | править вики-текст]

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

Примечания[править | править вики-текст]

  1. http://dev.mysql.com/doc/relnotes/mysql/5.6/en/
  2. MySQL 5.7.5 Milestone 15 Release notes
  3. 1.3.1. What is MySQL? (англ.). MySQL 5.6 Reference Manual. Oracle. Проверено 16 марта 2013. Архивировано из первоисточника 21 марта 2013.
  4. MySQL :: Observations by Kaj Arnö @Sun  (англ.)
  5. Oracle to Buy Sun. Проверено 24 апреля 2013.
  6. Oracle завершила поглощение Sun  (англ.)
  7. MySQL. Руководство администратора = MySQL. Administrator's Guide. — М.: Издательский дом «Вильямс», 2005. — С. 624. — ISBN 5-8459-0805-1.
  8. История MySQL  (англ.)
  9. B.3. Changes in Release 3.23.x (Lifecycle Support Ended). Oracle. Проверено 24 августа 2010. Архивировано из первоисточника 4 апреля 2013.
  10. B.2. Changes in Release 4.0.x (Lifecycle Support Ended). Oracle. Проверено 24 августа 2010. Архивировано из первоисточника 4 апреля 2013.
  11. B.1. Changes in Release 4.1.x (Lifecycle Support Ended). Oracle. Проверено 24 августа 2010. Архивировано из первоисточника 4 апреля 2013.
  12. C.1. Changes in Release 5.0.x (Lifecycle Support Ended). Oracle. Проверено 24 августа 2010. Архивировано из первоисточника 4 апреля 2013.
  13. C.1. Changes in Release 5.1.x (Production). Oracle. Проверено 24 августа 2010. Архивировано из первоисточника 4 апреля 2013.
  14. C.1. Changes in Release 5.5.x (Production). Oracle. Проверено 24 августа 2010. Архивировано из первоисточника 4 апреля 2013.
  15. C.1. Changes in Release 5.6.x (Development). Oracle. Проверено 24 августа 2010. Архивировано из первоисточника 4 апреля 2013.
  16. Нововведения MySQL 5.1
  17. Обзор новшеств MySQL 5.1 на русском языке
  18. Обзор возможностей хранилища Maria на opennet.ru
  19. «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.»

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]

Литература[править | править вики-текст]