La configuration des sauvegardes de base de données est la chose la plus importante à gérer en tant qu'administrateur de base de données. Alors que les plates-formes Database-as-a-Service telles que RDS prennent en charge les sauvegardes automatiques prêtes à l'emploi, si vous exécutez votre propre serveur, vous devrez configurer vous-même les sauvegardes.
Quelle est la meilleure stratégie de sauvegarde?
La stratégie de sauvegarde la plus simple consiste à utiliser une base de données en tant que service entièrement gérée et à configurer des sauvegardes automatiques à partir de leur panneau de contrôle. Cela inclut des services tels que AWS RDS et DocumentDB, ainsi que Mongo's Atlas, qui prennent tous deux en charge les sauvegardes automatiques sur S3. Cependant, tout le monde ne les utilise pas et si vous ne l’utilisez pas, vous devrez les gérer vous-même.
Si vous ne souhaitez pas les gérer vous-même, mais que vous devez tout de même exécuter une base de données sur votre propre matériel, vous pouvez essayer Gestionnaire de cloud de Mongo, qui coûte 40 $ par mois et par serveur, et prend en charge les sauvegardes automatiques ainsi que la surveillance des opérations. Il s’agit de loin de la meilleure option pour les clusters fragmentés et les jeux de réplicas. Par conséquent, si vous utilisez autre chose qu’une seule base de données, vous veux configurer ça.
Cependant, rien ne vaut la gratuité, et vous pouvez bien sûr configurer vous-même des sauvegardes avec un simple travail cron. Vous avez deux options:sauvegarder les fichiers sous-jacents avec un instantané du système de fichiers, ou exécutez mongodump
. Les deux sont des méthodes valides et peuvent toutes deux être effectuées sur une base de données en cours d'exécution, c'est donc à vous de décider. Nous irons avec mongodump
car c'est beaucoup plus simple, mais si vous avez une base de données très volumineuse, vous pouvez utiliser des instantanés de système de fichiers à la place.
Configurer mongodump et S3
Tout d'abord, vous aurez besoin du AWS CLI installé et configuré avec un compte IAM pouvant accéder au bucket cible. Vous devrez également créer un seau qui hébergera les sauvegardes.
Ensuite, copiez ce script sur le serveur:
export HOME = / home / ubuntu / HOST = localhost # Nom de la base de données DBNAME = base de données # Nom du compartiment S3 BUCKET = sauvegardes # Compte utilisateur Linux UTILISATEUR = ubuntu # Heure actuelle HEURE = `/ bin / date +% d-% m-% Y-% T` # Répertoire de sauvegarde DEST = / home / $ USER / tmp # Fichier tar du répertoire de sauvegarde TAR = $ DEST /../$ TIME.tar # Créer un répertoire de sauvegarde (-p pour éviter l'avertissement s'il existe déjà) / bin / mkdir -p $ DEST # Journal echo "Sauvegarde de $ HOST / $ DBNAME vers s3: // $ BUCKET / on $ TIME"; # Dump de l'hôte mongodb dans le répertoire de sauvegarde / usr / bin / mongodump -h $ HOST -d $ DBNAME -o $ DEST # Créer tar du répertoire de sauvegarde / bin / tar cvf $ TAR -C $ DEST. # Télécharger tar vers s3 / usr / bin / aws s3 cp $ TAR s3: // $ BUCKET / --storage-class STANDARD_IA # Supprimer le fichier tar localement / bin / rm -f $ TAR # Supprimer le répertoire de sauvegarde / bin / rm -rf $ DEST # Terminé echo "Sauvegarde disponible sur https://s3.amazonaws.com/$BUCKET/$TIME.tar"
Cela définit un tas de variables, y compris la variable HOME pour cron
compatibilité, ainsi que les paramètres de la base de données et du compartiment. Il crée alors un ~ / tmp
dossier dans lequel enregistrer le vidage et s'exécute mongodump
sur la base de données cible. Il court le goudron
pour sauvegarder le répertoire (depuis mongodump
enregistre des fichiers séparés pour chaque collection), puis télécharge le fichier sur S3, en le stockant dans le compartiment donné dans le niveau Accès peu fréquent, ce qui permet d'économiser de l'argent sur les coûts de stockage et est idéal pour ce cas d'utilisation.
Si vous exécutez ce script, vous devriez voir un nouveau tar de sauvegarde dans le compartiment cible. Si cela fonctionne, ouvrez votre crontab avec:
crontab -e
Et ajoutez une nouvelle ligne pour ce script:
Vous voudrez probablement le définir sur * * * * *
pour qu'il s'exécute toutes les minutes, juste pour s'assurer qu'il fonctionne à partir de cron. Une fois que vous l'avez confirmé, vous pouvez le définir sur quelque chose de plus raisonnable, comme une ou deux fois par jour. Vous pouvez utiliser ce programmateur cron en ligne pour vous assurer que vos horaires sont en ordre.
Configurer un cycle de vie S3
Étant donné que ces sauvegardes ne sont que des vidages de la base de données, vous ne souhaitez probablement pas en stocker plus d'une semaine ou deux, car elles rempliront votre compartiment S3 assez rapidement sinon.
S3 peut gérer les objets en rotation hors des compartiments avec les cycles de vie S3. Dans les paramètres du bucket, cliquez sur "Gestion" et "Ajouter une règle de cycle de vie".
Définissez-le pour qu'il s'applique à tous les objets du compartiment et donnez-lui un nom. Ignorer les transitions.
Sous Expiration, vous pouvez le configurer pour supprimer les objets après un certain nombre de jours dans le compartiment. Vous pouvez également supprimer les versions précédentes d’objets, mais comme le script horodate les sauvegardes, ce n’est pas nécessaire.
Cliquez sur créer et la stratégie sera en vigueur.