Все продукты
Все сервисы VK Cloud

MySQL

В предыдущих разделах вы развернули и поэкспериментировали с PostgreSQL в VK Cloud, рассмотрели преимущества этой СУБД и специфику ее работы. В этом разделе вы пройдете аналогичный путь, но уже для MySQL. Мы рассмотрим, чем различаются эти две СУБД и какова специфика их реализации в облачных сервисах. Для этого вам предстоит изучить:

  • Как появился и развивался проект MySQL?
  • Почему MySQL один из самых востребованных продуктов на рынке?
  • Какие способы реализации MySQL существуют в облачных сервисах?
  • Практика: как создать кластер MySQL в VK Cloud?

Ключевые технологии и инструменты VK Cloud в этой теме: MySQL

Немного об истории MySQL

MySQL — это одна из самых популярных систем управления реляционными базами данных с открытым исходным кодом. Ее история начинается в 1995 году, когда компания MySQL AB создала надежную и доступную СУБД для малых и средних предприятий. В 2008 эта СУБД стала гораздо производительнее, а благодаря поддержке многопользовательской среды ее часто стали выбирать для веб-приложений.

В 2010 MySQL стала принадлежать Oracle, и сейчас эта СУБД используется миллионами разработчиков по всему миру и поддерживает множество различных приложений, от небольших веб-сайтов до крупных корпоративных систем.

m1_d892fa15e9.png

Преимущества и недостатки MySQL

Преимущества
  1. Обеспечивает быструю обработку запросов и эффективное использование ресурсов. Это делает ее идеальной для веб-приложений и других высоконагруженных систем.
  2. Проста в установке и управлении. Она доступна даже для разработчиков с небольшим опытом в администрировании баз данных.
  3. Проект с открытым исходным кодом. Ее можно свободно использовать, изменять и распространять. Это способствует развитию сообщества разработчиков вокруг продукта.
  4. Универсальна. Поддерживает множество различных операционных систем и интегрируется с большинством популярных языков программирования и фреймворков.
Недостатки
  1. Хотя MySQL поддерживает ACID-транзакции, не все его механизмы хранения данных полностью совместимы с ACID. Это может ограничить использование MySQL в приложениях, требующих высокой надежности транзакций.
  2. В сравнении с некоторыми другими СУБД, MySQL имеет ограничения по горизонтальной масштабируемости. Это может создать проблемы при работе с очень большими объемами данных.
  3. Механизмы хранения данных в MySQL (такие как InnoDB и MyISAM) имеют разные возможности и ограничения, что может затруднить выбор и настройку базы данных.
Вопрос 1/2

Версии MySQL для облачных серверов и варианты их реализации

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

Single Instance

Конфигурация Single Instance представляет собой один инстанс базы данных MySQL. Это самый простой и доступный вариант развертывания, подходящий для небольших приложений, тестовых сред и сценариев разработки.

Особенности:

  • Простота и удобство. Легко устанавливается и управляется, не требует сложной настройки.
  • Низкие затраты. Минимальные ресурсы и стоимость обслуживания.
  • Ограниченная отказоустойчивость. Нет встроенной избыточности. При сбое инстанса данные могут быть временно недоступны.

Применение. Single Instance используется для разработки, тестирования и небольших приложений, где высокая доступность не является критическим требованием.

Master-Replica

Конфигурация Master-Replica включает один мастер-инстанс и одну или несколько реплик. Реплики получают данные от мастера и могут использоваться для распределения нагрузки на чтение и резервного копирования.

Особенности:

  • Асинхронная репликация. Мастер-узел передает изменения репликам через лог бинарных изменений (binlog). Реплики применяют эти изменения с задержкой, что обеспечивает высокую производительность.
  • Синхронная репликация. Опция полусинхронной репликации, где мастер ждет подтверждения хотя бы от одной реплики перед завершением транзакции, что снижает риск потери данных.
  • Failover. В случае сбоя мастера, администраторы могут вручную или автоматически переключить одну из реплик на роль мастера, используя инструменты вроде MHA (MySQL High Availability) или Orchestrator.

Применение. Master-Replica подходит для приложений, требующих высокой производительности и балансировки нагрузки на чтение, в которых не критична моментальная консистентность данных.

Cluster

MySQL Cluster представляет собой распределенную СУБД, обеспечивающую горизонтальную масштабируемость и высокую доступность за счет синхронной репликации данных на нескольких узлах. В VK эта схема реализована через инструмент Galera.

Особенности:

  • Архитектура. Кластер состоит из трех типов узлов: -- Узлы управления (management nodes). Отвечают за управление кластером и координацию работы узлов. -- Узлы хранения данных (data nodes). Хранят данные и выполняют транзакции. Данные синхронно реплицируются между этими узлами. -- SQL-узлы (SQL nodes). Предоставляют интерфейс для выполнения SQL-запросов.
  • Синхронная репликация. Данные реплицируются на несколько узлов хранения, что обеспечивает высокую доступность и целостность данных даже при сбое одного или нескольких узлов.
  • Автоматический failover. В случае сбоя узла система автоматически переключает запросы на доступные узлы, минимизируя время простоя.

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

Вопрос 1/3

Таким образом, MySQL так же можно использовать в самом разнообразном формате.Подробнее про MySQL и много полезных ссылок вы можете почитать в документации.

Практика: Создание БД MySQL и подключение к приложению

Вы уже создавали кластер в разделе про PostgreSQL. Поэтому здесь мы пойдем немного иным путем — сначала настроим MySQL single, чтобы посмотреть как работать с этим типом конфигурации Затем подключим Wordpress, поскольку он работает только с MySQL — так вы сможете посмотреть, как база взаимодействует с приложением.

