Share via


Migración de Azure Database for MySQL: servidor único a servidor flexible mediante la CLI de importación de Azure Database for MySQL

SE APLICA A: Azure Database for MySQL: Servidor único

La CLI de importación de Azure Database for MySQL (disponible con carácter general) le permite migrar su instancia de Azure Database for MySQL sin problemas: servidor único a servidor flexible. Usa la tecnología de copia de seguridad y restauración de instantáneas para ofrecer una ruta de migración sencilla y rápida para restaurar los archivos de datos físicos del servidor de origen en el servidor de destino. Después de la operación de importación, puede aprovechar las ventajas del servidor flexible, incluyendo mejor precio y rendimiento, control pormenorizado sobre la configuración de la base de datos y ventanas de mantenimiento personalizadas.

En función de las entradas del usuario, asume la responsabilidad de aprovisionar el servidor flexible de destino y, a continuación, realizar la copia de seguridad del servidor de origen y restaurar el destino. Copia los archivos de datos, los parámetros de servidor, las reglas de firewall compatibles y las propiedades del servidor (nivel, versión, nombre de SKU, tamaño del almacenamiento, ubicación, copia de seguridad con redundancia geográfica, acceso público, etiquetas, crecimiento automático, días de retención de la copia de seguridad, administrador de usuario y administrador de contraseña) de una instancia de servidor único a una instancia de servidor flexible.

La CLI de importación de Azure Database for MySQL admite una migración de tiempo de inactividad casi nulo realizando primero una operación de importación sin conexión y, por tanto, los usuarios pueden configurar la replicación de datos de entrada entre el origen y el destino para realizar una migración en línea.

En este tutorial se muestra cómo usar el comando de la CLI de importación de Azure Database for MySQL para migrar un servidor único de Azure Database for MySQL a servidor flexible.

Novedades

  • Ahora se admite la operación de importación de Azure Database for MySQL para servidores únicos con arquitectura de almacenamiento heredado (almacenamiento de uso general V1). Debe establecer el parámetro log_bin=ON para la instancia de servidor único con almacenamiento heredado antes de iniciar la operación de importación. Para ello, cree una réplica de lectura para la instancia de servidor único y, a continuación, elimínela. Esta operación establecerá el parámetro log_bin en ON y, a continuación, puede desencadenar una operación de importación para migrar al servidor flexible. (Febrero de 2024)

Inicio de Azure Cloud Shell

Azure Cloud Shell es un shell interactivo gratuito que puede usar para ejecutar los pasos de este artículo. Tiene las herramientas comunes de Azure preinstaladas y configuradas para usarlas en la cuenta.

Para abrir Cloud Shell, seleccione Pruébelo en la esquina superior derecha de un bloque de código. También puede abrir Cloud Shell en una pestaña independiente acudiendo a https://shell.azure.com/bash. Seleccione Copiar para copiar los bloques de código, péguelos en Cloud Shell y, después, seleccione Entrar para ejecutarlos.

Si prefiere instalar y usar la CLI en un entorno local, para este tutorial se requiere la versión 2.54.0 de la CLI de Azure o una versión posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Programa de instalación

Debe iniciar sesión en la cuenta con el comando az sign-in. Anote la propiedad id, que hace referencia al Id. de suscripción de su cuenta de Azure.

az login

Seleccione la suscripción específica en la que reside el Azure Database for MySQL de origen: servidor único en su cuenta mediante el comando az account set. Anote el valor de id de la salida de az login, ya que lo usará como valor del argumento subscription en el comando. Si tiene varias suscripciones, elija la suscripción adecuada en la que reside su Azure Database for MySQL: servidor único de origen. Para obtener todas las suscripciones, use az account list.

az account set --subscription <subscription id>

