Migración de la base de datos MySQL local a Azure

Completado

Una vez que una empresa toma la decisión de migrar a Azure Database for PostgreSQL, el paso siguiente es planear la migración de las bases de datos locales y elegir las herramientas para trasladar los datos.

Tras explorar cómo Azure Database for PostgreSQL admite y escala PostgreSQL en Azure, ahora deberá considerar cómo migrar las bases de datos locales existentes.

En esta unidad, aprenderá a crear una instancia del servicio Azure Database for PostgreSQL mediante Azure Portal. Si necesita crear muchas instancias de este servicio, puede generar un script para el proceso mediante la CLI de Azure.

Creación de servidores flexibles de Azure Database for PostgreSQL

En Azure Portal, escriba Servidores flexibles de Azure Database for PostgreSQL en el cuadro de búsqueda y seleccione Servidores flexibles de Azure Database for PostgreSQL.

Screenshot showing the Azure Database for PostgreSQL flexible servers item in the Azure portal.

Seleccione Crear en la hoja principal Servidor flexible y escriba los detalles del servicio. Estos detalles incluyen:

  • Grupo de recursos. Grupo de recursos para el servidor.

  • Nombre del servidor. Debe ser un nombre único que contenga entre 3 y 63 caracteres, solo letras minúsculas, números y guiones.

  • Región. Región del servidor.

  • Versión de PostgreSQL: seleccione la versión correspondiente a la base de datos local que va a migrar.

  • Tipo de carga de trabajo. Seleccione una opción en función de su carga de trabajo.

    • Proceso y almacenamiento. Seleccione Configurar servidor para establecer el plan de tarifa y especifique los recursos que necesita para el servicio. Las opciones se analizaron en la lección 1. Recuerde que, si selecciona los planes de tarifa De uso general u Optimizado para memoria, puede escalar y reducir verticalmente el número de núcleos de procesador virtual más adelante. Sin embargo, no se puede disminuir la cantidad de almacenamiento; solo puede aumentar una vez que se haya creado el servidor.
  • Nombre de usuario de administrador. El nombre de una cuenta de usuario que creará con privilegios administrativos. Azure crea algunas cuentas para su propio uso. No puede usar azure_superuser, azure_pg_admin, admin, administrator, root, guest, public ni ningún nombre que comience con pg_.

  • Contraseña. Debe contener entre 8 y 128 caracteres. Debe contener una combinación de letras mayúsculas y minúsculas, números y caracteres no alfanuméricos.

Screenshot showing a sample configuration for Azure Database for PostgreSQL flexible server in the Azure portal.

Haga clic en Revisar y crear para implementar el servicio. La implementación puede tardar varios minutos.

Una vez que se implemente el servicio, seleccione la opción Seguridad de la conexión y agregue las reglas de firewall adecuadas para permitir que los clientes se conecten, tal como se describe en el tema Conectividad de clientes en la lección 1. También debe seleccionar la opción Permitir el acceso a servicios de Azure.

Creación de una instancia de Azure Database for PostgreSQL con la CLI de Azure

Puede crear una instancia de Azure Database for PostgreSQL mediante el comando az postgres flexible-server create. La siguiente instrucción muestra un ejemplo que crea una instancia de servidor flexible. La mayoría de los parámetros se explican por sí solos, a excepción de los siguientes:

  • sku-name. Puede construirlo a partir de una combinación del plan de tarifa (B para Básico, GP para De uso general y MO para Optimizado para memoria), la generación de proceso (Gen4 o Gen5) y el número de núcleos de CPU virtuales. En el ejemplo siguiente, el servidor se crea con el plan de tarifa De uso general, con 4 núcleos de CPU de la generación de Gen5.
  • storage-size. Se trata de la cantidad de almacenamiento en disco que se necesita, especificada en megabytes. En el ejemplo siguiente, se asignan 10 gigabytes:
    az postgres flexible-server create \
    --location northeurope --resource-group testGroup \
    --name testserver --admin-user username --admin-password password \
    --sku-name Standard_B1ms --tier Burstable --public-access 153.24.26.117 --storage-size 128 \
    --tags "key=value" --version 13 --high-availability Enabled --zone 1 \
    --standby-zone 3
    

Realización de la migración en línea

Puede realizar una migración en línea de una instalación de PostgreSQL local a Azure Database for PostgreSQL con Azure Database Migration Service.

