Ejercicio: Migrar una base de datos MySQL local a Azure Database for MySQL

Completado

En este ejercicio, migrará una base de datos MySQL a Azure. Migrará una base de datos MySQL existente que se ejecuta en una máquina virtual a Azure Database for MySQL.

Trabaja como desarrollador de bases de datos para la organización AdventureWorks. AdventureWorks ha vendido bicicletas y piezas de bicicleta directamente a los consumidores finales y distribuidores durante más de una década. Sus sistemas almacenan información en una base de datos que se ejecuta actualmente con MySQL en una máquina virtual de Azure. Como parte de un ejercicio de la racionalización de hardware, AdventureWorks desea trasladar la base de datos a una base de datos administrada por Azure. Se le pidió realizar esta migración.

Importante

Azure Database Migration Service no se admite en el entorno de espacio aislado de Azure gratuito. Puede seguir estos pasos en su propia suscripción personal o, simplemente, puede seguir leyendo para entender cómo migrar la base de datos.

Configuración del entorno

Ejecute estos comandos de la CLI de Azure en Cloud Shell para crear una máquina virtual, con MySQL, con una copia de la base de datos de AdventureWorks. Los últimos comandos imprimirán la dirección IP de la máquina virtual nueva.

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

Estos comandos tardarán unos 5 minutos en completarse. No es necesario que espere, puede seguir con los pasos que aparecen a continuación.

Creación de la base de datos de Azure para la base de datos y el servidor MySQL

La primera fase del proyecto necesita crear una base de datos de Azure para MySQL con el fin de hospedar la base de datos nueva de la empresa.

  1. Abra una nueva pestaña en un explorador web y navegue hasta Azure Portal.

  2. Seleccione + Crear un recurso.

  3. En el cuadro Buscar en Marketplace, escriba Azure Database for MySQLy presione ENTRAR.

  4. En la página Azure Database for MySQL, seleccione Crear.

  5. En la página Seleccionar opción de implementación de Azure Database for MySQL, en Servidor flexible, seleccione Crear.

  6. En la página Crear servidor MySQL, escriba los detalles siguientes y seleccione Revisar y crear:

    Propiedad Valor
    Resource group migrate-mysql
    Nombre de servidor adventureworksnnn, donde nnn es un sufijo que elige para que el nombre del servidor sea único
    Origen de datos None
    Location Seleccione la ubicación más cercana.
    Versión 5.7
    Proceso y almacenamiento Seleccione Configurar servidor, seleccione el plan de tarifa Básico y, luego, Aceptar
    Nombre de usuario administrador awadmin
    Contraseña Pa55w.rdDemo
    Confirmación de la contraseña Pa55w.rdDemo
  7. En la página Revisar y crear, seleccione Crear. Espere a que se cree el servicio antes de continuar.

  8. Una vez creado el servicio, seleccione Ir al recurso.

  9. Seleccione Seguridad de la conexión.

  10. En la página Seguridad de la conexión, establezca Permitir el acceso a servicios de Azure en .

  11. En la lista de reglas de firewall, agregue una regla con el nombre VM y establezca el valor DIRECCIÓN IP INICIAL y DIRECCIÓN IP FINAL en la dirección IP de la máquina virtual que ejecuta el servidor MySQL. Es la dirección IP que aparece en la última línea en la instancia de Cloud Shell.

  12. Seleccione Agregar dirección IP del cliente actual para permitir también que la máquina cliente acceda a la base de datos.

  13. Guarde y espere a que se actualicen las reglas de firewall.

  14. En el símbolo del sistema de Cloud Shell, ejecute el comando siguiente para crear una base de datos nueva en el servicio Azure Database for MySQL. Reemplace [nnn] por el sufijo que usó al crear el servicio Azure Database for MySQL. Reemplace [resource group] por el nombre del grupo de recursos que especificó para el servicio:

    az MySQL db create \
    --name azureadventureworks \
    --server-name adventureworks[nnn] \
    --resource-group migrate-mysql
    

    Si la base de datos se crea correctamente, debería ver un mensaje similar al siguiente:

    {
          "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"
    }
    