Limitaciones y requisitos previos

  • Si el Servidor único de Azure Database for MySQL de origen tiene la versión v8.x del motor, asegúrese de actualizar la versión del controlador de cliente .NET del servidor de origen a la versión 8.0.32 para evitar cualquier incompatibilidad de codificación después de la migración al Servidor flexible.

  • El servidor único de Azure Database for MySQL y el servidor flexible de Azure Database for MySQL deben estar en la misma suscripción, grupo de recursos, región y en la misma versión de MySQL. La importación entre suscripciones, grupos de recursos, regiones y versiones no es posible.

  • Las versiones de Azure DB for MySQL compatibles con la CLI de importación de Azure MySQL son 5.7 y 8.0. Si está en otra versión principal de MySQL en servidor único, asegúrese de actualizar la versión en la instancia de servidor único antes de desencadenar el comando de importación.

  • Si la instancia de Azure Database for MySQL: servidor único tiene el parámetro de servidor "lower_case_table_names" establecido en 2 y la aplicación usó tablas de particiones, la operación de importación dará como resultado tablas de particiones dañadas. La recomendación es establecer "lower_case_table_names" en 1 para la instancia de Azure Database for MySQL: servidor único para continuar con la operación de importación de MySQL sin daños.

  • No se admite la importación a un servidor flexible de Azure MySQL existente. El comando de la CLI inicia la importación de un nuevo servidor flexible de Azure MySQL.

  • Si el servidor de destino flexible se aprovisiona como no HA (alta disponibilidad desactivada) al actualizar los parámetros del comando de la CLI, podrá cambiarse posteriormente a HA de misma zona pero no a HA con redundancia de zona.

  • Para las instancias de servidor único habilitadas para CMK, el comando Importación de Azure DB for MySQL requiere que proporcione parámetros de entrada obligatorios para habilitar la CMK en el servidor flexible de destino.

  • Si la instancia de servidor único tiene el "Cifrado doble de infraestructura" habilitado, se recomienda habilitar la clave administrada por el cliente (CMK) en la instancia de servidor flexible de destino para admitir funcionalidades similares. También puede habilitar la CMK en el servidor de destino con los parámetros de entrada de la CLI de Importación de Azure Database for MySQL o después de la migración.

  • Si la instancia de servidor único tiene habilitado "Almacén de consultas", se recomienda habilitar registros de consultas lentas en la instancia de servidor flexible de destino para admitir una funcionalidad similar. Puede configurar registros de consultas lentas en el servidor flexible de destino siguiendo estos pasos. Después, puede ver la información de consulta mediante la plantilla de libros.

  • Si la instancia de servidor único tiene una arquitectura de almacenamiento heredada (almacenamiento de uso general V1), debe establecer el parámetro log_bin=ON para la instancia de servidor único antes de iniciar la operación de importación. Para ello, cree una réplica de lectura para la instancia de servidor único y, a continuación, elimínela. Esta operación establecerá el parámetro log_bin en ON y, a continuación, puede desencadenar una operación de importación para migrar al servidor flexible.

  • Si la instancia de servidor único tuviera la versión v8.0 del motor, considere la posibilidad de realizar las siguientes acciones para evitar cambios importantes por las diferencias de versión secundaria de la comunidad entre la instancia de servidor único y flexible:

    • Ejecute la siguiente instrucción para comprobar si la instancia pudiera verse afectada por información errónea del histograma. Si se generan las tablas correspondientes, se recomienda hacer referencia a https://dev.mysql.com/blog-archive/histogram-statistics-in-mysql/ para eliminar la información del histograma y crearla de nuevo en el servidor flexible. Cabe destacar que el histograma inf` es solo información estadística sobre las columnas que solo existe en las tablas del sistema, por lo que eliminar la información del histograma no afectará a los datos de la tabla.

          SELECT DISTINCT SCHEMA_NAME, TABLE_NAME FROM `information_schema`.`column_statistics`;
      
    • Ejecute el siguiente comando para comprobar si hay tablas que pudieran tener su orden de columna de tabla desorganizado. Si esta comprobación identificase tablas afectadas, será necesario volcar todos los datos de estas tablas y, a continuación, importarlos de nuevo. Si no se hiciera, la secuencia de columnas del binlog podría no coincidir con la secuencia de columnas de las tablas de usuario. Esta discrepancia impedirá que los usuarios configuren la replicación, la restauración de datos, la habilitación de la alta disponibilidad (HA) y otras operaciones.

          SELECT table_schema, table_name, COUNT(*) AS column_count, MAX(ORDINAL_POSITION) AS max_ordinal_position
          FROM information_schema.columns
          GROUP BY table_schema, table_name
          HAVING column_count != max_ordinal_position;
      
  • Solo se admite la importación en el nivel de instancia. No se proporciona ninguna opción para importar bases de datos seleccionadas dentro de una instancia.

  • El usuario debe copiar los siguientes elementos del origen al destino después de la operación de importación:

    • Réplicas de lectura
    • Configuración de la página de supervisión (alertas, métricas y configuración de diagnóstico)
    • Todos los scripts de Terraform/CLI hospedados por usted para administrar la instancia de servidor único deben actualizarse con referencias de servidor flexible

