Tenho uma boa experiência de backup usando a duplicidade . Se você conseguir fazer um snapshot e montá-lo somente para leitura, é uma boa opção ter um backup incremental consistente.
Normalmente, o problema é fazer o backup de bancos de dados (MongoDB, ElasticSearch, MySQL, o nome dele) é consistente. As mesmas coisas se aplicam ao backup de arquivos comuns, mas com bancos de dados, os riscos de corrupção de dados são provavelmente os mais altos.
Você tem poucas opções (esperamos que outras adicionem mais)
-
Descarregue o banco de dados e faça o backup do dump. Isso é o mais simples, seguro e direto.
-
Pare o banco de dados (ou use outro método para tornar os dados em disco consistentes) e faça o backup. (Desta forma, faz com que um longo tempo de inatividade, nem sempre é possível)
-
Pare o banco de dados (como em # 2), faça um snapshot (volume ou fs, verifique se o fs está consistente nesse ponto), inicie o banco de dados, monte o snapshot readonly e faça o backup. Mas nem todas as configurações são adequadas para isso.
-
Pare o banco de dados (como em # 2), faça um instantâneo (desta vez ele funciona apenas para volumes, verifique se o fs está consistente nesse ponto), inicie o banco de dados, faça backup do instantâneo como um bloco dispositivo. Isso pode aumentar o tamanho do backup e, novamente, pode não ser possível em todas as configurações.
-
Faça backup dos arquivos do banco de dados ao vivo e espere que funcione quando você restaurar. (Você está brincando com fogo aqui.) Se for possível, fique longe disso .
-
Se sua tecnologia tiver um meio especial de backup, use isso. (Como backup de captura instantânea direta de ELB para S3.)
De qualquer forma que você escolher, lembre-se de que você deve testar que você pode restaurar a partir do backup várias vezes, a partir de vários backups diferentes.
#!/bin/bash
BACKUP_BASE="/data/backups/"
DIRNAME="mongo"
BUCKET="mybackups"
ARCHIVE_DIR="/data/backups_duplicity_archives/${DIRNAME}"
VERBOSE="-v 4"
S3_PARAMS="--s3-use-new-style" # --s3-use-multiprocessing" # --s3-use-rrs"
export PASSPHRASE="something"
export AWS_ACCESS_KEY_ID="AN_ID"
export AWS_SECRET_ACCESS_KEY="A_KEY"
cd ${BACKUP_BASE}
rm -rf ${BACKUP_BASE}/${DIRNAME}
/usr/bin/mongodump -h 10.0.0.1 -o ${BACKUP_BASE}/${DIRNAME}/databasename --oplog
/usr/bin/duplicity $S3_PARAMS --asynchronous-upload ${VERBOSE} --archive-dir=${ARCHIVE_DIR} incr --full-if-older-than 14D ${BACKUP_BASE}/${DIRNAME} "s3+http://${BUCKET}/${DIRNAME}"
if [ ! $! ]; then
/usr/bin/duplicity $S3_PARAMS ${VERBOSE} --archive-dir=${ARCHIVE_DIR} remove-all-but-n-full 12 --force "s3+http://${BUCKET}/${DIRNAME}"
/usr/bin/duplicity $S3_PARAMS ${VERBOSE} --archive-dir=${ARCHIVE_DIR} remove-all-inc-of-but-n-full 4 --force "s3+http://${BUCKET}/${DIRNAME}"
fi