Exportando uma Instância do MySQL

Exporte uma instância MySQL para um bucket do Object Storage usando utilitários de dump do Shell MySQL. Em seguida, você pode usar o recurso de importação de dados para importar dados do bucket do Object Storage para um sistema de banco de dados presente na mesma região.

Use um dos seguintes utilitários de despejo:

  • util.dumpInstance(outputUrl[, options]): Utilitário de exportação de instância MySQL que exporta todos os esquemas compatíveis para um bucket do serviço Object Storage ou para arquivos locais. Por padrão, esse utilitário exporta usuários, eventos, rotinas e triggers. Consulte Utilitários de Dump.
  • util.dumpSchemas(schemas, outputUrl[, options]): Utilitário de exportação de esquema MySQL que exporta esquemas selecionados para um bucket do serviço Object Storage ou para arquivos locais.
  • util.dumpTables(schema, tables, outputUrl[, options]): Utilitário de exportação de tabelas MySQL que exporta tabelas selecionadas de um esquema para um bucket do Object Storage ou para arquivos locais.

Durante a exportação de dados, execute verificações de compatibilidade nos esquemas. Se houver algum problema, o utilitário de dump abortará a exportação e produzirá uma lista detalhada de problemas e sugerirá etapas para corrigi-los. Além disso, se houver uma interrupção de conexão durante a exportação de dados, você terá que executar novamente o utilitário de dump. Não é possível pausar e retomar a exportação de dados.

Usando o MySQL Shell

Use o utilitário dumpInstance do MySQL Shell para exportar uma instância MySQL para um bucket do serviço Object Storage.

Esta tarefa requer o seguinte:
  • MySQL Shell 8.0.27 ou mais recente. As exportações criadas pelo MySQL Shell 8.0.27 ou superior não podem ser importadas por versões anteriores do MySQL Shell. Recomenda-se a versão mais recente do MySQL Shell.
  • Acesso ao serviço Object Storage e a um bucket existente.
  • Um arquivo de configuração válido. Se tiver instalado e configurado a CLI no local padrão, você terá um arquivo de configuração válido. Se você não tiver instalado e configurado a CLI, deverá instalá-la ou criar um arquivo de configuração manualmente. Consulte Arquivo de Configuração da CLI e do SDK.
