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

Importar dados de qualquer fonte para uma instância de banco de dados do Amazon RDS para MySQL

As seguintes etapas explicam como importar dados para uma instância de banco de dados do Amazon RDS:

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 um arquivo próprio. 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.

Se 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 nomes dos novos arquivos incluem sufixos numéricos ascendentes. O comando a seguir produz arquivos com nomes, como sales.part_00 e sales.part_01.

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

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

Você pode armazenar os arquivos simples em qualquer lugar. No entanto, ao carregar os dados na Etapa 5, você deve invocar o shell mysql do mesmo local em que os arquivos estão ou usar o caminho absoluto para os arquivos ao executar LOAD DATA LOCAL INFILE.

Etapa 2: impedir que quaisquer aplicações acessem a instância de banco de dados de destino

Antes de iniciar um grande carregamento, impeça que qualquer atividade da aplicação acesse 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. Do contrário, recomendamos criar snapshots de banco de dados da instância de banco de dados de destino do Amazon RDS antes e depois do carregamento dos dados. Os snapshots de banco de dados do Amazon RDS são backups completos da 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 caso ocorra um problema. Você também pode usar snapshots de banco de dados após o carregamento para importar dados para novas instâncias de banco de dados.

O exemplo a seguir executa o comando create-db-snapshot da AWS CLI para criar um snapshot de 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 ter mais informações, consulte restore-db-instance-from-db-snapshot.

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 ter mais informações, consulte delete-db-instance.

O exemplo a seguir também cria um snapshot de banco de dados final da instância de banco de dados antes de excluí-la. Isso é opcional, porém é recomendado.

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

Etapa 4 (opcional): desativar os backups automatizados do Amazon RDS

Atenção

Não desative os backups automatizados se você precisa realizar uma recuperação para um ponto no tempo.

A desativação de backups automatizados ajuda a otimizar a performance e não é necessária para carregamentos de dados. Ao desativar os backups automatizados, todos os backups existentes são apagados. Consequentemente, após a desativação dos backups automatizados, não é possível realizar uma recuperação para um ponto no tempo. 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.

Execute 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 obter mais informações, consulte modify-db-instance.

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 sua instância de banco de dados com o comando describe-db-instances. O seguinte 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ê poderá prosseguir para a próxima etapa.

Etapa 5: Carregar os dados

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

nota

Você deve invocar o shell mysql do mesmo local em que seus arquivos simples estão ou usar o caminho absoluto para os arquivos ao executar LOAD DATA LOCAL INFILE.

O seguinte exemplo mostra como carregar dados de um arquivo chamado sales.txt em uma tabela denominada 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

Para ter mais informações sobre a instrução LOAD DATA, consulte LOAD DATA Statement na documentação do MySQL.

Etapa 6: reativar os backups automatizados do Amazon RDS

Se você desativou os backups automatizados do Amazon RDS na Etapa 4, depois que o carregamento for concluído, ative os backups automatizados definindo o período de retenção de backup de volta para o valor anterior ao carregamento. Conforme mencionado na Etapa 4, como o Amazon RDS reinicia a instância de banco de dados, prepare-se para uma breve interrupção.

O seguinte exemplo executa o comando modify-db-instance da AWS CLI para ativar os backups automatizados da instância de banco de dados 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