연습: 온-프레미스 MySQL 데이터베이스를 Azure Database for MySQL로 마이그레이션

완료됨

이 연습에서는 MySQL 데이터베이스를 Azure로 마이그레이션합니다. 가상 머신에서 실행되는 기존 MySQL 데이터베이스를 Azure Database for MySQL로 마이그레이션합니다.

AdventureWorks 조직의 데이터베이스 개발자로 근무하고 있다고 가정해 보겠습니다. AdventureWorks는 10년 넘게 자전거 및 자전거 부품을 최종 소비자 및 배포자에게 직접 판매했습니다. 시스템은 현재 Azure VM에서 MySQL을 사용하여 실행되는 데이터베이스에 정보를 저장합니다. 하드웨어 합리화 연습의 일부로 AdventureWorks는 데이터베이스를 Azure 관리형 데이터베이스로 이동하려고 합니다. 이 마이그레이션을 수행하라는 요청을 받았습니다.

중요

Azure Data Migration Service는 체험용 Azure 샌드박스 환경에서 지원되지 않습니다. 자신의 개인 구독에서 이러한 단계를 수행할 수도 있고 단순히 다음 내용을 보고 데이터베이스 마이그레이션 방법을 알아볼 수도 있습니다.

환경 설정

Cloud Shell에서 다음 Azure CLI 명령을 실행하여 Adventure Works 데이터베이스 복사본으로 MySQL을 실행하는 가상 머신을 생성합니다. 마지막 명령은 새 가상 머신의 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 Database for MySQL 서버 및 데이터베이스 생성

프로젝트의 첫 번째 단계에서는 회사의 새 데이터베이스를 호스트할 Azure Database for MySQL을 만들어야 합니다.

  1. 웹 브라우저를 사용하여 새 탭을 열고 Azure Portal로 이동합니다.

  2. + 리소스 생성를 선택합니다.

  3. Marketplace 검색 상자에서 Azure Database for MySQL을 입력하고 Enter 키를 누릅니다.

  4. Azure Database for MySQL 페이지에서 생성를 선택합니다.

  5. Azure Database for MySQL 배포 옵션 선택 페이지의 유연한 서버에서 생성를 선택합니다.

  6. MySQL 서버 생성 페이지에서 다음 세부 정보를 입력한 다음, 검토 + 생성를 선택합니다.

    속성
    Resource group migrate-mysql
    서버 이름 adventureworksnnn, 여기서 nnn은 서버 이름을 고유하게 생성 위해 선택한 접미사
    데이터 원본 없음
    위치 가장 가까운 위치를 선택합니다.
    버전 5.7
    컴퓨팅 + 스토리지 서버 구성을 선택하고 기본 가격 책정 계층을 선택한 다음, 확인을 선택합니다.
    관리자 사용자 이름 awadmin
    암호 Pa55w.rdDemo
    암호 확인 Pa55w.rdDemo
  7. 리뷰 + 생성 페이지에서 생성를 선택합니다. 서비스가 만들어질 때까지 기다린 다음, 계속합니다.

  8. 서비스가 만들어지면 리소스로 이동을 선택합니다.

  9. 연결 보안을 선택합니다.

  10. 연결 보안 페이지에서 Azure 서비스에 대한 액세스 허용로 설정합니다.

  11. 방화벽 규칙 목록에서 VM이라는 규칙을 추가하고 시작 IP 주소종료 IP 주소를 MySQL 서버를 실행하는 가상 머신의 IP 주소로 설정합니다. Cloud Shell에서 마지막 줄로 표시되는 IP 주소입니다.

  12. 현재 클라이언트 IP 주소 추가를 선택하여 클라이언트 머신도 데이터베이스에 액세스할 수 있도록 합니다.

  13. 저장하고 방화벽 규칙이 업데이트될 때까지 기다립니다.

  14. Cloud Shell 프롬프트에서 다음 명령을 실행하여 Azure Database for MySQL 서비스에서 새 데이터베이스를 생성합니다. [nnn]을 Azure Database for 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"
    }
    

대상 데이터베이스에서 사용할 스키마 내보내기