Exportación del esquema que se va a usar en la base de datos de destino

Ahora se conectará a la máquina virtual de MySQL existente mediante la instancia de Cloud Shell para exportar el esquema de la base de datos.

  1. Ejecute este comando de la CLI de Azure para ver la dirección IP de la máquina virtual existente.

    MYSQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-mysql \
        --name mysqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $MYSQLIP
    
  2. Conéctese al servidor de base de datos anterior mediante SSH. Escriba Pa55w.rdDemo como la contraseña.

    ssh azureuser@$MYSQLIP
    
  3. Exporte el esquema para la base de datos de origen mediante la utilidad mysqldump:

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

Importación del esquema a la base de datos de destino

  1. En la instancia de Cloud Shell, ejecute el comando siguiente para conectarse al servidor azureadventureworks[nnn]. Reemplace las dos instancias de [nnn] por el sufijo del servicio. Tenga en cuenta que el nombre de usuario tiene el sufijo @adventureworks[nnn]. En la solicitud de contraseña, escriba Pa55w.rdDemo.

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo
    
  2. Ejecute los comandos siguientes para crear un usuario con el nombre azureuser y establezca la contraseña para este usuario en Pa55w.rd. La segunda instrucción proporciona al usuario azureuser los privilegios necesarios para crear objetos en la base de datos azureadventureworks.

    GRANT SELECT ON *.* TO 'azureuser'@'localhost' IDENTIFIED BY 'Pa55w.rd';
    GRANT CREATE ON *.* TO 'azureuser'@'localhost';
    
  3. Ejecute los comandos siguientes para crear una base de datos adventureworks.

    CREATE DATABASE adventureworks;
    
  4. Use el comando quit para cerrar la utilidad mysql.

  5. Importe el esquema adventureworks al servicio Azure Database for MySQL. Realiza la importación como azureuser, por lo que debe escribir la contraseña Pa55w.rd cuando se le pida.

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

Realización de una migración en línea con Database Migration Service

  1. Vuelva a Azure Portal.

  2. Haga clic en Todos los servicios, en Suscripciones y, a continuación, en su suscripción.

  3. En la página de la suscripción, en Configuración, haga clic en Proveedores de recursos.

  4. En el cuadro Filtrar por nombre, escriba DataMigration y haga clic en Microsoft.DataMigration.

  5. Si Microsoft.DataMigration no está registrado, haga clic en Registrar y espere a que Estado cambie a Registrado. Puede que sea necesario hacer clic en Actualizar para ver el cambio de estado.

  6. Seleccione Crear un recurso, en el cuadro Buscar en Marketplace, escriba Azure Database Migration Service y, luego, presione ENTRAR.

  7. En la página Azure Database Migration Service, seleccione Crear.

  8. En la página Crear el servicio de migración, escriba los detalles que se indican a continuación y, luego, seleccione Siguiente: Redes >>.

    Propiedad Valor
    Selección de un grupo de recursos migrate-mysql
    Nombre del servicio de migración adventureworks_migration_service
    Ubicación Seleccione la ubicación más cercana.
    Modo de servicio Azure
    Plan de tarifa Premium con 4 núcleos virtuales
  9. En la página Redes, seleccione la red virtual MySQLvnet/mysqlvmSubnet. Esta red se creó como parte de la configuración.

  10. Seleccione Revisar y crear y, luego, Crear. Espere mientras se crea Database Migration Service. Esta operación puede tardar unos minutos.

  11. En Azure Portal, vaya a la página de Database Migration Service.

  12. Seleccione Nuevo proyecto de migración.

  13. En la página Nuevo proyecto de migración, escriba los detalles siguientes y, luego, seleccione Crear y ejecutar una actividad.

    Propiedad Valor
    Nombre de proyecto adventureworks_migration_project
    Tipo de servidor de origen MySQL
    Base de datos para MySQL Azure Database for MySQL
    Elegir el tipo de actividad Migración de datos en línea
  14. Cuando se inicie el Asistente para migración, escriba los detalles siguientes en la página Selección del origen.

    Propiedad Valor
    Nombre de servidor de origen nn.nn.nn.nn (la dirección IP de la máquina virtual de Azure que ejecuta MySQL)
    Puerto del servidor 3306
    Nombre de usuario azureuser
    Contraseña Pa55w.rd.
  15. Seleccione Siguiente: Selección del destino>>.

  16. En la página Selección del destino, escriba estos detalles.

    Propiedad Valor
    Nombre del servidor de destino adventureworks[nnn].MySQL.database.azure.com
    Nombre de usuario awadmin@adventureworks[nnn]
    Contraseña Pa55w.rdDemo
  17. Seleccione Siguiente: Selección de las bases de datos>>.

  18. En la página Selección de las bases de datos, asegúrese de que tanto la Base de datos de origen como la Base de datos de destino estén establecidas en adventureworks y, luego, seleccione Siguiente: Configuración de los valores de la migración.

  19. En la página Configuración de los valores de la migración, seleccione Siguiente: Resumen>>.

  20. En la página Resumen de la migración, en el cuadro Nombre de la actividad, escriba AdventureWorks_Migration_Activity y luego, seleccione Iniciar la migración.

  21. En la página AdventureWorks_Migration_Activity, seleccione Actualizar a intervalos de 15 segundos. Verá el estado de la operación de migración a medida que progresa.

  22. Espere hasta que la columna DETALLES DE LA MIGRACIÓN cambie a A punto para la migración total.

