Qual é a maneira recomendada de fazer backup de um banco de dados MySQL / Amazon RDS no S3?

31

Eu tenho dois propósitos para isso:

  1. Para ter um backup externo no caso de um problema em toda a região com o Amazon Web Services.
  2. Para copiar dados de produção de uma conta de cobrança de produção para uma conta de cobrança beta.

Atualmente, não parece que a Amazon suporte um desses dois casos de uso imediatamente.

Eu vi mysqldump e xtrabackup (veja a publicação do formulário ) mencionados.

Eu também vi um processo mais complicado (documentado aqui )

  1. Um novo servidor RDS na conta de cobrança de origem (prod) é gerado em um backup recente.
  2. É gerada uma nova instância do EC2 que tem acesso ao servidor RDS na etapa 1.
  3. O mysqldump é usado para fazer um backup deste banco de dados.
  4. O backup é copiado para um local externo (S3?).
  5. Em uma conta e / ou região separada, um novo servidor RDS é ativado.
  6. Despejo de banco de dados é importado.

Dicas e sugestões são apreciadas.

Peter Stephens
fonte

Respostas:

22

A maneira recomendada de fazer backup do RDS é com backups automáticos e instantâneos de banco de dados . Os instantâneos do banco de dados são basicamente os mesmos do EBS, que são armazenados no S3 nos bastidores, mas estão disponíveis apenas na mesma região.

Se você precisar de tolerância a falhas entre regiões (bom plano!), Não há como restaurar seus dados em outra região sem fazê-lo "da maneira mais difícil" de um mysqldump. Suas alternativas são fazer backup usando o mysqldump (lento e terrível para qualquer conjunto de dados de tamanho razoável) ou configurar seu próprio escravo baseado em EC2 em outra região e fazer backup usando qualquer método disponível (xtrabackup, snapshots do EBS, etc.). No entanto, você voltou a gerenciar suas próprias instâncias do MySQL, para poder abandonar o RDS completamente.

Pelo meu dinheiro, o RDS não oferece absolutamente nenhum benefício, de qualquer forma, e muitas desvantagens de desempenho, flexibilidade e confiabilidade. Gostaria de me perguntar qual o valor que o RDS fornece a você.

Aaron Brown
fonte
Para minhas necessidades atuais, o mysqldump pode funcionar bem. Não estou esperando conjuntos de dados massivos e geralmente não preciso que os dados sejam movidos muito rapidamente. Espero que o RDS suporte um recurso para ativar um novo servidor de um instantâneo em outra conta. Outro recurso útil seria importar / exportar os instantâneos da Amazon usando o S3 ou o servidor de Importação / Exportação. De qualquer forma, obrigado pela resposta.
Peter Stephens
4
Os instantâneos do RDS agora podem ser copiados para outras regiões. Veja este comunicado e esta documentação para obter detalhes.
Shelley
9

Eu tive o mesmo problema. Minha solução foi escrever um script bash simples . No entanto, é limitado a uma única região.

Aqui está o script em questão:

#!/bin/bash
NOWDATE=`date +%Y-%m-%d`
BACKUPNAME="$NOWDATE.sql.gz"

echo "Creating backup of database finances to $BACKUPNAME"
mysqldump user=user password=password database_name | gzip -9 > $BACKUPNAME

echo "Succesfully created database backup"

echo "Uploading backup to Amazon S3 bucket…"
s3cmd put $BACKUPNAME s3://path/to/file/$BACKUPNAME

echo "Successfully uploaded backup to S3"

echo "Deleting backup file…"
rm $BACKUPNAME

echo "Done"
Jeevan Dongre
fonte
Eu recomendo --single transação ao executar mysqldump
user1250
7

O AWS RDS agora oferece suporte à cópia entre instantâneos e entre contas de instantâneos, o que permitirá que você complete seus objetivos simplesmente usando o RDS.

Você ainda precisa usar um método de script de despejo para obter backups para o S3 neste momento. A capacidade de usar o S3-IA ou o Glacier seria boa em termos de economia de custos, uma vez que os custos de backup do RDS estão no S3 Standard ou superior (variam de db).

Mike Lapinskas
fonte
1
Há um limite flexível de 100 instantâneos manuais por região, por conta.
Jude