Код
#статьи

MySQL: что это, как устроена, чем хороша и как начать с ней работать

Гайд по самой народной базе данных в мире. Да простят нас поклонники синего слона.

Иллюстрация: Ajmal Ali / Jan Antonin / Unsplash / Annie для Skillbox Media

MySQL входит в джентльменский набор веб-разработчика наряду с Linux, PHP и веб-сервером Apache. Она простая, удобная в настройке и распространяется по свободной лицензии GNU — то есть её можно бесплатно использовать в своих проектах. Если вы хотите развиваться в веб-разработке, то, скорее всего, не раз столкнётесь с MySQL — а потому стоит познакомиться с ней как можно раньше.

Из этой статьи вы узнаете:


Что такое MySQL и как она появилась

MySQL — это система управления базами данных (СУБД). Многие по привычке называют её просто базой данных, но это некорректно — разница между двумя этими понятиями примерно такая же, как между библиотекой и библиотекарем. При этом в роли первой выступают данные, а в роли второго — непосредственно СУБД. Именно она проводит все сложные манипуляции с данными: сортирует, добавляет, удаляет, находит, отображает по запросу пользователя и так далее.

Чтобы к данным было удобнее обращаться, MySQL хранит их в виде связанных друг с другом таблиц. Такая модель называется реляционной, и она далеко не нова. Первыми её стали использовать банки и госучреждения ещё в 1970-х, чтобы организовать огромные пласты данных в единую систему и ускорить транзакции.

Вот упрощённый пример реляционной базы данных для импровизированного онлайн-кинотеатра — есть три отдельных таблицы для фильмов, пользователей и отзывов, которые связаны между собой специальными ключами (столбец ID).

Изображение: Skillbox Media

Сама же 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). Это логические структуры, которые описывают организацию таблиц и связей между ними в базе данных. Одна база данных может содержать несколько схем.

Один из возможных вариантов отображения логической схемы MySQL
Изображение: shibha20 / GitHub

Клиенты. Веб-приложения, приложения на языках программирования (например, Python, Java) или инструменты администрирования, которые отправляют SQL-запросы серверу MySQL для выполнения операций чтения, записи, обновления и удаления данных.

SQL. Это универсальный язык общения с реляционными базами данных. И хотя на чистом SQL не говорит ни одна СУБД, версия языка в MySQL максимально близка к оригиналу. Но, как и в любом диалекте, в нём есть свои особенности.

Давайте для примера напишем код, который создаст в базе данных таблицу с информацией о читателях Skillbox Media:

CREATE TABLE skillbox_readers (
    id INT AUTO_INCREMENT,
    name VARCHAR(100),
    email VARCHAR(100),
    join_date DATE,
    PRIMARY KEY(id)
);

INSERT INTO skillbox_readers (name, email, join_date)
VALUES ('Иван Иванов', 'ivanov@example.com', '2024-01-01'),
       ('Мария Петрова', 'petrova@example.com', '2024-01-02'),
       ('Алексей Сидоров', 'sidorov@example.com', '2024-01-03');

А теперь — отсортируем читателей по дате добавления в базу:

SELECT *
FROM skillbox_readers
ORDER BY join_date ASC;

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

Бэкапы и восстановление. MySQL предоставляет инструменты для создания резервных копий данных и их восстановления в случае сбоя. Бэкапы в MySQL бывают двух видов: физические и логические. Первый делает копию всех файлов на диске без табличной структуры, второй — делает полный дамп базы. О преимуществах и недостатках этих подходов можно почитать здесь.

Для чего нужна MySQL

Как мы уже успели выяснить, главная задача MySQL — эффективно хранить, управлять и извлекать данные по запросу. Теперь давайте разберёмся, что это означает, на конкретных примерах.

Удобное администрирование баз данных

Для этого в MySQL есть мощная графическая среда Workbench. В ней есть все нужные инструменты работы с базами данных: от создания до эксплуатации. Визуализировать модель базы данных? Пожалуйста! Вручную построить связи между таблицами? Не вопрос. Редактировать данные в них, как в каком-нибудь Excel? Раз плюнуть. Про удобный редактор SQL-запросов и говорить не стоит.

Скриншот: MySQL / Skillbox Media

Можно администрировать базы данных и через браузер. Для этого существует опенсорсное приложение 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. по реализации продуктов — социальных сетей Фейсбук и Инстаграм на территории Российской Федерации по основаниям осуществления экстремистской деятельности».

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована