MySQL: что это, как устроена, чем хороша и как начать с ней работать
Гайд по самой народной базе данных в мире. Да простят нас поклонники синего слона.
Иллюстрация: Ajmal Ali / Jan Antonin / Unsplash / Annie для Skillbox Media
MySQL входит в джентльменский набор веб-разработчика наряду с Linux, PHP и веб-сервером Apache. Она простая, удобная в настройке и распространяется по свободной лицензии GNU — то есть её можно бесплатно использовать в своих проектах. Если вы хотите развиваться в веб-разработке, то, скорее всего, не раз столкнётесь с MySQL — а потому стоит познакомиться с ней как можно раньше.
Из этой статьи вы узнаете:
- что такое MySQL;
- кто ей пользуется;
- как она устроена;
- для чего нужна;
- в чём её главные плюсы;
- как работать с MySQL;
- что почитать по теме.
Что такое MySQL и как она появилась
MySQL — это система управления базами данных (СУБД). Многие по привычке называют её просто базой данных, но это некорректно — разница между двумя этими понятиями примерно такая же, как между библиотекой и библиотекарем. При этом в роли первой выступают данные, а в роли второго — непосредственно СУБД. Именно она проводит все сложные манипуляции с данными: сортирует, добавляет, удаляет, находит, отображает по запросу пользователя и так далее.
Чтобы к данным было удобнее обращаться, MySQL хранит их в виде связанных друг с другом таблиц. Такая модель называется реляционной, и она далеко не нова. Первыми её стали использовать банки и госучреждения ещё в 1970-х, чтобы организовать огромные пласты данных в единую систему и ускорить транзакции.
Вот упрощённый пример реляционной базы данных для импровизированного онлайн-кинотеатра — есть три отдельных таблицы для фильмов, пользователей и отзывов, которые связаны между собой специальными ключами (столбец ID).
Сама же MySQL появилась сильно позже, уже в середине 1990-х, в ответ на бурный рост интернета и бум доткомов. Веб-мастерам средней руки и владельцам стартапов не нужны были сложные и дорогущие системы для корпоративных серверов вроде Oracle DB и майкрософтовской SQL Server. Им подавай простую, без излишеств и желательно недорогую систему — как говорится, «воткнул и поехал».
И MySQL идеально подходила под этот запрос. Во-первых, она чертовски просто настраивается благодаря большому набору интерфейсных фишек и понятной документации. А во-вторых, с самого начала распространяется под свободной лицензией GNU GPL — то есть её можно использовать абсолютно бесплатно. Правда, только в некоммерческих целях — в противном случае отстегнуть деньги за платную лицензию всё-таки придётся.
Благодаря своей простоте и гибкости MySQL входит состав многих ready-to-use-сборок для настройки веб-серверов. Например, буква M в названии технологического стека LAMP как раз обозначает MySQL. Причём три другие части набора — Linux, Apache и PHP — могут меняться в зависимости от версии пакета, но именно MySQL является константой.
Что касается названия, со словом SQL всё понятно — это название языка для управления реляционными БД. А вот по поводу My есть разные версии:
«До конца не ясно, откуда идёт название MySQL. В TcX (компании, где зародилась MySQL. — Ред.) базовый каталог, а также значительное число библиотек и утилит в течение десятка лет имели префикс My. Вместе с тем мою дочь (которая на несколько лет младше) тоже зовут My. Поэтому остаётся тайной, какой из двух источников дал название MySQL».
Майкл (Монти) Видениус,
создатель MySQL
Корни всемирно известной СУБД — в Скандинавии. Она разработана Майклом Видениусом и поставлена им на коммерческие рельсы вместе с друзьями из Швеции Дэвидом Аксмарком и Алланом Ларссоном. Совместными усилиями последователи дядюшки Линуса основали в 1995 году компанию MySQL AB, которая и ведала делами проекта.
Свободное плавание продлилось 13 лет: в 2008 году компанию покупает Sun Microsystems, разработчик всемирно известного Java, а двумя годами позже и сама Sun переходит под крыло Oracle. Надо отдать должное оракулам — они не стали отказываться от философии свободного ПО и продолжают развивать продукт совместно с открытым сообществом разработчиков.
Кто и для чего использует MySQL
Сейчас MySQL — в топе самых популярных СУБД в мире, она используется в самых разных компаниях и областях разработки. Вот несколько примеров:
Сайты и веб-приложения
Блоги, форумы, соцсети, маркетплейсы — миллионы ресурсов используют MySQL для управления данными. Среди всемирно известных представителей: WordPress, Joomla, Drupal, соцсети «Фейсбук»*, X, форумы phpBB и vBulletin, CMS Magento и другие.
Стартапы и малый бизнес
Для небольших проектов mySQL — настоящая находка. Популярный кейс: обкатать проект на бесплатной версии MySQL, а если дело пойдёт, купить лицензию или переехать на СУБД помощнее.
Корпоративные системы
Логично, что MySQL позволяет менеджерить данные не только на веб-ресурсах, но и на предприятиях.
Научные исследования в области data science и аналитики данных.
MySQL позволяет инженерам управлять большими данными, выполнять сложные запросы, анализировать и визуализировать результаты — особенно в сочетании со специальными библиотеками и инструментами.
Образование
Здесь у MySQL целых две ипостаси. Помимо управления данными учащихся образовательных организаций, она используется для обучения студентов основам баз данных.
Онлайн-игры
MySQL используется для хранения данных о пользователях, сценариях и других аспектах сетевых игр. Её среди прочих используют Minecraft, Counter-Strike и Warcraft III.
Теперь, когда мы убедились, что знание MySQL — востребованный навык, можно переходить к изучению внутренней кухни этой системы.
Как устроена база данных MySQL
В основе MySQL лежит клиент-серверная архитектура. Это когда база данных и система управления ею хранятся на сервере, а пользователи подключаются к ней с помощью своих устройств. Например, мы смотрим через мобильные приложения видеоролики на YouTube, которые лежат на гугловских серверах.
Но с помощью «родной» библиотеки Embedded MySQL можно превратить и во встраиваемую СУБД — то есть внедрить сервер прямо в приложение и получить так называемый толстый клиент, в противовес тонкому, который нужен только для получения данных с сервера.
Давайте разберём, из каких основных компонентов состоит MySQL.
Сервер (MySQL Server). Это центральная часть MySQL, которая управляет всеми базами данных. Сервер обрабатывает SQL-запросы, принимает, обрабатывает, отправляет данные и обеспечивает взаимодействие с клиентами.
Хранилище данных (storage engine). Отвечает за фактическое хранение и организацию данных в таблицах. Когда вы создаёте таблицу в MySQL, вы указываете, какое именно хранилище нужно использовать для этой таблицы.
Какое хранилище выбрать — зависит от задачи. Одни обеспечивают высокую скорость чтения, но не умеют работать с транзакциями. Другие заточены на моментальный доступ к данным, но при перезапуске сервера эти самые данные теряются. Подробнее об основных типах хранилищ и их назначении можно почитать в статье на OpenNET.
Физическая структура данных. Данные, физически записанные на жёсткий диск сервера. Фотографии, номера телефонов, банковские счета, расположение игроков на карте в онлайн-шутере — всё, с чем имеет дело ваше приложение.
Логическая структура. Табличное представление данных, записанных на диск. Каждая строка таблицы представляет собой запись, а каждый столбец — её атрибут. Помимо этого, у каждой записи есть уникальные идентификаторы, или ключи, — по ним можно легко найти нужные данные и связать их между собой.
Схемы (database schema). Это логические структуры, которые описывают организацию таблиц и связей между ними в базе данных. Одна база данных может содержать несколько схем.
Клиенты. Веб-приложения, приложения на языках программирования (например, Python, Java) или инструменты администрирования, которые отправляют SQL-запросы серверу MySQL для выполнения операций чтения, записи, обновления и удаления данных.
SQL. Это универсальный язык общения с реляционными базами данных. И хотя на чистом SQL не говорит ни одна СУБД, версия языка в MySQL максимально близка к оригиналу. Но, как и в любом диалекте, в нём есть свои особенности.
Давайте для примера напишем код, который создаст в базе данных таблицу с информацией о читателях Skillbox Media:
А теперь — отсортируем читателей по дате добавления в базу:
Механизмы безопасности. MySQL обеспечивает механизмы безопасности для контроля доступа к данным: аутентификацию пользователей, управление привилегиями и шифрование данных.
Бэкапы и восстановление. MySQL предоставляет инструменты для создания резервных копий данных и их восстановления в случае сбоя. Бэкапы в MySQL бывают двух видов: физические и логические. Первый делает копию всех файлов на диске без табличной структуры, второй — делает полный дамп базы. О преимуществах и недостатках этих подходов можно почитать здесь.
Для чего нужна MySQL
Как мы уже успели выяснить, главная задача MySQL — эффективно хранить, управлять и извлекать данные по запросу. Теперь давайте разберёмся, что это означает, на конкретных примерах.
Удобное администрирование баз данных
Для этого в MySQL есть мощная графическая среда Workbench. В ней есть все нужные инструменты работы с базами данных: от создания до эксплуатации. Визуализировать модель базы данных? Пожалуйста! Вручную построить связи между таблицами? Не вопрос. Редактировать данные в них, как в каком-нибудь Excel? Раз плюнуть. Про удобный редактор SQL-запросов и говорить не стоит.
Можно администрировать базы данных и через браузер. Для этого существует опенсорсное приложение phpMyAdmin. Оно не такое красивое, как Workbench, зато умеет запускаться прямо на сервере — это облегчает управление сайтом и помогает выкрутиться, если хостинг запрещает удалённый доступ к серверу. Пощупать сервис и оценить его фишки можно на официальном демосервере.
Читайте также:
Конечно, есть масса других инструментов и способов администрирования — но для базового знакомства пока хватит и этого :)
Распределённое хранение данных
В MySQL оно реализовано с помощью механизмов репликации и шардинга.
Репликация. В этом случае данные копируются с главного мастер-сервера на несколько побочных (называемых слейвами). Мастер отправляет изменения в своей базе данных, а слейвы повторяют эти изменения и создают копию данных мастера. Это обеспечивает отказоустойчивость — если главный сервер вдруг откажет и уедет на ремонт, его работу подхватят остальные.
Шардинг. Процесс, при котором база разбивается на несколько более мелких фрагментов, называемых шардами. Каждый шард обрабатывается отдельным сервером, что распределяет нагрузку и повышает производительность.
Многопользовательский доступ к базе данных
Одна из важнейших миссий любой СУБД — сделать так, чтобы пользователи могли работать с файлами, не мешая друг другу. Представьте, что вы с коллегой одновременно внесли изменения в «эксельку», лежащую где-то на сервере. Причём в одни и те же ячейки. Чьи изменения запишутся? Большой вопрос.
Чтобы таких вопросов не возникало, в MySQL существует правило — при обращении пользователей к одним и тем же данным формируется очередь — вы не сможете внести изменения, пока не будет обработан предыдущий запрос.
Есть и более тривиальные правила — например, у каждого пользователя должны быть логин и пароль (это называется аутентификацией), а также права доступа к определённым операциям (это называется авторизацией). Управлять ролями и привилегиями для групп пользователей можно из панели администратора.
Контроль состояния базы данных
В MySQL есть утилиты, которые помогают мониторить производительность, наблюдать за активностью и выявлять проблемы. Например, в уже упомянутом MySQL Workbench можно отслеживать активность запросов, использование ресурсов и многое другое в удобном графическом интерфейсе.
Вот ещё несколько встроенных инструментов:
- Системные переменные, которые можно настроить для оптимизации производительности. Например, команда SHOW VARIABLES отображает текущие значения системных переменных.
- Различные виды логирования (error log, general query log, slow query log) позволяют отслеживать ошибки, запросы и медленные запросы.
- Системы управления версиями Liquibase или Flyway помогают контролировать изменения схемы базы данных.
- Журналы ошибок и запросов помогают выявлять проблемы в работе MySQL.
- Профайлер MySQL Profiler — позволяет анализировать запросы и выявлять узкие места в производительности.
Это лишь часть инструментов для контроля состояния БД.
Преимущества MySQL
Перечислим основные фишки этой СУБД:
- Свободная лицензия GNU GPL. Пользователи могут свободно изучать, изменять и распространять программу. Обратная сторона в том, что все проекты, которые вы создадите на базе этой СУБД, также должны распространяться по GNU GPL. Если это не входит в ваши планы, придётся раскошелиться на платную лицензию.
- Бесплатность. Это преимущество вытекает из предыдущего вместе со всеми подводными камнями. Но если вы хотите использовать СУБД для себя, сугубо в некоммерческих целях — лучше решения не найти.
- Простая и понятная установка. Базы данных легко устанавливаются на хостинги. Есть множество инструментов для управления базами данных, которые упрощают администрирование и настройку.
- Высокая производительность. Это важно для веб-сервисов и мобильных приложений, которые работают под большой нагрузкой. Скорость работы достигается за счёт механизмов кэширования, оптимизации запросов и хорошей обработки транзакций.
- Гибкость в масштабировании. Возможна как горизонтальная масштабируемость (добавление новых серверов), так и вертикальная масштабируемость (использование более мощного оборудования).
- Кросс-платформенность. MySQL работает на разных операционных системах: Windows, Linux, macOS, Unix, BSD и многих других.
- Гибкость и многофункциональность. MySQL подходит для разных приложений — от небольших сайтов до крупных корпоративных систем, поддерживает разные языки программирования и платформы.
- Активное комьюнити разработчиков и пользователей. В интернете полно ресурсов и сообществ, где можно найти обучающие материалы и гайды или обсудить возникшие проблемы с более опытными пользователями.
Как начать работать с MySQL
Это можно сделать тремя способами:
Если у вас есть сервер на хостинге, проверьте, можно ли подключиться к MySQL в личном кабинете. А такая возможность, скорее всего, есть, потому что любой современный хостинг поддерживает работу с MySQL. В этом случае вам даже не придётся ничего скачивать — установщик на сервере сделает всё за вас.
Если вам нужна только СУБД, бесплатную версию можно скачать с официального сайта. Там же можно загрузить API, библиотеки и инструменты для связи с разными языками программирования, средами и технологиями. После этого вы сможете начать работу с базой данных через клиент MySQL Shell, графический интерфейс MySQL Workbench или другое приложение.
Если вам нужен локальный сервер, скачайте готовый пакет для создания окружения — например, Open Server Panel для Windows или MAMP для Linux. В этом случае у вас будет не только СУБД, но и весь базовый обвес для обучения или создания небольших проектов: язык PHP, веб-сервер, файловый менеджер, текстовый редактор и так далее.
Что дальше
Для более глубокого понимания возможностей MySQL ознакомьтесь с официальной документацией. Но это если вы хотите погрузиться прямо очень глубоко. В большинстве случаев вам вполне хватит онлайн-курсов и ресурсов, которыми изобилует интернет. Например, хорошие видеоуроки по MySQL есть здесь и здесь. А на сайте W3Schools есть бесплатные тренажёры, где можно попрактиковаться не только в MySQL, но и в самом SQL.
* Решением суда запрещена «деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Фейсбук и Инстаграм на территории Российской Федерации по основаниям осуществления экстремистской деятельности».