Migrar o Banco de Dados do Azure para MySQL - Servidor Único para Servidor Flexível usando o Banco de Dados do Azure para MySQL Importar CLI

APLICA-SE A: Banco de Dados do Azure para MySQL - Servidor Único

A CLI de Importação do Banco de Dados do Azure para MySQL (Geralmente Disponível) permite que você migre seu Banco de Dados do Azure para MySQL sem problemas - Servidor Único para Servidor Flexível. Ele usa backup de instantâneo e tecnologia de restauração para oferecer um caminho de migração simples e rápido para restaurar os arquivos de dados físicos do servidor de origem para o servidor de destino. Após a operação de importação, você pode aproveitar os benefícios do Servidor Flexível, incluindo melhor preço e desempenho, controle granular sobre a configuração do banco de dados e janelas de manutenção personalizadas.

Com base nas entradas do usuário, ele assume a responsabilidade de provisionar o Servidor Flexível de destino e, em seguida, fazer o backup do servidor de origem e restaurar o destino. Ele copia os arquivos de dados, parâmetros do servidor, regras de firewall compatíveis e propriedades do servidor - camada, versão, nome de sku, tamanho do armazenamento, localização, backup com redundância geográfica, acesso público, tags, crescimento automático, dias de retenção de backup, admin-usuário e senha de administrador da instância de servidor único para flexível.

A CLI de Importação do Banco de Dados do Azure para MySQL dá suporte a uma migração de tempo de inatividade quase zero executando primeiro uma operação de importação offline e, consequentemente, os usuários podem configurar a replicação de dados entre a origem e o destino para executar uma migração online.

Este tutorial mostra como usar o comando Azure Database for MySQL Import CLI para migrar seu Banco de Dados do Azure para MySQL Single Server para Servidor Flexível.

Novidades?

  • A operação de importação do Banco de Dados do Azure para MySQL para servidores únicos com arquitetura de armazenamento herdado (armazenamento de uso geral V1) agora é suportada. Você precisa definir o parâmetro log_bin=ON para sua instância de Servidor Único com Armazenamento Herdado antes de iniciar a operação de importação. Para fazer isso, crie uma réplica de leitura para sua instância de Servidor Único e exclua-a. Esta operação definirá o parâmetro log_bin como ON e você poderá acionar uma operação de importação para migrar para o Servidor Flexível. (fev 2024)

Iniciar o Azure Cloud Shell

O Azure Cloud Shell é um shell interativo gratuito que você pode usar para executar as etapas neste artigo. Tem as ferramentas comuns do Azure pré-instaladas e configuradas para utilização com a sua conta.

Para abrir o Cloud Shell, selecione Experimente no canto superior direito de um bloco de código. Você também pode abrir o Cloud Shell em uma guia separada do navegador acessando .https://shell.azure.com/bash Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e selecione Enter para executá-lo.

Se você preferir instalar e usar a CLI localmente, este tutorial requer a CLI do Azure versão 2.54.0 ou posterior. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Configurar

Tem de iniciar sessão na sua conta utilizando o comando az sign-in . Observe a propriedade id, que se refere à ID de Assinatura da sua conta do Azure.

az login

Selecione a assinatura específica na qual o Banco de Dados do Azure de origem para MySQL - Servidor Único reside em sua conta usando o comando az account set . Observe o valor id da saída az login a ser usado como o valor para o argumento de assinatura no comando. Se você tiver várias assinaturas, escolha a assinatura apropriada na qual reside o Banco de Dados do Azure de origem para MySQL - Servidor Único. Para obter todas as suas assinaturas, use a lista de contas az.

az account set --subscription <subscription id>