En el escenario en línea, Azure Database Migration Service copia todos los datos existentes en Azure y, a continuación, realiza continuamente una operación de sincronización desde la base de datos de origen. Las transacciones nuevas que se realicen en el sistema local se copian en la base de datos de Azure nueva. Este proceso continúa hasta que haya vuelto a configurar las aplicaciones cliente para usar la base de datos nueva en Azure; en ese momento, terminará la operación de sincronización.

Configuración del servidor de origen y exportación del esquema

El primer paso para realizar una migración en línea es preparar el servidor de origen para admitir el registro de escritura previa. En el servidor de origen, edite el archivo postgresql.config y configure los siguientes parámetros de registro de escritura previa. Para cambiar estos parámetros, reinicie el servidor (haga esto solo cuando se prevea que el sistema estará inactivo):

wal_level = logical
max_replication_slots = 5
max_wal_senders = 10

Después de reiniciar el servidor, use la utilidad pg_dump para exportar el esquema de la base de datos de origen:

pg_dump -o -h [server host] -U [user name] -d [database name] -s > db_schema.sql

Por último, haga una lista de todas las extensiones que usa la base de datos. Deberá habilitar estas extensiones en la base de datos de destino. Para ello, use el comando \dx de plsql o ejecute la siguiente consulta:

SELECT *
FROM pg_extension;

Creación de una base de datos de destino e importación del esquema

La fase siguiente es crear una base de datos de destino en el servicio Azure Database for PostgreSQL. Use una herramienta conocida, como pgAdmin, para conectarse al servidor, o puede usar la CLI de Azure en el ejemplo siguiente:

az postgres db create \
  --name [database name] \
  --server-name [server name] \
  --resource-group [azure resource group]

En la base de datos de destino, habilite todas las extensiones utilizadas por la base de datos de origen.

Importe el esquema a la base de datos de destino. En la máquina que contiene el archivo db_schema.sql, ejecute el comando siguiente:

psql -h [Azure Database for PostgreSQL host] -U [user name] -d [database name] -f db_schema.sql

Quite todas las referencias de claves externas de la base de datos de destino. Necesita este paso porque los datos no se van a migrar necesariamente en una secuencia específica, posiblemente solicitando infracciones de integridad referencial que provocarán un error en el proceso de migración. Sin embargo, debe crear un registro de todas las claves externas, ya que tendrá que volver a crearlas más adelante. Ejecute la siguiente instrucción SQL con la utilidad psql para buscar todas las claves externas de la base de datos y generar un script que las elimine:

SELECT Queries.tablename
       ,concat('alter table ', Queries.tablename, ' ', STRING_AGG(concat('DROP CONSTRAINT ', Queries.foreignkey), ',')) as DropQuery
            ,concat('alter table ', Queries.tablename, ' ',
                                            STRING_AGG(concat('ADD CONSTRAINT ', Queries.foreignkey, ' FOREIGN KEY (', column_name, ')', 'REFERENCES ', foreign_table_name, '(', foreign_column_name, ')' ), ',')) as AddQuery
    FROM
    (SELECT
    tc.table_schema,
    tc.constraint_name as foreignkey,
    tc.table_name as tableName,
    kcu.column_name,
    ccu.table_schema AS foreign_table_schema,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name
FROM
    information_schema.table_constraints AS tc
    JOIN information_schema.key_column_usage AS kcu
      ON tc.constraint_name = kcu.constraint_name
      AND tc.table_schema = kcu.table_schema
    JOIN information_schema.constraint_column_usage AS ccu
      ON ccu.constraint_name = tc.constraint_name
      AND ccu.table_schema = tc.table_schema
WHERE constraint_type = 'FOREIGN KEY') Queries
  GROUP BY Queries.tablename;

Deshabilite los desencadenadores que se encuentran en la base de datos de destino. Esto se hace por dos motivos:

  • Ayuda a optimizar el proceso de migración a medida que se copian los datos.
  • Los desencadenadores se usan a menudo para implementar formas complejas de integridad referencial y, por las razones descritas anteriormente, se puede producir un error en este tipo de comprobación de integridad mientras se transfieren los datos. Utilice la instrucción SQL siguiente para buscar todos los desencadenadores de la base de datos y generar un script que los deshabilite:
    SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name)
    FROM information_schema.triggers;
    

Nota:

Puede buscar el texto de un desencadenador mediante el comando \df+ de psql.

Creación de una instancia de Azure Database Migration Service

