Упражнение: Перенос локальной базы данных 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 для размещения новой базы данных вашей компании.

  1. В веб-браузере откройте новую вкладку и перейдите на Портал Azure.

  2. Щелкните + Создать ресурс.

  3. В поле Поиск в Marketplace введите База данных Azure для MySQL и нажмите клавишу "ВВОД".

  4. На странице База данных Azure для MySQL щелкните Создать.

  5. На странице "Выбор База данных Azure для MySQL развертывания" в разделе "Гибкий сервер" выберите "Создать".

  6. На странице Создать сервер MySQL введите следующие данные, а затем нажмите Проверить и создать:

    Свойство Значение
    Группа ресурсов migrate-mysql
    Имя сервера adventureworksnnn, где nnn — это суффикс, позволяющий сделать имя сервера уникальным
    Источник данных Не допускается
    Location Выберите ближайшее к вам расположение
    Версия 5.7
    Вычисления и хранение Выберите Настроить сервер, ценовую категорию Базовый, а затем нажмите кнопку ОК
    Имя администратора awadmin
    Password Pa55w.rdDemo
    Подтверждение пароля Pa55w.rdDemo
  7. На странице Отзыв и создание выберите Создать. Прежде чем продолжить, дождитесь завершения операции создания службы.

  8. После создания службы щелкните Перейти к ресурсу.

  9. Выберите Безопасность подключения.

  10. На странице Безопасность подключения задайте параметру Разрешить доступ к службам Azure значение Да.

  11. В списке правил брандмауэра добавьте правило с именем VM и задайте параметрам Начальный IP-адрес и Конечный IP значение, являющееся IP-адресом виртуальной машины, на которой запущен сервер MySQL. Этот IP-адрес указан в последней строке информационного вывода службы Cloud Shell.

  12. Выберите Добавить текущий IP-адрес клиента, чтобы разрешить также доступ клиентскому компьютеру к базе данных.

  13. Нажмите кнопку Сохранить и дождитесь обновления правил брандмауэра.

  14. Чтобы создать новую базу данных в службе базы данных 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 для экспорта схемы базы данных.

  1. Чтобы узнать IP-адрес существующей виртуальной машины, выполните следующую команду Azure CLI.

    MYSQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-mysql \
        --name mysqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $MYSQLIP
    
  2. Подключитесь к прежнему серверу базы данных по протоколу SSH. Введите Pa55w.rdDemo в качестве пароля.

    ssh azureuser@$MYSQLIP
    
  3. Экспортируйте схему для базы данных источника с помощью служебной программы mysqldump:

    mysqldump -u azureuser -pPa55w.rd adventureworks --no-data > adventureworks_mysql_schema.sql
    