Limitações e pré-requisitos

  • Se o Banco de Dados do Azure de origem para MySQL Single Server tiver a versão do mecanismo v8.x, certifique-se de atualizar a versão do driver do cliente .NET do servidor de origem para 8.0.32 para evitar incompatibilidades de codificação após a migração para o Servidor Flexível.

  • O Banco de Dados do Azure de origem para MySQL - Servidor Único e o Banco de Dados do Azure de destino para MySQL - Servidor Flexível devem estar na mesma assinatura, grupo de recursos, região e na mesma versão do MySQL. Não é possível importar entre assinaturas, grupos de recursos, regiões e versões.

  • As versões do MySQL suportadas pela CLI de Importação do Banco de Dados do Azure para MySQL são 5.7 e 8.0. Se você estiver em uma versão principal diferente do MySQL no Single Server, certifique-se de atualizar sua versão em sua instância do Single Server antes de acionar o comando import.

  • Se o Banco de Dados do Azure para MySQL - instância de Servidor Único tiver o parâmetro de servidor 'lower_case_table_names' definido como 2 e seu aplicativo usar tabelas de partição, a operação Importar resultará em tabelas de partição corrompidas. A recomendação é definir 'lower_case_table_names' como 1 para sua instância do Banco de Dados do Azure para MySQL - Servidor Único, a fim de prosseguir com a operação de Importação do MySQL livre de corrupção.

  • Não há suporte para a importação para um Servidor Flexível do Azure MySQL existente. O comando CLI inicia a importação de um novo Servidor Flexível MySQL do Azure.

  • Se o servidor de destino flexível for provisionado como não-HA (Alta disponibilidade desabilitada) ao atualizar os parâmetros de comando da CLI, ele poderá ser alternado posteriormente para HA de mesma zona, mas não para HA redundante de zona.

  • Para instâncias de Servidor Único habilitadas para CMK, o comando Banco de Dados do Azure para Importação MySQL exige que você forneça parâmetros de entrada obrigatórios para habilitar a CMK no Servidor Flexível de destino.

  • Se a instância do Servidor Único tiver a 'Criptografia Dupla de Infraestrutura' habilitada, a habilitação da Chave Gerenciada pelo Cliente (CMK) na instância do Servidor Flexível de destino é recomendada para oferecer suporte a funcionalidade semelhante. Você pode optar por habilitar a CMK no servidor de destino com o Banco de Dados do Azure para MySQL, importar parâmetros de entrada da CLI ou pós-migração também.

  • Se a instância do Servidor Único tiver o 'Repositório de Consultas' habilitado, é recomendável habilitar logs de consulta lentos na instância do Servidor Flexível de destino para oferecer suporte a funcionalidade semelhante. Você pode configurar logs de consulta lentos no servidor flexível de destino seguindo as etapas aqui. Em seguida, você pode exibir informações de consulta usando o modelo de pastas de trabalho.

  • Se sua instância de Servidor Único tiver arquitetura de Armazenamento Legado (Armazenamento de Uso Geral V1), você precisará definir o parâmetro log_bin=ON para sua instância de Servidor Único antes de iniciar a operação de importação. Para fazer isso, crie uma réplica de leitura para sua instância de Servidor Único e exclua-a. Esta operação definirá o parâmetro log_bin como ON e você poderá acionar uma operação de importação para migrar para o Servidor Flexível.

  • Se sua instância de Servidor Único tiver a versão v8.0 do mecanismo, considere executar as seguintes ações para evitar alterações significativas devido a diferenças de versão secundária da comunidade entre a instância de Servidor Único e Flexível:

    • Execute a instrução a seguir para verificar se sua instância pode ser afetada por informações incorretas do histograma. Se as tabelas correspondentes forem de saída, recomendamos que você consulte https://dev.mysql.com/blog-archive/histogram-statistics-in-mysql/ para excluir as informações do histograma e, em seguida, recrie-as no Servidor flexível. Vale a pena notar que o histograma inf' é apenas informação estatística sobre as colunas, e esta informação só existe nas tabelas do sistema, portanto, excluir as informações do histograma não afetará os dados da tabela.

          SELECT DISTINCT SCHEMA_NAME, TABLE_NAME FROM `information_schema`.`column_statistics`;
      
    • Execute o seguinte comando para verificar se há tabelas que possam ter sua ordem de colunas de tabela desorganizada. Se essa verificação identificar quaisquer tabelas afetadas, você precisará despejar todos os dados dessas tabelas e, em seguida, importá-los de volta. Se isso não for feito, a sequência de colunas no binlog não corresponderá à sequência de colunas nas tabelas do usuário. Essa discrepância pode impedir que os usuários configurem a replicação, restaurem dados, habilitem alta disponibilidade (HA) e outras operações.

          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;
      
  • Somente a importação no nível da instância é suportada. Nenhuma opção para importar bancos de dados selecionados dentro de uma instância é fornecida.

  • Os itens abaixo devem ser copiados da origem para o destino pelo usuário postar a operação de importação:

    • Réplicas de leitura
    • Monitorando as configurações da página (Alertas, Métricas e Configurações de diagnóstico)
    • Todos os scripts Terraform/CLI hospedados por você para gerenciar sua instância de Servidor Único devem ser atualizados com referências de Servidor Flexível