Desencadenar una operación de importación de Azure DB for MySQL para migrar desde Azure Database for MySQL: servidor único a servidor flexible

Desencadene una operación de importación de Azure DB for MySQL con el comando az mysql flexible-server import create. El siguiente comando crea un servidor flexible de destino y realiza la importación de nivel de instancia desde el origen al destino mediante valores predeterminados del servicio desde el contexto local de la CLI de Azure:

az mysql flexible-server import create --data-source-type
                                --data-source
                                --resource-group
                                --name
                                [--sku-name]
                                [--tier]
                                [--version]
                                [--storage-size]
                                [--mode]
                                [--admin-password]
                                [--admin-user]
                                [--auto-scale-iops {Disabled, Enabled}]
                                [--backup-identity]
                                [--backup-key]
                                [--backup-retention]
                                [--database-name]
                                [--geo-redundant-backup {Disabled, Enabled}]
                                [--high-availability {Disabled, SameZone, ZoneRedundant}]
                                [--identity]
                                [--iops]
                                [--key]
                                [--location]
                                [--private-dns-zone]
                                [--public-access]
                                [--resource-group]
                                [--standby-zone]
                                [--storage-auto-grow {Disabled, Enabled}]
                                [--subnet]
                                [--subnet-prefixes]
                                [--tags]
                                [--vnet]
                                [--zone]

En el ejemplo siguiente se toma la información del origen de datos para el servidor único denominado "test-single-server" y la información del servidor flexible de destino, se crea un servidor flexible de destino denominado test-flexible-server en la ubicación westus (misma ubicación que la del servidor único de origen) y realiza una importación desde el origen al destino. El comando Import de Azure Database for MySQL asigna las propiedades correspondientes al nivel, la versión, el nombre de SKU, el tamaño de almacenamiento, la ubicación, la copia de seguridad con redundancia geográfica, el acceso público, las etiquetas, el crecimiento automático, los días de retención de copia de seguridad, los días de retención de copia de seguridad, el usuario administrador y la contraseña de administrador de servidor único como valores predeterminados inteligentes si no se proporcionan entradas al comando de la CLI. Puede optar por invalidar los valores predeterminados inteligentes proporcionando entradas para estos parámetros opcionales.

az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg"  --name "test-flexible-server"

En el ejemplo siguiente se toma la información del origen de datos para el servidor único denominado "test-single-server" y la información del servidor flexible de destino, se crea un servidor flexible de destino denominado test-flexible-server en la ubicación westus (misma ubicación que la del servidor único de origen) con la redundancia de zona habilitada y la integración de red virtual y realiza una importación desde el origen al destino. Obtenga más información sobre la configuración de red virtual aquí.

# create vnet
az network vnet create --resource-group testGroup --name myVnet --location testLocation --address-prefixes 172.0.0.0/16

# create subnet
az network vnet subnet create --resource-group testGroup --vnet-name myVnet --address-prefixes 172.0.0.0/24 --name mySubnet

# create private dns zone
az network private-dns zone create -g testGroup -n myserver.private.contoso.com