Modificación de los datos y migración total a la base de datos nueva

  1. Vuelva a la página AdventureWorks_Migration_Activity en Azure Portal.

  2. Seleccione la base de datos adventureworks.

  3. En la página adventureworks, compruebe que el estado de todas las tablas esté marcado como COMPLETADO.

  4. Seleccione Sincronización de datos incrementales. Compruebe que el estado de cada tabla esté marcado como Sincronizando.

  5. Vuelva a la instancia de Cloud Shell.

  6. Ejecute el comando siguiente para conectarse a la base de datos adventureworks en ejecución mediante MySQL en la máquina virtual:

    mysql -pPa55w.rd adventureworks
    
  7. Ejecute las instrucciones SQL siguientes para mostrar y luego quitar los pedidos 43659, 43660 y 43661 de la base de datos.

    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. Use el comando quit para cerrar la utilidad mysql.

  9. Vuelva a la página adventureworks en Azure Portal y, luego, seleccione Actualizar. Desplácese a la página para ver las tablas salesorderheader y salesorderdetail. Compruebe que la tabla salesorderheader indica que se eliminaron 3 filas y que se quitaron 29 filas de la tabla sales.salesorderdetail. Si no se aplica ninguna actualización, compruebe que hay Cambios pendientes para la base de datos.

  10. Seleccione Iniciar migración total.

  11. En la página Migración total completa, seleccione Confirmar y, luego, seleccione Aplicar. Espere hasta que el estado cambie a Completado.

  12. Vuelva a Cloud Shell.

  13. Ejecute el comando siguiente para conectarse a la base de datos azureadventureworksen ejecución mediante el servicio Azure Database for MySQL.

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
    
  14. Ejecute las instrucciones SQL siguientes para mostrar los pedidos 43659, 43660 y 43661 y sus detalles. El propósito de estas consultas es mostrar que se han transferido los datos:

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

    La primera consulta debería devolver 3 filas. La segunda consulta debería devolver 29 filas.

  15. Use el comando quit para cerrar la utilidad mysql.

  16. Use el comando exit para cerrar la conexión SSH.

Limpieza de los recursos que creó

Importante

Si siguió estos pasos en su propia suscripción personal, puede eliminar los recursos de manera individual o eliminar el grupo de recursos para borrar todo el conjunto de recursos. Los recursos que se dejan en ejecución pueden costarle mucho dinero.

  1. Con Cloud Shell, ejecute este comando para eliminar el grupo de recursos:
az group delete --name migrate-mysql