En Azure Portal, ahora puede crear una instancia de Azure Database Migration Service.

Antes de crear una instancia de Azure Database Migration Service, debe registrar el proveedor de recursos Microsoft.DataMigration en su suscripción. Puede hacerlo de la siguiente manera:

  1. En la barra de menús de la izquierda de Azure Portal, seleccione Todos los servicios.
  2. En la página Todos los servicios, seleccione Suscripciones.
  3. En la página Suscripciones, seleccione su suscripción.
  4. En la página de la suscripción, en Configuración, seleccione Proveedores de recursos.
  5. En el cuadro Filtrar por nombre, escriba DataMigration y, luego, seleccione Microsoft.DataMigration.
  6. Seleccione Registrar y espere a que el Estado cambie a Registrado. Es posible que tenga que seleccionar Actualizar para ver qué estado cambiar.
    Image showing the Resource providers page. The user is registering the Microsoft.DataMigration resource provider

Una vez registrado el proveedor de recursos, puede crear el servicio. Seleccione el comando Crear un recurso en la barra de menús de la izquierda y busque Azure Database Migration Service.

Image showing the initial page when creating the Azure Database Migration Service

En la página Crear el servicio de migración, escriba un nombre para la instancia del servicio, especifique la suscripción (debe ser la misma suscripción con la que registró el proveedor de recursos), el grupo de recursos y la ubicación. También debe proporcionar una red virtual, porque Database Migration Service depende de un firewall creado para esta red virtual a fin de proporcionar la protección necesaria. Si va a migrar bases de datos desde máquinas virtuales de Azure, es posible que pueda colocar Database Migration Service en la misma red virtual que usan estas máquinas virtuales. El plan de tarifa determina la cantidad de núcleos de procesador virtual que están disponibles para el servicio. Si desea realizar una migración en línea, debe seleccionar el nivel Prémium, porque el nivel Estándar solo admite la migración sin conexión.

Image showing the configuration for the Azure Database Migration Service. The user has selected the Premium pricing tier

Espere a que se implemente el servicio antes de continuar. Esta operación tardará unos minutos.

Creación de un proyecto de migración mediante Database Migration Service

Ahora puede usar la instancia de Database Migration Service para realizar una migración en línea. Para ello, puede crear un proyecto de Database Migration. Vaya a la página de la instancia de servicio de migración y seleccione Nuevo proyecto de migración.

Image showing the newly created Azure Database Migration Service.

En la página Nuevo proyecto de migración, establezca el tipo de servidor de origen en PostgreSQL, el tipo de servidor de destino en Azure Database for PostgreSQL y, luego, seleccione Migración de datos en línea. En la página Tipo de actividad se muestran los pasos que debe seguir en el servidor de origen para habilitar la migración en línea. El texto que aparece en la parte inferior de la página Nuevo proyecto de migración describe el proceso para migrar el esquema al destino.

Image showing the migration project properties and instructions.

Compruebe que completó estos pasos y, luego, seleccione Crear y ejecutar una actividad.

Creación y ejecución de una actividad de migración

El nuevo proyecto de migración inicia un asistente que lo guía durante el proceso. Proporcione los detalles siguientes:

  • En la página Agregar detalles de origen, agregue la dirección del servidor de origen, la base de datos de origen y una cuenta que pueda conectarse a esta base de datos y recuperar los datos. La cuenta debe tener privilegios de SUPERUSUARIO para llevar a cabo la migración.
  • En la página Detalles de destino, especifique la dirección del servicio Azure Database for PostgreSQL, la base de datos a la que quiere migrar los datos y los detalles de una cuenta con derechos administrativos.
  • En la página Asignar a las bases de datos de destino, seleccione la base de datos de origen y la de destino. Puede migrar varias bases de datos o una sola.
  • En la página Configuración de la migración, especifique cualquier valor adicional que quiera configurar, como el número máximo de tablas que se cargarán en paralelo.
  • En la página Resumen de la migración, escriba un nombre para la actividad y, luego, seleccione Ejecutar migración.
    Image showing the migration summary page.

Aparece la página estado de la actividad que muestra el progreso de la migración y los errores que se han producido. Si ocurre un error en la migración, corrija los problemas y vuelva a intentar la actividad. Si lleva a cabo una migración en línea, el estado cambia a A punto para la migración total después de que se hayan transferido los datos existentes. Sin embargo, la actividad se sigue ejecutando para transferir cualquier cambio adicional que aparezca mientras las aplicaciones siguen utilizando activamente la base de datos original.