# trigger mysql import
az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg"  --name "test-flexible-server" --high-availability ZoneRedundant --zone 1 --standby-zone 3  --vnet "myVnet" --subnet "mySubnet" --private-dns-zone "myserver.private.contoso.com"

El siguiente ejemplo toma la información del origen de datos para el servidor único denominado "test-single-server" con la clave administrada por el cliente (CMK) habilitada y la información del servidor flexible de destino, crea un servidor flexible de destino denominado test-flexible-server y realiza una importación desde el origen al destino. Para instancias de servidor único habilitadas para CMK, el comando Azure Database for MySQL Import requiere que proporcione parámetros de entrada obligatorios para habilitar CMK: --key keyIdentifierOfTestKey --identity testIdentity.

# create keyvault
az keyvault create -g testGroup -n testVault --location testLocation \
  --enable-purge-protection true

# create key in keyvault and save its key identifier
keyIdentifier=$(az keyvault key create --name testKey -p software \
  --vault-name testVault --query key.kid -o tsv)

# create identity and save its principalId
identityPrincipalId=$(az identity create -g testGroup --name testIdentity \
  --location testLocation --query principalId -o tsv)

# add testIdentity as an access policy with key permissions 'Wrap Key', 'Unwrap Key', 'Get' and 'List' inside testVault
az keyvault set-policy -g testGroup -n testVault --object-id $identityPrincipalId \
  --key-permissions wrapKey unwrapKey get list

# trigger azure database for mysql import for CMK enabled single server
az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg"  --name "test-flexible-server" --key $keyIdentifier --identity testIdentity

Estos son los detalles de los argumentos anteriores:

Configuración Valor de ejemplo Descripción
data-source-type mysql_single Tipo de origen de datos que actúa como destino de origen para desencadenar la importación de Azure DB for MySQL. Valores aceptados: [mysql_single]. Descripción de los valores aceptados: mysql_single: servidor único de Azure Database for MySQL.
data-source test-single-server Nombre o identificador de recurso servidor único de Azure Database for MySQL de origen.
resource-group test-rg Nombre del grupo de recursos de Azure del servidor único de Azure Database for MySQL de origen.
mode Sin conexión Modo de importación de Azure Database for MySQL. Valores aceptados: [Offline]; Valor predeterminado: Offline.
ubicación westus Ubicación del servidor único de Azure Database for MySQL de origen.
name test-flexible-server Escriba un nombre único para el servidor flexible de Azure Database for MySQL de destino. El nombre del servidor solo puede contener letras minúsculas, números y el carácter de guion (-). Debe contener entre 3 y 63 caracteres. Nota: Este servidor se implementa en la misma suscripción, grupo de recursos y región que el origen.
admin-user adminuser Nombre de usuario de inicio de sesión de administrador para el servidor flexible de Azure Database for MySQL de destino. No pueden ser azure_superuser, admin, administrator, root, guest o public.
admin-password password La contraseña del usuario administrador de su servidor flexible de Azure Database for MySQL de destino. Debe tener entre 8 y 128 caracteres. La contraseña debe contener caracteres de tres categorías: letras en mayúsculas del alfabeto inglés, letras en minúscula del alfabeto inglés, números y caracteres no alfanuméricos.
sku-name GP_Gen5_2 Escriba el nombre del plan de tarifa y la configuración de proceso del servidor flexible de Azure Database for MySQL de destino. Sigue la convención {plan de tarifa} {generación de procesos} {núcleos virtuales} en forma abreviada. Para más información, consulte los planes de tarifa.
Nivel: Flexible Nivel de proceso del servidor flexible de Azure Database for MySQL de destino. Valores aceptados: Bustable, GeneralPurpose, MemoryOptimized; Valor predeterminado: Burstable.
public-access 0.0.0.0 Determina el acceso público para el servidor flexible de Azure Database for MySQL de destino. Puede proporcionar una dirección IP o un intervalo de ellas para incluirlas en la lista de direcciones IP permitidas. El intervalo de direcciones IP debe estar separado por guiones y no contener espacios. La especificación de 0.0.0.0 habilita el acceso público desde cualquiera de los recursos implementados en Azure para acceder al servidor. Si se establece en "None", el servidor se establece en modo de acceso público, pero no crea una regla de firewall.
red virtual myVnet Nombre o id. de una red virtual nueva o existente. Si desea usar una red virtual de un grupo de recursos o una suscripción diferentes, proporcione un id. de recurso. este debe tener entre 2 y 64 caracteres. El nombre debe comenzar con una letra o un número, acabar con una letra, un número o un carácter de subrayado, y debe contener solo letras, números, caracteres de subrayado, puntos o guiones.
subnet mySubnet Nombre o id. de recurso de una subred nueva o existente. Si desea usar una subred de un grupo de recursos o una suscripción diferentes, proporcione el id. de recurso en lugar del nombre. Tenga en cuenta que la subred se delegará en flexibleServers. Después de la delegación, esta subred no se puede usar para ningún otro tipo de recursos de Azure.
private-dns-zone myserver.private.contoso.com Nombre o id. de la zona DNS privada nueva o existente. Puede usar la zona DNS privada del mismo grupo de recursos, un grupo de recursos diferente o una suscripción diferente. Si desea usar una zona de un grupo de recursos o una suscripción diferentes, proporcione el identificador de recurso. La CLI crea una nueva zona DNS privada dentro del mismo grupo de recursos que la red virtual si no la proporcionan los usuarios.
key identificador clave de testKey El id. de recurso de la clave principal de Keyvault para el cifrado de datos.
identity testIdentity Nombre o id. de recurso de la identidad asignada por el usuario para el cifrado de datos.
storage-size 32 La capacidad de almacenamiento del servidor flexible de Azure Database for MySQL de destino. El mínimo es 20 GiB y el máximo es 16 TiB.
etiquetas key=value Especifique el nombre del grupo de recursos de Azure.
version 5.7 Versión principal del servidor flexible de Azure Database for MySQL de destino.
alta disponibilidad ZoneRedundant Habilite (ZoneRedundant o SameZone) o deshabilite la característica de alta disponibilidad para el servidor flexible de Azure Database for MySQL de destino. Valores aceptados: Disabled, SameZone, ZoneRedundant; Valor predeterminado: Disabled.
zona 1 Zona de disponibilidad en la que se va a aprovisionar el recurso.
standby-zone 3 Información de la zona de disponibilidad del servidor en espera cuando está habilitada la alta disponibilidad.
storage-auto-grow habilitado Habilite o deshabilite el crecimiento automático del almacenamiento para el servidor flexible de Azure Database for MySQL de destino. El valor predeterminado es Enabled. Valores aceptados: Disabled, Enabled; Valor predeterminado: Enabled.
iops 500 Número de IOPS que se asignarán para el servidor flexible de Azure Database for MySQL de destino. Obtiene una determinada cantidad de IOPS gratis en función del proceso y el almacenamiento aprovisionados. El valor predeterminado de IOPS es IOPS gratis. Para más información sobre las IOPS basadas en el proceso y el almacenamiento, consulte IOPS en Servidor flexible de Azure Database for MySQL.

Pasos para la migración en línea

Después de completar la operación de importación de Azure Database for MySQL indicada anteriormente:

  • Inicie sesión en el servidor flexible de Azure Database for MySQL de destino y ejecute el siguiente comando para obtener el nombre de archivo del bin-log y la posición correspondientes a la instantánea de copia de seguridad que usa la CLI de importación de Azure Database for MySQL para restaurar en el servidor de destino.
CALL mysql.az_show_binlog_file_and_pos_for_mysql_import();
  • Configure la replicación de datos de entrada entre las instancias del servidor de origen y de destino mediante la posición bin-log siguiendo los pasos enumerados aquí y, cuando el estado de replicación refleje que el servidor de destino se ha puesto al día con el de origen, detenga la replicación y realice la migración.

Procedimientos recomendados para configurar parámetros de comando de la CLI de importación de Azure Database for MySQL