Acionar uma operação de Importação do Banco de Dados do Azure para MySQL para migrar do Banco de Dados do Azure para MySQL - Servidor Único para Servidor Flexível

Acione uma operação de Importação do Banco de Dados do Azure para MySQL com o az mysql flexible-server import create comando. O comando a seguir cria um Servidor Flexível de destino e executa a importação no nível da instância da origem para o destino usando padrões de serviço e valores do contexto local da CLI do 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]

O exemplo a seguir recebe as informações da fonte de dados do Servidor Único chamado 'test-single-server' e as informações do Servidor Flexível de destino, cria um Servidor Flexível de destino nomeado test-flexible-server no westus local (mesmo local do Servidor Único de origem) e executa uma importação da origem para o destino. O comando Importação MySQL do Banco de Dados do Azure mapeia as propriedades correspondentes de camada, versão, nome de falha, tamanho do armazenamento, local, backup redundante geográfico, acesso público, tags, crescimento automático, dias de retenção de backup, admin-usuário e senha de administrador do Servidor Único para o Servidor Flexível como padrões inteligentes se nenhuma entrada for fornecida ao comando CLI. Você pode optar por substituir os padrões inteligentes fornecendo entradas para esses parâmetros opcionais.

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

O exemplo a seguir recebe as informações da fonte de dados para o Servidor Único chamado 'test-single-server' e as informações do Servidor Flexível de destino, cria um Servidor Flexível de destino nomeado test-flexible-server no westus local (mesmo local do Servidor Único de origem) com Redundância de Zona habilitada e integração de rede virtual e executa uma importação da origem para o destino. Saiba mais sobre a configuração de rede virtual aqui.

# 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"

O exemplo a seguir recebe as informações da fonte de dados para um único servidor chamado 'test-single-server' com a Chave Gerenciada pelo Cliente (CMK) habilitada e as informações do Servidor Flexível de destino, cria um Servidor Flexível de destino chamado test-flexible-server e executa uma importação da origem para o destino. Para instâncias de Servidor Único habilitadas para CMK, o comando Importação do Banco de Dados do Azure para MySQL exige que você forneça parâmetros de entrada obrigatórios para habilitar a 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

Aqui estão os detalhes para os argumentos acima:

Definição Valor de exemplo Descrição
tipo de fonte de dados mysql_single O tipo de fonte de dados que serve como destino de origem para acionar o Banco de Dados do Azure para Importação MySQL. Valores aceites: [mysql_single]. Descrição dos valores aceitos - mysql_single: Banco de Dados do Azure para MySQL Single Server.
fonte de dados test-single-server O nome ou ID do recurso do Banco de Dados do Azure de origem para o Servidor Único MySQL.
resource-group teste-rg O nome do grupo de recursos do Azure do Banco de Dados do Azure de origem para o Servidor Único MySQL.
modo Offline O modo de importação do Banco de Dados do Azure para MySQL. Valores aceites: [Offline]; Valor padrão: Offline.
localização westus O local do Azure para o Banco de Dados do Azure de origem para o Servidor Único MySQL.
nome test-flexible-server Insira um nome exclusivo para seu Banco de Dados do Azure de destino para o Servidor Flexível MySQL. O nome do servidor pode conter apenas letras minúsculas, números e o caráter de hífen (-). Tem de conter entre 3 e 63 carateres. Nota: Este servidor é implantado na mesma assinatura, grupo de recursos e região que a origem.
admin-user adminuser O nome de usuário para a entrada do administrador para seu Banco de Dados do Azure de destino para o Servidor Flexível MySQL. Não pode ser azure_superuser, administrador, administrador, root, convidado ou público.
admin-password palavra-passe A senha do usuário administrador para seu Banco de Dados do Azure de destino para o Servidor Flexível MySQL. Tem de conter entre 8 e 128 carateres. Sua senha deve conter caracteres de três categorias: letras maiúsculas em inglês, letras minúsculas em inglês, números e caracteres não alfanuméricos.
sku-name GP_Gen5_2 Insira o nome da camada de preços e a configuração de computação para seu Banco de Dados do Azure de destino para o Servidor Flexível MySQL. Segue a convenção {escalão de preço}{geração de computação}{vCores} em estenografia. Consulte os níveis de preços para obter mais informações.
escalão Expansível Camada de computação do Banco de Dados do Azure de destino para o Servidor Flexível MySQL. Valores aceites: Burstable, GeneralPurpose, MemoryOptimized; Valor padrão: Burstable.
Acesso do público 0.0.0.0 Determina o acesso público para o Banco de Dados do Azure de destino para o Servidor Flexível MySQL. Insira um ou um intervalo de endereços IP a serem incluídos na lista de IPs permitidos. Os intervalos de endereços IP devem ser separados por traços e não conter espaços. Especificar 0.0.0.0 permite o acesso público de quaisquer recursos implantados no Azure para acessar seu servidor. Defini-lo como "Nenhum" define o servidor no modo de acesso público, mas não cria uma regra de firewall.
vnet myVnet Nome ou ID de uma rede virtual nova ou existente. Se você quiser usar uma vnet de outro grupo de recursos ou assinatura, forneça um ID de recurso. O nome deve ter entre 2 e 64 caracteres. O nome deve começar com uma letra ou número, terminar com uma letra, número ou sublinhado, e pode conter apenas letras, números, sublinhados, pontos ou hífenes.
sub-rede mySubnet Nome ou ID de recurso de uma sub-rede nova ou existente. Se você quiser usar uma sub-rede de outro grupo de recursos ou assinatura, forneça o ID do recurso em vez do nome. Observe que a sub-rede será delegada a flexibleServers. Após a delegação, essa sub-rede não pode ser usada para nenhum outro tipo de recursos do Azure.
Private-DNS-Zona myserver.private.contoso.com O nome ou ID da zona dns privada nova ou existente. Você pode usar a zona dns privada do mesmo grupo de recursos, grupo de recursos diferente ou assinatura diferente. Se você quiser usar uma zona de outro grupo de recursos ou assinatura, forneça a ID do recurso. A CLI cria uma nova zona dns privada dentro do mesmo grupo de recursos da rede virtual, se não for fornecida pelos usuários.
key identificador de chave de testKey O ID de recurso da chave keyvault primária para criptografia de dados.
de identidade testIdentity O nome ou ID de recurso da identidade atribuída ao usuário para criptografia de dados.
storage-size 32 A capacidade de armazenamento do Banco de Dados do Azure de destino para o Servidor Flexível MySQL. O mínimo é de 20 GiB, e o máximo é de 16 TiB.
etiquetas chave=valor Indique o nome do grupo de recursos do Azure.
versão 5.7 Versão principal do servidor do Banco de Dados do Azure de destino para o Servidor Flexível MySQL.
alta disponibilidade ZoneRedundante Habilite (ZoneRedundant ou SameZone) ou desabilite o recurso de alta disponibilidade para o Banco de Dados do Azure de destino para o Servidor Flexível MySQL. Valores aceitos: Disabled, SameZone, ZoneRedundant; Valor padrão: Desativado.
zona 1 Zona de disponibilidade na qual provisionar o recurso.
zona de espera 3 As informações da zona de disponibilidade do servidor em espera quando a Alta Disponibilidade está ativada.
crescimento automático do armazenamento Ativado(a) Habilite ou desabilite o crescimento automático do armazenamento para o Banco de Dados do Azure de destino para o Servidor Flexível MySQL. O valor padrão é Enabled. Valores aceitos: Desativado, Habilitado; Valor padrão: Habilitado.
IOPS 500 Número de IOPS a serem alocados para o Banco de Dados do Azure de destino para o Servidor Flexível MySQL. Você obtém uma certa quantidade de IOPS gratuitas com base na computação e no armazenamento provisionados. O valor padrão para IOPS é IOPS livre. Para saber mais sobre IOPS baseadas em computação e armazenamento, consulte IOPS no Banco de Dados do Azure para Servidor Flexível MySQL.

Etapas para a migração online

Depois de concluir a operação de Importação do Banco de Dados do Azure para MySQL acima mencionada:

  • Faça logon no Banco de Dados do Azure de destino para o Servidor Flexível MySQL e execute o seguinte comando para obter o nome do arquivo bin-log e a posição correspondente ao instantâneo de backup usado pelo Banco de Dados do Azure para a CLI de Importação do MySQL para restaurar no servidor de destino.
CALL mysql.az_show_binlog_file_and_pos_for_mysql_import();
  • Configure a replicação de dados entre as instâncias do servidor de origem e de destino usando a posição bin-log seguindo as etapas listadas aqui e quando o status da replicação refletir que o servidor de destino alcançou a origem, interrompeu a replicação e executou a substituição.