Импорт схемы в целевую базу данных

  1. Чтобы подключиться к серверу azureadventureworks[nnn], выполните в Cloud Shell следующую команду. Замените два экземпляра [nnn] суффиксом для службы. Обратите внимание, что в имени пользователя используется суффикс @adventureworks[nnn]. При запросе пароля введите Pa55w.rdDemo.

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo
    
  2. Чтобы создать пользователя с именем azureuser и задать для этого пользователя пароль Pa55w.rd, выполните следующие команды. Вторая инструкция предоставляет пользователю azureuser необходимые привилегии для создания объектов в базе данных azureadventureworks.

    GRANT SELECT ON *.* TO 'azureuser'@'localhost' IDENTIFIED BY 'Pa55w.rd';
    GRANT CREATE ON *.* TO 'azureuser'@'localhost';
    
  3. Выполните следующие команды, чтобы создать базу данных adventureworks.

    CREATE DATABASE adventureworks;
    
  4. Закройте служебную программу MySQL с помощью команды quit.

  5. Импортируйте схему 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

  1. Вернитесь на портал Azure.

  2. Щелкните Все службы, затем Подписки, после чего выберите свою подписку.

  3. На странице подписки в разделе Параметры выберите Поставщики ресурсов.

  4. В поле Фильтровать по имени введите DataMigration, а затем выберите Microsoft.DataMigration.

  5. Если поставщик Microsoft.DataMigration не зарегистрирован, щелкните Зарегистрировать и подождите, пока значение в поле Состояние изменится на Зарегистрировано. Чтобы увидеть изменение состояния, может потребоваться нажать кнопку Обновить.

  6. Выберите Создать ресурс, в поле Поиск в Marketplace введите Azure Database Migration Service и нажмите клавишу "ВВОД".

  7. На странице Azure Database Migration Service щелкните Создать.

  8. На странице Создание службы миграции введите следующие сведения, а затем нажмите кнопку Далее: сеть>>.

    Свойство Значение
    Выберите группу ресурсов migrate-mysql
    Имя службы миграции adventureworks_migration_service
    Location Выберите ближайшее к вам расположение
    Режим службы Azure
    Ценовая категория Премиум с четырьмя виртуальными ядрами
  9. На странице Сеть выберите виртуальную сеть MySQLvnet/mysqlvmSubnet. Эта сеть была создана в процессе установки.

  10. Выберите Просмотр и создание, а затем нажмите кнопку Создать. Дождитесь завершения операции по созданию Database Migration Service. Это займет несколько минут.

  11. На портале Azure перейдите на страницу службы Database Migration Service.

  12. Щелкните элемент Новый проект миграции.

  13. На странице Новый проект миграции введите следующие сведения, а затем щелкните Создать и запустить действие.

    Свойство Значение
    Имя проекта adventureworks_migration_project
    Тип исходного сервера MySQL
    Целевая база данных для MySQL База данных Azure для MySQL
    Выберите тип действия Миграция данных через Интернет
  14. После запуска Мастера миграции на странице Выбор источника введите следующие данные.

    Свойство Значение
    Имя исходного сервера nn.nn.nn.nn (IP-адрес виртуальной машины Azure с MySQL)
    Порт сервера 3306
    Имя пользователя azureuser
    Password Pa55w.rd
  15. Нажмите Далее: Выбрать целевой объект>>.

  16. На странице Выбор целевого объекта введите следующие сведения.

    Свойство Значение
    Имя целевого сервера adventureworks[nnn].MySQL.database.azure.com
    Имя пользователя awadmin@adventureworks[nnn]
    Password Pa55w.rdDemo
  17. Нажмите кнопку Далее: Выбрать базу данных>>.

  18. На странице Выбор баз данных убедитесь, что для Исходной базы данных и Целевой базы данных задано значение adventureworks, а затем нажмите кнопку Далее: Настройка параметров миграции.

  19. На странице Настройка параметров миграции выберите Далее: Сводка>>.

  20. На странице Сводка о миграции в поле Имя действия введите AdventureWorks_Migration_Activity, а затем нажмите кнопку Начать миграцию.

  21. На странице AdventureWorks_Migration_Activity щелкайте кнопку Обновить с интервалом в 15 секунд. По мере выполнения операции состояние миграции будет меняться.

  22. Дождитесь, пока в столбце Сведения о миграции не появится значение Все готово к прямой миграции.

Изменение данных и прямая миграция на новую базу данных

  1. Вернитесь на страницу AdventureWorks_Migration_Activity на портале Azure.

  2. Выберите базу данных adventureworks.

  3. На странице adventureworks убедитесь, что состояние всех таблиц обозначено как ЗАВЕРШЕНО.

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

  5. Вернитесь в Cloud Shell.

  6. Чтобы подключиться к базе данных adventureworks с MySQL на виртуальной машине, выполните следующую команду:

    mysql -pPa55w.rd adventureworks
    
  7. Выполните следующие инструкции 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);
    
  8. Закройте служебную программу mysql с помощью команды quit.

  9. Вернитесь на страницу adventureworks на портале Azure, а затем щелкните Обновить. Выполните прокрутку страницы до таблиц salesorderheader и salesorderdetail. Проверьте, что в таблице salesorderheader указано, что было удалено 3 строки, а в таблице sales.salesorderdetail было удалено 29 строк. Если обновления не применяются, проверьте наличие сообщения об Ожидающихся изменениях для базы данных.

  10. Выберите Запустить прямую миграцию.

  11. На странице Завершение прямой миграции выберите Подтвердить, а затем — Применить. Подождите, пока состояние не изменится на Завершено.

  12. Вернитесь в Cloud Shell.

  13. Чтобы подключиться к базе данных azureadventureworks с помощью службы базы данных Azure для MySQL, выполните следующую команду:

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
    
  14. Чтобы отобразить заказы 43659, 43660 и 43661 и сведения о них, выполните следующие инструкции SQL. Эти запросы показывают, что данные были переданы:

    SELECT * FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    SELECT * FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
    

    Первый запрос должен вернуть 3 строки. Второй запрос должен вернуть 29 строк.

  15. Закройте служебную программу mysql с помощью команды quit.

  16. Закройте SSH-подключение с помощью команды exit.

Очистка созданных ресурсов

Важно!

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

  1. В Cloud Shell выполните указанную ниже команду, чтобы удалить группу ресурсов.
az group delete --name migrate-mysql