이제 Cloud Shell을 사용하는 기존 MySQL VM에 연결하여 데이터베이스 스키마를 내보내겠습니다.

  1. 다음 Azure CLI 명령을 실행하여 기존 VM의 IP 주소를 확인합니다.

    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. Cloud Shell에서 다음 명령을 실행하여 azureadventureworks[nnn] 서버에 연결합니다. 두 [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. quit 명령을 사용하여 mysql 유틸리티를 닫습니다.

  5. adventureworks 스키마를 Azure Database for MySQL 서비스로 가져옵니다. azureuser로 가져오기를 수행하므로 메시지가 표시되면 암호 Pa55w.rd를 입력합니다.

    mysql -h adventureworks[nnnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks < adventureworks_mysql_schema.sql
    

Database Migration Service를 사용하여 온라인 마이그레이션 수행

  1. Azure Portal로 다시 전환합니다.

  2. 모든 서비스를 클릭하고 구독을 클릭한 다음, 사용자 구독을 클릭합니다.

  3. 구독 페이지의 설정에서 리소스 공급자를 클릭합니다.

  4. 이름으로 필터링 상자에 DataMigration을 입력한 다음, Microsoft.DataMigration을 클릭합니다.

  5. Microsoft.DataMigration이 등록되어 있지 않은 경우 등록을 클릭하고 상태등록됨으로 변경될 때까지 기다립니다. 상태 변경을 보려면 새로 고침을 클릭해야 할 수도 있습니다.

  6. 리소스 생성를 선택하고 Marketplace 검색 상자에 Azure Database Migration Service를 입력한 다음 Enter 키를 누릅니다.

  7. Azure Database Migration Service 페이지에서 생성를 선택합니다.

  8. 마이그레이션 서비스 생성 페이지에서 다음 세부 정보를 입력한 후 다음: 네트워킹 >>을 선택합니다.

    속성
    리소스 그룹 선택 migrate-mysql
    마이그레이션 서비스 이름 adventureworks_migration_service
    위치 가장 가까운 위치를 선택합니다.
    서비스 모드 Azure
    가격 책정 계층 프리미엄, vCore 4개
  9. 네트워킹 페이지에서 MySQLvnet/mysqlvmSubnet 가상 네트워크를 선택합니다. 이 네트워크는 설정의 일부로 만들었습니다.

  10. 검토 + 생성를 선택한 다음, 생성를 선택합니다. Database Migration Service를 만드는 동안 기다립니다. 이 작업은 몇 분 정도 걸립니다.

  11. Azure Portal에서 Database Migration Service 페이지로 이동합니다.

  12. 새 마이그레이션 프로젝트를 선택합니다.

  13. 새 마이그레이션 프로젝트 페이지에서 다음 세부 정보를 입력한 다음, 작업 생성 및 실행을 선택합니다.

    속성
    프로젝트 이름 adventureworks_migration_project
    원본 서버 유형 MySQL
    MySQL 대상 데이터베이스 Azure Database for MySQL
    활동 유형 선택 온라인 데이터 마이그레이션
  14. 마이그레이션 마법사가 시작되면 원본 선택 페이지에서 다음 세부 정보를 입력합니다.

    속성
    원본 서버 이름 nn.nn.nn.nn(MySQL을 실행하는 Azure 가상 머신의 IP 주소)
    서버 포트 3306
    사용자 이름 azureuser
    암호 Pa55w.rd
  15. 다음: 대상 선택>>을 선택합니다.

  16. 대상 선택 페이지에서 다음 세부 정보를 입력합니다.

    속성
    대상 서버 이름 adventureworks[nnn].MySQL.database.azure.com
    사용자 이름 awadmin@adventureworks[nnn]
    암호 Pa55w.rdDemo
  17. 다음: 데이터베이스 선택>>을 선택합니다.

  18. 데이터베이스 선택 페이지에서 원본 데이터베이스대상 데이터베이스 둘 다 adventureworks로 설정되어 있는지 확인하고 다음: 마이그레이션 설정 구성을 선택합니다.

  19. 마이그레이션 설정 구성 페이지에서 다음: 요약>>을 선택합니다.

  20. 마이그레이션 요약 페이지의 작업 이름 상자에 AdventureWorks_Migration_Activity를 입력하고 마이그레이션 시작을 선택합니다.

  21. AdventureWorks_Migration_Activity 페이지에서 15초 간격으로 새로 고침을 선택합니다. 진행 중인 마이그레이션 작업의 상태가 표시됩니다.

  22. 마이그레이션 세부 정보 열이 전환 준비 완료로 변경될 때까지 기다립니다.

데이터 수정 및 새 데이터베이스로 전환

  1. Azure Portal의 AdventureWorks_Migration_Activity 페이지로 돌아갑니다.

  2. adventureworks 데이터베이스를 선택합니다.

  3. adventureworks 페이지에서 모든 테이블의 상태가 완료로 표시되었는지 확인합니다.

  4. 증분 데이터 동기화를 선택합니다. 모든 테이블의 상태가 동기화 중으로 표시되었는지 확인합니다.

  5. Cloud Shell로 다시 전환합니다.

  6. 다음 명령을 실행하여 가상 머신에서 MySQL을 사용하여 실행 중인 adventureworks 데이터베이스에 연결합니다.

    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. quit 명령을 사용하여 mysql 유틸리티를 닫습니다.

  9. Azure Portal의 adventureworks 페이지로 돌아가서 새로 고침을 선택합니다. salesorderheadersalesorderdetail 테이블에 대한 페이지로 스크롤합니다. salesorderheader 테이블에서 3개 행이 삭제되고 sales.salesorderdetail 테이블에서 29개 행이 제거된 것을 확인합니다. 적용된 업데이트가 없으면 데이터베이스에 대해 보류 중인 변경 내용이 있는지 확인합니다.

  10. 전환 시작을 선택합니다.

  11. 전환 완료 페이지에서 확인을 선택한 후 적용을 선택합니다. 상태가 완료로 변경될 때까지 기다립니다.

  12. Cloud Shell로 돌아갑니다.

  13. 다음 명령을 실행하여 Azure Database for MySQL 서비스를 통해 실행 중인 azureadventureworks 데이터베이스에 연결합니다.

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
    
  14. 다음 SQL 문을 실행하여 명령 및 43659, 43660, 43661 명령에 대한 세부 정보를 표시합니다. 이러한 쿼리는 데이터가 전송되었음을 보여 주기 위한 것입니다.

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

    첫 번째 쿼리는 3개 행을 반환합니다. 두 번째 쿼리는 29개 행을 반환합니다.

  15. quit 명령을 사용하여 mysql 유틸리티를 닫습니다.

  16. exit 명령을 사용하여 ssh 연결을 닫습니다.

생성된 리소스 정리

중요

자신의 개인 구독에서 이러한 단계를 수행한 경우 리소스를 개별적으로 삭제할 수도 있고 리소스 그룹을 삭제하여 전체 리소스 세트를 삭제할 수도 있습니다. 계속 실행되는 리소스에는 요금이 부과될 수 있습니다.

  1. Cloud Shell에서 다음 명령을 실행하여 리소스 그룹을 삭제합니다.
az group delete --name migrate-mysql