Práticas recomendadas para configurar o Banco de Dados do Azure para parâmetros de comando da CLI de importação do MySQL

Antes de acionar o comando Azure Database for MySQL Import CLI, considere as seguintes diretrizes de configuração de parâmetros para ajudar a garantir carregamentos de dados mais rápidos usando a CLI de Importação do Banco de Dados do Azure para MySQL.

  • Se você quiser substituir os padrões inteligentes, selecione a camada de computação e o nome da SKU para o servidor flexível de destino com base na camada de preços do servidor único de origem e VCores com base nos detalhes da tabela a seguir.

    Escalão de Preço do Servidor Único VCores de Servidor Único Camada de servidor flexível Nome SKU flexível do servidor
    Básica 1 Expansível Standard_B1s
    Básica 2 Expansível Standard_B2s
    Fins Gerais 4 GeneralPurpose Standard_D4ds_v4
    Fins Gerais 8 GeneralPurpose Standard_D8ds_v4
    Fins Gerais 16 GeneralPurpose Standard_D16ds_v4
    Fins Gerais 32 GeneralPurpose Standard_D32ds_v4
    Fins Gerais 64 GeneralPurpose Standard_D64ds_v4
    Otimizada para Memória 4 MemóriaOtimizado Standard_E4ds_v4
    Otimizada para Memória 8 MemóriaOtimizado Standard_E8ds_v4
    Otimizada para Memória 16 MemóriaOtimizado Standard_E16ds_v4
    Otimizada para Memória 32 MemóriaOtimizado Standard_E32ds_v4
  • A versão, região, assinatura e recurso do MySQL para o servidor flexível de destino deve ser igual ao do servidor único de origem.

  • O tamanho de armazenamento para o servidor flexível de destino deve ser igual ou maior do que no servidor único de origem.

  • Se a instância do Servidor Único tiver a 'Criptografia Dupla de Infraestrutura' habilitada, a habilitação da Chave Gerenciada pelo Cliente (CMK) na instância do Servidor Flexível de destino é recomendada para oferecer suporte a funcionalidade semelhante. Você pode optar por habilitar a CMK no servidor de destino com o Banco de Dados do Azure para MySQL, importar parâmetros de entrada da CLI ou pós-migração também.

Quanto tempo o Banco de Dados do Azure para Importação MySQL leva para migrar minha instância de Servidor Único?

Abaixo está o desempenho aferido com base no tamanho do armazenamento.

Tamanho de armazenamento de servidor único Tempo de importação
1 GiB 0 min 23 seg
10 GiB 4 min 24 seg
100 GiB 10 min 29 seg
500 GiB 13 min 15 seg
1 TB 22 min 56 seg
10 TB 2 horas 5 min 30 seg

Na tabela acima, à medida que o tamanho do armazenamento aumenta, o tempo necessário para a cópia de dados também aumenta, quase em uma relação linear. No entanto, é importante notar que a velocidade de cópia pode ser significativamente afetada pelas flutuações da rede. Por conseguinte, os dados aqui fornecidos devem ser tomados apenas como referência.

Abaixo está o desempenho aferido com base no número variável de tabelas para o tamanho de armazenamento de 10 GiB.

Número de tabelas na instância de servidor único Tempo de importação
100 4 min 24 seg
200 4 min 40 seg
800 4 min 52 seg
14,400 17 min 41 seg
28,800 19 min 18 seg
38,400 22 min 50 seg

À medida que o número de ficheiros aumenta, cada ficheiro/tabela na base de dados pode tornar-se muito pequeno. Isso resultará em uma quantidade consistente de dados sendo transferidos, mas haverá operações relacionadas a arquivos mais frequentes, o que pode afetar o desempenho do Banco de Dados do Azure para Importação Mysql.

Etapas pós-importação

  • Copie as seguintes propriedades do Servidor Único de origem para o Servidor Flexível de destino pós Banco de Dados do Azure para MySQL A operação de importação é concluída com êxito:
    • Réplicas de leitura
    • Valor do parâmetro do servidor para event_scheduler
    • Monitorando as configurações da página (Alertas, Métricas e Configurações de diagnóstico)
    • Todos os scripts Terraform/CLI que você hospeda para gerenciar sua instância de Servidor Único devem ser atualizados com referências de Servidor Flexível.

Próximos passos