Importar dados de qualquer fonte para uma instância de banco de dados MariaDB ou MySQL - Amazon Relational Database Service

Importar dados de qualquer fonte para uma instância de banco de dados MariaDB ou MySQL

Recomendamos a criação de snapshot de banco de dados da instância de banco de dados do Amazon RDS de destino antes e depois do carregamento dos dados. Os snapshot de banco de dadoss do Amazon RDS são backups completos de sua instância de banco de dados que podem ser usados para restaurá-la em um estado conhecido. Quando você inicia um snapshot de banco de dados, as operações de E/S na sua instância de banco de dados são momentaneamente suspensas enquanto é feito o backup do banco de dados.

Criar um snapshot de banco de dados imediatamente antes do carregamento possibilita a restauração do banco de dados para o estado anterior ao carregamento, se necessário. Um snapshot de banco de dados feito imediatamente após a carga evita que você tenha que carregar os dados novamente em caso de um problema e também pode ser usado para gerar novas instâncias de banco de dados.

A lista a seguir mostra as etapas a serem realizadas. Cada etapa é discutida em mais detalhes a seguir.

  1. Crie arquivos simples contendo os dados a serem carregados.

  2. Pare todos os aplicativos que acessam a instância de banco de dados de destino.

  3. Crie um snapshot de banco de dados.

  4. Considere desativar backups automatizados do Amazon RDS.

  5. Carregue os dados.

  6. Habilite backups automáticos novamente.

Etapa 1: Criar arquivos simples contendo os dados a serem carregados

Use um formato comum, como valores separados por vírgula (CSV), para armazenar os dados a serem carregados. Cada tabela deve ter seu próprio arquivo. Não é possível combinar os dados de várias tabelas no mesmo arquivo. Dê a cada arquivo o mesmo nome que a tabela correspondente. A extensão do arquivo pode ser qualquer opção desejada. Por exemplo, se o nome da tabela for sales, o nome do arquivo poderá ser sales.csv ou sales.txt, mas não sales_01.csv.

Sempre que possível, ordene os dados pela chave primária da tabela que está sendo carregada. Fazer isso melhora drasticamente os tempos de carregamento e minimiza os requisitos de armazenamento em disco.

A velocidade e a eficiência desse procedimento dependem de manter o tamanho dos arquivos pequenos. Se o tamanho descompactado de qualquer arquivo individual for maior que 1 GiB, divida-o em vários arquivos e carregue cada um separadamente.

Em sistemas semelhantes ao Unix (incluindo o Linux), use o comando split. Por exemplo, o seguinte comando divide o arquivo sales.csv em vários arquivos com menos de 1 GiB, dividindo apenas em intervalos de linha (-C 1024m). Os novos arquivos receberão os nomes sales.part_00, sales.part_01 e assim por diante.

split -C 1024m -d sales.csv sales.part_

Utilitários semelhantes estão disponíveis para outros sistemas operacionais.

Etapa 2: Interromper todas as aplicações que acessam a instância de banco de dados de destino

Antes de iniciar um carregamento grande, pare todas as atividades do aplicativo acessando a instância de banco de dados de destino para a qual planeja fazer o carregamento. Recomendamos isso especialmente se outras sessões modificarem as tabelas que estão sendo carregadas ou as tabelas às quais elas fazem referência. Isso reduz o risco de violações de restrição durante o carregamento e melhora a performance do carregamento. Também possibilita restaurar a instância de banco de dados até o ponto antes do carregamento, sem perder as alterações feitas pelos processos não envolvidos no carregamento.

É que isso pode não ser possível ou prático. Se você não conseguir impedir que as aplicações acessem a instância de banco de dados antes do carregamento, tome medidas para garantir a disponibilidade e a integridade dos seus dados. As etapas específicas necessárias variam muito dependendo dos casos específicos de uso e dos requisitos do site.

Etapa 3: Criar um snapshot de banco de dados

Se você planeja carregar dados em uma nova instância de banco de dados que não contém dados, pode ignorar essa etapa. Caso contrário, criar um snapshot de banco de dados da sua instância de banco de dados possibilita a restauração dessa instância de banco de dados até o ponto antes do carregamento, se for necessário. Conforme mencionado anteriormente, quando você inicia um snapshot do banco de dados, as operações de E/S para a sua instância de banco de dados são suspensas por alguns minutos enquanto é feito o backup do banco de dados.

O exemplo a seguir usa o comando da AWS CLI create-db-snapshot para criar um snapshot do banco de dados da instância AcmeRDS e fornece ao snapshot do banco de dados o identificador "preload".

Para Linux, macOS ou Unix:

aws rds create-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

Para Windows:

aws rds create-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

Você também pode usar a restauração da funcionalidade de snapshot do banco de dados para criar instâncias de banco de dados de teste para execuções simuladas ou para desfazer alterações feitas durante o carregamento.