Faça o seguinte para exportar uma instância MySQL para um bucket do serviço Object Storage:
  1. Execute o MySQL Shell na máquina cliente que contém o arquivo de configuração da CLI.
  2. Alterne para o tipo de entrada JavaScript, digitando \js e pressionando Enter.
  3. Execute o seguinte comando para iniciar uma sessão global conectando-se à instância MySQL:
    \c <UserName>@<MySQLIPAddress>
    • \c: Especifica o comando Shell para estabelecer uma nova conexão.
    • <UserName>: Especifica o nome de usuário da instância MySQL.
    • <MySQLIPAddress>: Especifica o endereço IP ou o nome do host da instância MySQL.
  4. (etapa opcional recomendada) Execute o comando a seguir para testar a execução da exportação de toda a instância MySQL. Ele verifica se há problemas de compatibilidade do sistema de BD e lista esses problemas juntamente com as soluções sugeridas na saída.
    util.dumpInstance("", {mode: "dryrun", ocimds: true})
    Identifique todas as opções de compatibilidade que removam os problemas encontrados. Inclua essas opções de compatibilidade para exportar a instância MySQL com sucesso quando a opção ocimds estiver ativada.
  5. Execute o seguinte comando para exportar toda a instância MySQL para um bucket do Object Storage:
    util.dumpInstance("<BucketPrefix>", {osBucketName: "<MDSBucket>", threads: <ThreadSize>, ocimds: true, 
        compatibility: ["<comma separated list of compatibility options>], bytesPerChunk: "<ChunkSize>"})
    • util.dumpInstance: Especifica o comando para exportar uma instância MySQL inteira.
    • <BucketPrefix>: (Opcional) Adiciona um prefixo aos arquivos submetidos a upload para o bucket. Se esta opção for especificada, o upload dos arquivos será feito no bucket definido com o prefixo no seguinte formato: <BucketPrefix>/filename, de forma semelhante a um caminho de arquivo. Por exemplo, se <BucketPrefix> for definido como test, todo arquivo submetido a upload para o bucket definido, <MDSBucket>, será feito assim como test/filename. Se você fizer download do arquivo, o prefixo será tratado como uma pasta no download. Para exportações locais, esse parâmetro é o caminho para o diretório local para o qual você deseja exportar.

      Embora o conteúdo desse parâmetro seja opcional, as aspas não são. Mesmo que não pretenda usar um prefixo, você deve incluir as aspas na sintaxe do comando.

    • osBucketName: Especifica o nome com distinção entre maiúsculas e minúscula do bucket do serviço Object Storage para o qual exportar. O MySQL Shell usa as informações da tenancy e do usuário definidas no arquivo config.
    • threads: (Opcional) Especifica o número de threads de processamento a serem usados para esta tarefa. O valor padrão é 4. Para obter melhor desempenho, é recomendável definir esse parâmetro para o número de núcleos de CPU disponíveis no servidor de banco de dados.
    • ocimds: Verifica a compatibilidade dos dados com o Serviço HeatWave. Quando isso for definido como true, você não poderá exportar uma instância se ela for incompatível com o Serviço HeatWave.
      Observação

      A importação dos dados para um sistema de banco de dados HeatWave com o utilitário util.loadDump requer que o dump seja criado com a opção ocimds.
    • compatibility: Lista os parâmetros que especificam quais modificações são executadas nos dados exportados. Você deve especificar a lista de opções de compatibilidade sugeridas no modo dryrun. Consulte Verificações de Compatibilidade.
    • bytesPerChunk: (Opcional) Para conjuntos de dados grandes, é recomendável usar esse parâmetro para definir chunks maiores. O tamanho do chunk padrão é 64 MB. Por exemplo, bytesPerChunk: 128M, especifica um tamanho de chunk de 128 MB.
O upload dos dados é feito no bucket especificado.

Verificações de Compatibilidade

O HeatWave Service tem várias restrições relacionadas à segurança que não estão presentes em uma instância MySQL. Use a opção ocimds do utilitário de dump para executar verificações de compatibilidade nos dados submetidos a dump e, se houver algum problema, o utilitário abortará o dump e produzirá uma lista detalhada de problemas e sugerirá etapas para corrigi-los.

O comando a seguir mostra como executar verificações de compatibilidade usando a opção ocimds no modo dryrun. Alguns problemas encontrados pela opção ocimds podem exigir que você edite manualmente o esquema para que ele possa ser carregado no Serviço HeatWave.

util.dumpInstance("", {mode: "dryrun", ocimds: true})

Depois de identificar os problemas de compatibilidade e as opções de compatibilidade, você pode especificar as opções no comando que exporta os dados.

util.dumpInstance("<BucketPrefix>", {osBucketName: "<MDSBucket>", ocimds: true, 
    compatibility: ["force_innodb", "strip_definers", "strip_restricted_grants", 
    "skip_invalid_accounts", "strip_tablespaces", "ignore_missing_pks"] } )

Você pode usar as seguintes opções de compatibilidade separadas por vírgulas para modificar automaticamente os dados exportados, o que resolve alguns destes problemas de compatibilidade:

  • force_innodb: O HeatWave Service suporta apenas o mecanismo de armazenamento InnoDB. Essa opção modifica a cláusula ENGINE de instruções CREATE TABLE que usam mecanismos de armazenamento incompatíveis e os substitui por InnoDB.
  • strip_definers: Remove a cláusula "DEFINER=account" de views, rotinas, eventos e acionadores. O Serviço HeatWave requer privilégios especiais para criar esses objetos com um definidor diferente do usuário que está carregando o esquema. Ao remover a cláusula DEFINER, esses objetos serão criados com esse definidor padrão. As Views e Rotinas têm suas cláusulas SQL SECURITY alterada de DEFINER para INVOKER. Isso garante que as permissões de acesso da conta que as consulta ou chama sejam aplicadas, em vez do usuário que as criou. Se o modelo de segurança do banco de dados exigir que as views e rotinas tenham mais privilégios que o chamador, modifique manualmente o esquema antes de carregá-lo. Consulte DEFINER e Segurança SQL.
  • strip_restricted_grants: Determinados privilégios são restringidos no Serviço HeatWave. Privilégios como RELOAD, FILE, SUPER, BINLOG_ADMIN e SET_USER_ID. Não é possível criar usuários que concedam esses privilégios. Essa opção remove esses privilégios de instruções GRANT submetidas a dump.
  • skip_invalid_accounts: Você não pode exportar um usuário que não tenha uma senha definida. Essa opção ignora esses usuários.
  • strip_tablespaces: O HeatWave Service tem algumas restrições nos tablespaces. Essa opção remove a opção TABLESPACE das instruções CREATE TABLE, para que todas as tabelas sejam criadas em seus tablespaces padrão.
  • Flags de chave primária:
    • create_invisible_pks: Chaves primárias são exigidas por sistemas de banco de dados de alta disponibilidade. Se você pretende exportar dados para uso em um sistema de banco de dados de alta disponibilidade, adicione chaves primárias se elas não estiverem definidas nas tabelas. Esse flag de compatibilidade adiciona chaves primárias invisíveis a cada tabela que as exige. Consulte Requisitos.
    • ignore_missing_pks: Se você não pretende importar para um sistema de banco de dados de alta disponibilidade, esse flag de compatibilidade ignorará as chaves primárias ausentes em seu dump.

Além disso, as opções DATA DIRECTORY, INDEX DIRECTORY e ENCRYPTION nas instruções CREATE TABLE são sempre comentadas nos scripts DDL se a opção ocimds estiver ativada.

Observação

Se você pretende exportar uma versão mais antiga de MySQL, como 5.7.9, e se estiver usando uma versão do Shell MySQL mais antiga que 8.0.30, recomenda-se executar o Utilitário de Verificação de Upgrade do Shell MySQL para gerar um relatório de todos os possíveis problemas com a migração. Consulte Utilitário de Verificação de Upgrade.