Image showing the activity status page for the migration activity. The migration has transferred all the current data, and is ready to cutover to the new database.

Restablecimiento de claves externas y desencadenadores

En este momento, ha transferido los datos, y las aplicaciones pueden empezar a usarlos. Debe volver a crear las claves externas que quitó antes de migrar los datos y, además, restablecer los desencadenadores. Si algunas aplicaciones todavía están conectadas a la base de datos original, el registro de escritura previa garantiza que se mantenga actualizada la base de datos de destino en Azure. Las claves externas y los desencadenadores no afectarán negativamente al registro de escritura previa.

Migración total a la base de datos nueva

Una vez que todas las aplicaciones cambiaron a la base de datos nueva, complete el proceso de migración e inicie la migración total a la base de datos nueva. En la página de estado de la actividad, seleccione el nombre de la base de datos que se está migrando para ver un resumen del trabajo realizado.

Image showing the statistics for the migration activity.

Seleccione Iniciar transición. Verá una página en la que se le pedirá confirmar que se completó la operación. En este momento, se purgarán las entradas restantes del registro de escritura previa correspondiente a la base de datos de origen y se detendrán las actualizaciones. No se propagará ningún cambio más realizado en la base de datos de origen.

Image of the Complete cutover page.

Realización de migración sin conexión

Una migración sin conexión toma una "instantánea" de la base de datos de origen en un momento determinado y copia los datos en la base de datos de destino. Cualquier cambio que se haga en los datos de origen una vez que se tome la instantánea no se reflejará en la base de datos de destino.

Tiene al menos dos opciones si desea realizar una migración sin conexión a Azure Database for PostgreSQL, o a un servidor PostgreSQL que se ejecute en otro lugar, como una máquina virtual de Azure:

  • Exporte el esquema y los datos de la base de datos de origen mediante la utilidad pg_dump e importe el esquema y los datos en la base de datos de destino mediante la utilidad psql. Esta técnica permite modificar, volver a formatear y limpiar el esquema y los datos, si es necesario, antes de transferirlos a la base de datos de destino.
  • Vuelque los datos de la base de datos de origen, de nuevo con pg_dump, y restaure los datos en la base de datos de destino mediante pg_restore. Esta técnica es más rápida que el uso de la exportación e importación, pero los datos se vuelcan en un formato que no se puede cambiar fácilmente. Use este enfoque si no necesita retocar el esquema o los datos.

Nota:

Actualmente, no puede usar Azure Database Migration Service para realizar una migración sin conexión de una base de datos PostgreSQL.

Migración mediante exportación e importación

Siga estos pasos para migrar una base de datos mediante el enfoque de exportación e importación.

  1. Exporte el esquema mediante el comando pg_dump desde un símbolo del sistema de Bash:

    pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
    
  2. Exporte los datos a otro archivo con el comando pg_dump:

    pg_dump -o -h [source database server] -U [user name] -d [database] -a > db_data.sql
    

    En este punto, db_schema.sql y db_data.sql son scripts SQL que se modifican con un editor de texto.

  3. Cree la base de datos de destino en Azure Database for PostgreSQL. Para ello, use la CLI de Azure:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group]
    
  4. Importe el esquema a la base de datos de destino con el comando psql:

    psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_schema.sql
    
  5. Importe los datos a la base de datos de destino con el comando psql:

    psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_data.sql
    

Migración mediante copia de seguridad y restauración

En estos pasos se describe el proceso para migrar una base de datos mediante copia de seguridad y restauración.

  1. Copia de seguridad de la base de datos: desde un símbolo del sistema de Bash, ejecute el siguiente comando. Especifique el nombre de un usuario que tenga los privilegios necesarios para realizar una copia de seguridad de la base de datos:

    pg_dump [database name] -h [source database server] -U [user name] -Fc > database_backup.bak
    
  2. Cree la base de datos de destino en Azure Database for PostgreSQL:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group] \
    
  3. Restaure la copia de seguridad en la nueva base de datos con el comando pg_restore desde un símbolo del sistema de Bash. Especifique el nombre de un usuario con derechos administrativos en el servicio de Azure Database for PostgreSQL:

    pg_restore -d [target database name] -h [server name in Azure Database for PostgreSQL] -Fc -U [user name] database_backup.bak