Шаг 1. Подготовка настройки Firewall

Для каждой базы данных нужно настраивать права доступа в соответствии с принципом минимальных привилегий. Поэтому давайте начнем практику с того, что создадим новую группу безопасности.

1.1. Откройте Виртуальные сети → Настройки firewall. Выберите Добавить. Введите имя mysql и описание по желанию.

m2_9bac96d651.png

1.2. Добавьте для существующей группы безопасности “Web” новое правило на входящий трафик и разрешите доступ по протоколу TCP на порт 3306. Любые сетевые приложения, работают на разных портах TCP, обычно закрепленных за приложением, и это нам пригодится.

Если у вас нет группы безопасности “Web”, создайте ее еще раз. Для всех приложений всегда рекомендуется использовать отдельные группы безопасности для успешной реализации принципа минимальных привилегий.

m3_7e5f7eb11c.png

Шаг 2. Создание БД MySQL (Single)

2.1. Зайдите в Инстансы баз данных и нажмите Создать базу данных. Выберите MySQL

m5_4f3767ab98.png

2.2. Выберите Single.

m8_ccb06ea895.png

2.3. Назовите БД “wordpress-db”. Остальные настройки — по умолчанию.

m9_d0b255be1a.png

2.4. В разделе сети добавьте созданную ранее группу безопасности “mysql”. Разместите БД в приватной сети с выключенным “Внешним IP”.

m10_5acec2ec5e.png

2.5. В отличие от конфигурации Cluster, в конфигурации Single можно сразу создать реплику. Мы ее использовать не будем — можно создать, а можно не создавать.

m01_faa0649961.png

2.6. В разделе настройки базы данных укажите имя БД “wordpress-db”, имя пользователя “wordpress”, пароль “wordpressDB123!2”.

m03_4b0ee1466c.png

2.7. Нажмите Создать базу данных и подождите.

Шаг 3. Настройка параметров

3.1. Если нажать на название созданной БД, вы сможете просмотреть все важные параметры и информацию. Здесь почти все аналогично PostgreSQL, так что если что-то забыли — посмотрите в прошлую практику. Меняются только отдельные детали — например, доступные расширения и другие специфичные для конкретного типа БД параметры.

3.2. В разделе с виртуальными машинами можно получить информацию о мониторинге для своих экземпляров БД.

Шаг 4. Установка приложения WordPress

WordPress — свободно распространяемая система управления содержимым сайта с открытым исходным кодом, написанная на PHP. В качестве сервера базы данных ей нужен именно MySQL. Именно поэтому мы будем использовать этот стек для демонстрации в этой и следующей темах.

Сначала потребуется поднять виртуальную машину на базе ОС Ubuntu 22.04 и подключить на нее группу безопасности “web”. Вспомнить, как создавать виртуальную машину, можно в практике предыдущего модуля. Как только ВМ будет готова к использованию, подключитесь к ней по SSH и выполните команды ниже для установки Wordpress:

sudo su
apt-get update

apt install -y apache2 \
   ghostscript \
   libapache2-mod-php \
   php \
   php-bcmath \
   php-curl \
   php-imagick \
   php-intl \
   php-json \
   php-mbstring \
   php-mysql \
   php-xml \
   php-zip
mkdir -p /srv/www
chown www-data: /srv/www
curl https://wordpress.org/latest.tar.gz | sudo -u www-data tar zx -C /srv/www
cat > /etc/apache2/sites-available/wordpress.conf << EOF
<VirtualHost *:80>
   DocumentRoot /srv/www/wordpress
   <Directory /srv/www/wordpress>
       Options FollowSymLinks
       AllowOverride Limit Options FileInfo
       DirectoryIndex index.php
       Require all granted
   </Directory>
   <Directory /srv/www/wordpress/wp-content>
       Options FollowSymLinks
       Require all granted
   </Directory>
</VirtualHost>
EOF
a2ensite wordpress
a2enmod rewrite
a2dissite 000-default
service apache2 reload

Шаг 5. Настройка доступа к БД

5.1. Чтобы подключить установленное приложение к БД, нужно задать некоторые переменные в терминал:

# IP-адрес DB хоста
DB_HOST=10.0.3.97 
# имя пользователя, которое мы указывали при установке
DB_USER=wordpress 
# имя базы данных, которое мы указывали при установке
DB_NAME=wordpress-db 
# пароль пользователя, которое мы
DB_PASSWORD=’wordpressDB123!2’  указывали при установке

5.2. Пора запустить последние команды:

sudo -u www-data cp /srv/www/wordpress/wp-config-sample.php /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i "s/localhost/${DB_HOST}/" /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i "s/database_name_here/${DB_NAME}/" /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i "s/username_here/${DB_USER}/" /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i "s/password_here/${DB_PASSWORD}/" /srv/www/wordpress/wp-config.php
sudo -u www-data sed -i "s/put your unique phrase here/halo/" /srv/www/wordpress/wp-config.php

Шаг 6. Завершение настройки и проверка работы

Попробуйте зайти на публичный IP-адрес машины, на которой вы выполняли все эти команды. Если все сделано правильно, вы увидите приветствие от Wordpress с предложением завершить настройку.

Выберите язык:

wp_971f2a48d7.png

Заполните все поля самостоятельно:

После авторизации на сайте вы попадете внутрь:

wp3_5c3838a686.png

MySQL подключена к VK Cloud — все работает.

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

Подведем итоги

MySQL — одна из самых популярных баз данных. Вы рассмотрели ее на практике, поняли принципы ее работы и создали, подключили и настроили MySQL в облачной платформе. А еще интегрировали ее с WordPress.

Дальше мы еще поговорим про не менее популярные и важные сервисы, связанные с хранением данных.

Вопрос 1/10