Comment sauvegarder et migrer une base de données MongoDB –
La migration des bases de données est quelque chose que chaque administrateur système devra faire à un moment donné. Heureusement, MongoDB fournit des commandes intégrées pour créer et restaurer à partir de sauvegardes, ce qui facilite la migration vers un nouveau serveur.
Sommaire
Utilisation de mongodump pour créer une sauvegarde
mongodump est une commande simple qui créera un fichier de sauvegarde d’une base de données et de ses collections à partir de laquelle vous pourrez restaurer. Cela nécessitera un certain temps d’arrêt pendant que la sauvegarde est effectuée et que le nouveau serveur est mis en service.
Si vous ne souhaitez pas de temps d’arrêt, vous pouvez effectuer une migration de cluster en ajoutant un nouveau nœud à votre cluster, en le définissant comme source d’écriture principale, puis en effectuant un remplacement à chaud vers le nouveau nœud. Cela est beaucoup plus facile si vous utilisez MongoDB Atlas, leur service de base de données gérée.
mongodump
c’est beaucoup plus simple. Vous devrez créer un répertoire pour les sauvegardes:
sudo mkdir /var/backups/mongobackups
Et puis courir mongodump
, en le passant dans un paramètre de base de données et un emplacement de sortie:
sudo mongodump --db databasename --out /var/backups/mongobackups/backup
Vous pouvez également vider manuellement des collections spécifiques avec le --collection
drapeau.
Mongodump peut être exécuté sur une base de données en direct et ne prend que quelques secondes pour créer la sauvegarde. Cependant, toute écriture dans la base de données sera effectivement perdue, car vous déplacez des serveurs. Pour cette raison, vous souhaiterez désactiver le trafic avant de créer le vidage.
Restauration à partir de la sauvegarde
Vous devrez transférer le fichier de sauvegarde de l’ancien serveur vers le nouveau serveur. Cela peut être fait en le téléchargeant via FTP, puis en le téléchargeant sur le nouveau serveur, mais pour les sauvegardes volumineuses, il est préférable d’établir une connexion directe et de la transférer en utilisant scp
.
Vous pouvez utiliser la commande suivante, en remplaçant les noms d’utilisateur et les noms d’hôte par des valeurs pour vos serveurs.
scp user@SRC_HOST:/var/backups/mongobackups/FILENAME user@DEST_HOST:~/FILENAME
Ensuite, une fois que vous avez la sauvegarde sur le nouveau serveur, vous pouvez charger à partir de la sauvegarde. Vous aurez bien sûr besoin de MongoDB installé sur le nouveau serveur.
Pour ce faire, vous pouvez utiliser le mongorestore
commander:
mongorestore <options> <connection-string> <file to restore>
Vous devriez voir immédiatement la nouvelle table disponible dans la nouvelle base de données.
Après avoir vérifié que tout a bien été transféré, vous devrez échanger le trafic vers le nouveau serveur, probablement en mettant à jour vos enregistrements DNS. Si vous êtes sur AWS, ou un fournisseur similaire avec des adresses IP Elastic, vous pouvez permuter l’adresse pour pointer vers le nouveau serveur, qui ne nécessitera pas de mise à jour DNS.
Transfert de l’intégralité du disque (facultatif)
En option, si vous passez simplement à un serveur plus puissant, vous pouvez transférer sur l’ensemble du lecteur de démarrage, ce qui devrait copier la base de données avec le reste de la configuration du serveur.
Dans ce cas, vous voudrez utiliser le rsync
commande pour télécharger directement les données sur le serveur cible. rsync
se connectera en utilisant SSH et synchronisera les deux dossiers; dans ce cas, nous voulons pousser le dossier local vers le serveur distant:
sudo rsync -azAP / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} username@remote_host:/
C’est toute la commande. Vous devriez voir une barre de progression à la fin du transfert (en utilisant la compression avec le -z
flag), et quand c’est fait, vous verrez les fichiers dans le dossier cible sur le nouveau serveur. Vous devrez peut-être l’exécuter plusieurs fois pour copier chaque dossier; vous pouvez utiliser ceci en ligne rsync
générateur de commandes pour générer la commande pour chaque exécution.