Tenha em mente que restaurar um banco de dados de um snapshot de banco de dados cria uma nova instância de banco de dados que, como todas as instâncias de banco de dados, possui um identificador exclusivo e um endpoint. Para restaurar a instância de banco de dados sem alterar o endpoint, primeiro exclua a instância de banco de dados para poder reutilizar o endpoint.

Por exemplo, para criar uma instância de banco de dados para execuções simuladas ou outros testes, forneça à instância de banco de dados um identificador próprio. Na exemplo, o identificador é AcmeRDS-2. O exemplo se conecta à instância de banco de dados usando o endpoint associado ao AcmeRDS-2.

Para Linux, macOS ou Unix:

aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS-2 \ --db-snapshot-identifier preload

Para Windows:

aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS-2 ^ --db-snapshot-identifier preload

Para reutilizar o endpoint existente, primeiro exclua a instância de banco de dados e forneça ao banco de dados restaurado o mesmo identificador.

Para Linux, macOS ou Unix:

aws rds delete-db-instance \ --db-instance-identifier AcmeRDS \ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

Para Windows:

aws rds delete-db-instance ^ --db-instance-identifier AcmeRDS ^ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

O exemplo anterior usa um snapshot do banco de dados final da instância de banco de dados antes de excluí-la. Isso é opcional, porém é recomendado.

Etapa 4: considerar a desativação de backups automáticos do Amazon RDS

Atenção

Não desative os backups automatizados se você precisa realizar a recuperação em um ponto anterior no tempo.

Desativar os backups automáticos apaga todos os backups existentes e, portanto, a recuperação em um ponto anterior no tempo não será possível depois que os backups automatizados forem desativados. A desabilitação de backups automatizados é uma otimização de performance e não é necessária para carregamentos de dados. Os snapshots do banco de dados manuais não são afetados com a desativação dos backups automatizados. Todos os snapshots de banco de dados manuais existentes ainda estão disponíveis para restauração.

Desativar os backups automatizados reduz o tempo de carregamento em cerca de 25% e reduz a quantidade de espaço de armazenamento necessária durante o carregamento. Se você planeja carregar dados em uma nova instância de banco de dados que não contém dados, desativar os backups é uma maneira fácil de acelerar o carregamento e evitar o uso do armazenamento adicional necessário para backups. No entanto, em alguns casos, você pode planejar fazer o carregamento em uma instância de banco de dados que já contenha dados. Se for o caso, avalie os benefícios da desativação de backups em relação ao impacto da perda da capacidade de realizar a recuperação em um ponto anterior no tempo.

As instâncias de bancos de dados têm backups automatizados desativados por padrão (com um período de retenção de um dia). Para desatiar os backups automáticos, defina o período de retenção de backup para zero. Após o carregamento, você pode reativar os backups definindo o período de retenção de backup como um valor diferente de zero. Para ativar ou desativar os backups, o Amazon RDS desliga a instância de banco de dados e a reinicia para habilitar ou desabilitar o registro em log do MariaDB ou do MySQL.

Use o comando AWS CLI da modify-db-instance para definir a retenção do backup como zero e aplicar a alteração imediatamente. Definir o período de retenção como zero exige uma reinicialização da instância de banco de dados. Por isso, aguarde até que a reinicialização tenha sido concluída antes de prosseguir.

Para Linux, macOS ou Unix:

aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --apply-immediately \ --backup-retention-period 0

Para Windows:

aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --apply-immediately ^ --backup-retention-period 0

Você pode verificar o status da sua instância de banco de dados com o comando AWS CLI da describe-db-instances. O exemplo mostra o status da instância de banco de dados AcmeRDS.

aws rds describe-db-instances --db-instance-identifier AcmeRDS --query "*[].{DBInstanceStatus:DBInstanceStatus}"

Quando o status da instância de banco de dados for available, você estará pronto para prosseguir.

Etapa 5: Carregar os dados

Use a instrução MySQL LOAD DATA LOCAL INFILE para ler as linhas dos arquivos simples nas tabelas do banco de dados.

O exemplo a seguir mostra como carregar dados de um arquivo chamado sales.txt em uma tabela chamada Sales no banco de dados.

mysql> LOAD DATA LOCAL INFILE 'sales.txt' INTO TABLE Sales FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\\'; Query OK, 1 row affected (0.01 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 0

Consulte mais informações sobre a instrução LOAD DATA na documentação do MySQL.

Etapa 6: reativar os backups automáticos do Amazon RDS

Depois que o carregamento for concluído, ative os backups automatizados do Amazon RDS configurando o período de retenção de backup para o valor anterior ao carregamento. Conforme mencionado anteriormente, o Amazon RDS reinicia a instância de banco de dados, então esteja preparado para uma breve interrupção.

O exemplo a seguir usa o comando da AWS CLI modify-db-instance para ativar os backups automáticos da instância de banco de dados do AcmeRDS e define o período de retenção para um dia.

Para Linux, macOS ou Unix:

aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --backup-retention-period 1 \ --apply-immediately

Para Windows:

aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --backup-retention-period 1 ^ --apply-immediately