Упражнение: Перенос локальной базы данных MySQL в службу базы данных Azure для MySQL
В этом упражнении вам нужно выполнить перенос базы данных MySQL в Azure. Вам нужно перенести существующую базу данных MySQL, работающую на виртуальной машине, в службу базы данных Azure для MySQL.
Вы являетесь разработчиком баз данных в компании AdventureWorks. Эта компания уже более десяти лет напрямую продает велосипеды и запчасти к ним конечным потребителям и распространителям. Данные хранятся в базе данных, которая в настоящее время работает под управлением MySQL на виртуальной машине Azure. Во время процесса рационализации оборудования компания AdventureWorks планирует переместить базу данных в базу данных, управляемую Azure. Вас попросили выполнить эту миграцию.
Важно!
Служба Azure Data Migration Service не поддерживается в бесплатной версии песочницы Azure. Эти действия можно выполнить в рамках собственной подписки или просто ознакомиться с ними, чтобы понять, как выполнять миграцию базы данных.
Настройка среды
Чтобы создать виртуальную машину, на которой работает MySQL с копией базы данных AdventureWorks, выполните в Cloud Shell следующие команды интерфейса командной строки Azure. Последние команды выводят IP-адрес новой виртуальной машины.
az account list-locations -o table
az group create \
--name migrate-mysql \
--location <CHOOSE A LOCATION FROM ABOVE NEAR YOU>
az vm create \
--resource-group migrate-mysql \
--name mysqlvm \
--admin-username azureuser \
--admin-password Pa55w.rdDemo \
--image Ubuntu2204 \
--public-ip-address-allocation static \
--public-ip-sku Standard \
--size Standard_B2ms
az vm open-port \
--resource-group migrate-mysql \
--name mysqlvm \
--priority 200 \
--port '22'
az vm open-port \
--resource-group migrate-mysql \
--name mysqlvm \
--priority 300 \
--port '3306'
az vm run-command invoke \
--resource-group migrate-mysql \
--name mysqlvm \
--command-id RunShellScript \
--scripts "
# MySQL installation
sudo apt-get update && sudo apt-get upgrade -y
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server
# Disable Ubuntu Firewall bind mysql
sudo ufw disable
sudo bash << EOF
echo "bind-address=0.0.0.0" >> /etc/mysql/mysql.conf.d/mysqld.cnf
echo "log-bin" >> /etc/mysql/mysql.conf.d/mysqld.cnf
echo "server-id=99" >> /etc/mysql/mysql.conf.d/mysqld.cnf
EOF
sudo service mysql stop
sudo service mysql start
# Clone exercise code
sudo git clone https://github.com/MicrosoftLearning/DP-070-Migrate-Open-Source-Workloads-to-Azure.git /home/azureuser/workshop
# Add a password to mysql root user
sudo mysqladmin -u root password Pa55w.rd
# Use mysql to create users and an empty adventureworks
sudo mysql -u root -pPa55w.rd -e \"CREATE USER azureuser IDENTIFIED BY 'Pa55w.rd';GRANT ALL PRIVILEGES ON *.* TO azureuser;CREATE DATABASE adventureworks;\"
# Use mysql to import the adventureworks database
sudo mysql --user=azureuser --password=Pa55w.rd --database=adventureworks < /home/azureuser/workshop/migration_samples/setup/mysql/adventureworks/adventureworks.sql
sudo service mysql restart"
MYSQLIP="$(az vm list-ip-addresses \
--resource-group migrate-mysql \
--name mysqlvm \
--query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
--output tsv)"
echo $MYSQLIP
Выполнение этих команд занимает около 5 минут. Ждать завершения команд не нужно, можно перейти к следующим шагам.
Создание сервера и базы данных, предназначенных для службы базы данных Azure для MySQL
На первом этапе проекта необходимо создать службу базы данных Azure для MySQL для размещения новой базы данных вашей компании.
В веб-браузере откройте новую вкладку и перейдите на Портал Azure.
Щелкните + Создать ресурс.
В поле Поиск в Marketplace введите База данных Azure для MySQL и нажмите клавишу "ВВОД".
На странице База данных Azure для MySQL щелкните Создать.
На странице "Выбор База данных Azure для MySQL развертывания" в разделе "Гибкий сервер" выберите "Создать".
На странице Создать сервер MySQL введите следующие данные, а затем нажмите Проверить и создать:
Свойство Значение Группа ресурсов migrate-mysql Имя сервера adventureworksnnn, где nnn — это суффикс, позволяющий сделать имя сервера уникальным Источник данных Не допускается Location Выберите ближайшее к вам расположение Версия 5.7 Вычисления и хранение Выберите Настроить сервер, ценовую категорию Базовый, а затем нажмите кнопку ОК Имя администратора awadmin Password Pa55w.rdDemo Подтверждение пароля Pa55w.rdDemo На странице Отзыв и создание выберите Создать. Прежде чем продолжить, дождитесь завершения операции создания службы.
После создания службы щелкните Перейти к ресурсу.
Выберите Безопасность подключения.
На странице Безопасность подключения задайте параметру Разрешить доступ к службам Azure значение Да.
В списке правил брандмауэра добавьте правило с именем VM и задайте параметрам Начальный IP-адрес и Конечный IP значение, являющееся IP-адресом виртуальной машины, на которой запущен сервер MySQL. Этот IP-адрес указан в последней строке информационного вывода службы Cloud Shell.
Выберите Добавить текущий IP-адрес клиента, чтобы разрешить также доступ клиентскому компьютеру к базе данных.
Нажмите кнопку Сохранить и дождитесь обновления правил брандмауэра.
Чтобы создать новую базу данных в службе базы данных Azure для MySQL, выполните в командной строке Cloud Shell следующую команду. Замените [nnn] суффиксом, который использовался при создании службы базы данных Azure для MySQL. Замените [resource group] именем группы ресурсов, указанной для службы:
az MySQL db create \ --name azureadventureworks \ --server-name adventureworks[nnn] \ --resource-group migrate-mysql
После успешного создания базы данных должно появиться сообщение следующего вида:
{ "charset": "latin1", "collation": "latin1_swedish_ci", "id": "/subscriptions/nnnnnnnnnnnnnnnnnnnnnnnnnnnnn/resourceGroups/nnnnnn/providers/Microsoft.DBforMySQL/servers/adventureworksnnnn/databases/azureadventureworks", "name": "azureadventureworks", "resourceGroup": migrate-mysql, "type": "Microsoft.DBforMySQL/servers/databases" }
Экспорт схемы для использования в целевой базе данных
Теперь вам нужно подключиться к существующей виртуальной машине MySQL, используя Cloud Shell для экспорта схемы базы данных.
Чтобы узнать IP-адрес существующей виртуальной машины, выполните следующую команду Azure CLI.
MYSQLIP="$(az vm list-ip-addresses \ --resource-group migrate-mysql \ --name mysqlvm \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $MYSQLIP
Подключитесь к прежнему серверу базы данных по протоколу SSH. Введите Pa55w.rdDemo в качестве пароля.
ssh azureuser@$MYSQLIP
Экспортируйте схему для базы данных источника с помощью служебной программы mysqldump:
mysqldump -u azureuser -pPa55w.rd adventureworks --no-data > adventureworks_mysql_schema.sql
Импорт схемы в целевую базу данных
Чтобы подключиться к серверу azureadventureworks[nnn], выполните в Cloud Shell следующую команду. Замените два экземпляра [nnn] суффиксом для службы. Обратите внимание, что в имени пользователя используется суффикс @adventureworks[nnn]. При запросе пароля введите Pa55w.rdDemo.
mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo
Чтобы создать пользователя с именем azureuser и задать для этого пользователя пароль Pa55w.rd, выполните следующие команды. Вторая инструкция предоставляет пользователю azureuser необходимые привилегии для создания объектов в базе данных azureadventureworks.
GRANT SELECT ON *.* TO 'azureuser'@'localhost' IDENTIFIED BY 'Pa55w.rd'; GRANT CREATE ON *.* TO 'azureuser'@'localhost';
Выполните следующие команды, чтобы создать базу данных adventureworks.
CREATE DATABASE adventureworks;
Закройте служебную программу MySQL с помощью команды quit.
Импортируйте схему adventureworks в службу базы данных Azure для MySQL. Вы выполняете импорт в качестве пользователя azureuser, поэтому при появлении запроса введите пароль Pa55w.rd.
mysql -h adventureworks[nnnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks < adventureworks_mysql_schema.sql
Выполнение миграции по сети с помощью службы Azure Database Migration Service
Вернитесь на портал Azure.
Щелкните Все службы, затем Подписки, после чего выберите свою подписку.
На странице подписки в разделе Параметры выберите Поставщики ресурсов.
В поле Фильтровать по имени введите DataMigration, а затем выберите Microsoft.DataMigration.
Если поставщик Microsoft.DataMigration не зарегистрирован, щелкните Зарегистрировать и подождите, пока значение в поле Состояние изменится на Зарегистрировано. Чтобы увидеть изменение состояния, может потребоваться нажать кнопку Обновить.
Выберите Создать ресурс, в поле Поиск в Marketplace введите Azure Database Migration Service и нажмите клавишу "ВВОД".
На странице Azure Database Migration Service щелкните Создать.
На странице Создание службы миграции введите следующие сведения, а затем нажмите кнопку Далее: сеть>>.
Свойство Значение Выберите группу ресурсов migrate-mysql Имя службы миграции adventureworks_migration_service Location Выберите ближайшее к вам расположение Режим службы Azure Ценовая категория Премиум с четырьмя виртуальными ядрами На странице Сеть выберите виртуальную сеть MySQLvnet/mysqlvmSubnet. Эта сеть была создана в процессе установки.
Выберите Просмотр и создание, а затем нажмите кнопку Создать. Дождитесь завершения операции по созданию Database Migration Service. Это займет несколько минут.
На портале Azure перейдите на страницу службы Database Migration Service.
Щелкните элемент Новый проект миграции.
На странице Новый проект миграции введите следующие сведения, а затем щелкните Создать и запустить действие.
Свойство Значение Имя проекта adventureworks_migration_project Тип исходного сервера MySQL Целевая база данных для MySQL База данных Azure для MySQL Выберите тип действия Миграция данных через Интернет После запуска Мастера миграции на странице Выбор источника введите следующие данные.
Свойство Значение Имя исходного сервера nn.nn.nn.nn (IP-адрес виртуальной машины Azure с MySQL) Порт сервера 3306 Имя пользователя azureuser Password Pa55w.rd Нажмите Далее: Выбрать целевой объект>>.
На странице Выбор целевого объекта введите следующие сведения.
Свойство Значение Имя целевого сервера adventureworks[nnn].MySQL.database.azure.com Имя пользователя awadmin@adventureworks[nnn] Password Pa55w.rdDemo Нажмите кнопку Далее: Выбрать базу данных>>.
На странице Выбор баз данных убедитесь, что для Исходной базы данных и Целевой базы данных задано значение adventureworks, а затем нажмите кнопку Далее: Настройка параметров миграции.
На странице Настройка параметров миграции выберите Далее: Сводка>>.
На странице Сводка о миграции в поле Имя действия введите AdventureWorks_Migration_Activity, а затем нажмите кнопку Начать миграцию.
На странице AdventureWorks_Migration_Activity щелкайте кнопку Обновить с интервалом в 15 секунд. По мере выполнения операции состояние миграции будет меняться.
Дождитесь, пока в столбце Сведения о миграции не появится значение Все готово к прямой миграции.
Изменение данных и прямая миграция на новую базу данных
Вернитесь на страницу AdventureWorks_Migration_Activity на портале Azure.
Выберите базу данных adventureworks.
На странице adventureworks убедитесь, что состояние всех таблиц обозначено как ЗАВЕРШЕНО.
Выберите добавочную синхронизацию данных. Убедитесь, что состояние каждой таблицы помечается как синхронизация.
Вернитесь в Cloud Shell.
Чтобы подключиться к базе данных adventureworks с MySQL на виртуальной машине, выполните следующую команду:
mysql -pPa55w.rd adventureworks
Выполните следующие инструкции SQL, чтобы отобразить, а затем удалить заказы 43659, 43660 и 43661 из базы данных.
SELECT * FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661); DELETE FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661); DELETE FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
Закройте служебную программу mysql с помощью команды quit.
Вернитесь на страницу adventureworks на портале Azure, а затем щелкните Обновить. Выполните прокрутку страницы до таблиц salesorderheader и salesorderdetail. Проверьте, что в таблице salesorderheader указано, что было удалено 3 строки, а в таблице sales.salesorderdetail было удалено 29 строк. Если обновления не применяются, проверьте наличие сообщения об Ожидающихся изменениях для базы данных.
Выберите Запустить прямую миграцию.
На странице Завершение прямой миграции выберите Подтвердить, а затем — Применить. Подождите, пока состояние не изменится на Завершено.
Вернитесь в Cloud Shell.
Чтобы подключиться к базе данных azureadventureworks с помощью службы базы данных Azure для MySQL, выполните следующую команду:
mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
Чтобы отобразить заказы 43659, 43660 и 43661 и сведения о них, выполните следующие инструкции SQL. Эти запросы показывают, что данные были переданы:
SELECT * FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
Первый запрос должен вернуть 3 строки. Второй запрос должен вернуть 29 строк.
Закройте служебную программу mysql с помощью команды quit.
Закройте SSH-подключение с помощью команды exit.
Очистка созданных ресурсов
Важно!
Если вы выполняли описанные выше действия в своей личной подписке, можно удалять ресурсы по отдельности или группой для удаления сразу всего набора ресурсов. Ресурсы, которые продолжат работать, могут быть платными.
- В Cloud Shell выполните указанную ниже команду, чтобы удалить группу ресурсов.
az group delete --name migrate-mysql