Antes de desencadenar el comando de la CLI de importación de Azure Database for MySQL, tenga en cuenta las siguientes instrucciones de configuración de parámetros para ayudar a garantizar cargas de datos más rápidas mediante la CLI de importación de Azure Database for MySQL.

  • Si desea anular los valores predeterminados inteligentes, seleccione el nivel de proceso y el nombre de la SKU para el servidor flexible de destino en función del plan de tarifa y los núcleos virtuales del servidor único de origen según los detalles de la tabla siguiente.

    Plan de tarifa de servidor único Núcleos virtuales de servidor único Nivel del servidor flexible Nombre de SKU del servidor flexible
    Básico 1 Flexible Standard_B1s
    Básico 2 Flexible Standard_B2s
    De uso general 4 GeneralPurpose Standard_D4ds_v4
    De uso general 8 GeneralPurpose Standard_D8ds_v4
    Uso general 16 GeneralPurpose Standard_D16ds_v4
    De uso general 32 GeneralPurpose Standard_D32ds_v4
    De uso general 64 GeneralPurpose Standard_D64ds_v4
    Memoria optimizada 4 MemoryOptimized Standard_E4ds_v4
    Memoria optimizada 8 MemoryOptimized Standard_E8ds_v4
    Memoria optimizada 16 MemoryOptimized Standard_E16ds_v4
    Memoria optimizada 32 MemoryOptimized Standard_E32ds_v4
  • La versión de MySQL, la región, la suscripción y el recurso del servidor flexible de destino deben ser iguales a los del servidor único de origen.

  • El tamaño de almacenamiento del servidor flexible de destino debe ser igual o mayor que en el servidor único de origen.

  • Si la instancia de servidor único tiene el "Cifrado doble de infraestructura" habilitado, se recomienda habilitar la clave administrada por el cliente (CMK) en la instancia de servidor flexible de destino para admitir funcionalidades similares. También puede habilitar la CMK en el servidor de destino con los parámetros de entrada de la CLI de Importación de Azure Database for MySQL o después de la migración.

¿Cuánto tarda la importación de Azure Database for MySQL en migrar mi instancia de servidor único?

A continuación se muestra el rendimiento de prueba comparativa basado en el tamaño de almacenamiento.

Tamaño de almacenamiento de servidor único Hora de importación
1 GiB 0 min 23 segundos
10 GiB 4 min 24 segundos
100 GiB 10 min 29 segundos
500 GiB 13 min 15 segundos
1 TB 22 min 56 segundos
10 TB 2 horas 5 min 30 segundos

En la tabla anterior, a medida que aumenta el tamaño de almacenamiento, el tiempo necesario para la copia de datos también aumenta, casi en una relación lineal. Sin embargo, es importante tener en cuenta que la velocidad de copia puede verse afectada significativamente por las fluctuaciones de red. Por lo tanto, los datos proporcionados aquí deben tomarse como referencia únicamente.

A continuación se muestra el rendimiento de pruebas comparativas basado en un número variable de tablas para un tamaño de almacenamiento de 10 GiB.

Número de tablas en una instancia de servidor único Hora de importación
100 4 min 24 segundos
200 4 min 40 segundos
800 4 min 52 segundos
14 400 17 min 41 segundos
28,800 19 min 18 segundos
38 400 22 min 50 segundos

A medida que aumenta el número de archivos, cada archivo o tabla de la base de datos puede ser muy pequeño. Esto dará lugar a una cantidad coherente de datos que se transfieren, pero habrá operaciones relacionadas con archivos más frecuentes, lo que puede afectar al rendimiento de la importación de Azure Database for MySQL.

Pasos posteriores a la importación

  • Copie las siguientes propiedades del servidor único de origen para que el servidor flexible de destino realice correctamente la operación de importación de Azure DB for MySQL:
    • Réplicas de lectura
    • Valor del parámetro de servidor de event_scheduler
    • Configuración de la página de supervisión (alertas, métricas y configuración de diagnóstico)
    • Los scripts de Terraform/CLI que hospede para administrar la instancia de servidor único deben actualizarse con referencias al servidor flexible.

Pasos siguientes