Le service de base de données Google Firestore fournit-il une sauvegarde? Si oui, comment puis-je sauvegarder la base de données et comment la restaurer en cas d'erreur?
Update: Il est désormais possible de sauvegarder et de restaurer Firebase Firestore à l'aide du service d'exportation et d'importation géré par Cloud Firestore.
Vous le faites par:
Créez un compartiment de stockage en nuage pour votre projet - Assurez-vous qu'il s'agit d'un compartiment de type régional dans notre groupe central/central1 ou 2/multi-régional.
Configurez gcloud pour votre projet à l'aide de gcloud config set project [PROJECT_ID]
EXPORTATION
Exporter tout en appelant gcloud alpha firestore export gs://[BUCKET_NAME]
Ou exporter une collection spécifique à l'aide de gcloud alpha firestore export gs://[BUCKET_NAME] --collection-ids='[COLLECTION_ID_1]','[COLLECTION_ID_2]'
IMPORTER
Importer tout en appelant gcloud alpha firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/
Où [BUCKET_NAME] et [EXPORT_PREFIX] pointent sur l'emplacement de vos fichiers d'exportation. Par exemple, gcloud alpha firestore import gs://exports-bucket/2017-05-25T23:54:39_76544/
Importer une collection spécifique en appelant: gcloud alpha firestore import --collection-ids='[COLLECTION_ID_1]','[COLLECTION_ID_2]' gs://[BUCKET_NAME]/[EXPORT_PREFIX]/
Les instructions complètes sont disponibles ici: https://firebase.google.com/docs/firestore/manage-data/export-import
Mise à jour de juillet 2018: Cloud Firestore prend désormais en charge l'importation et l'exportation gérées de données. Voir la documentation pour plus de détails:
https://firebase.google.com/docs/firestore/manage-data/export-import
[Googler here] Non, pour le moment, nous n'offrons pas de service de sauvegarde ou d'importation/exportation géré. C’est quelque chose que nous proposerons certainement à l’avenir, nous ne l’avons tout simplement pas préparé pour la première version bêta.
Le meilleur moyen de sauvegarder en ce moment est d'écrire votre propre script à l'aide de nos kits de développement Java/Python/Node.js/Go. Il devrait être assez simple de télécharger tous les documents de chaque collection et de les réécrire si nécessaire.
https://www.npmjs.com/package/firestore-backup
Est un outil qui a été créé pour faire exactement cela.
(Je ne l'ai pas créé, je l'ai simplement ajouté ici car les gens trouveront cette question)
J'utilise les solutions suivantes pour effectuer des sauvegardes quotidiennes au feu:
J'ai installé ceci globalement: https://www.npmjs.com/package/firestore-backup-restore
J'ai un travail cron qui ressemble à ceci:
0 12 * * * cd ~/my/backup/script/folder && ./backup-script.sh
Et mon backup-script.sh ressemble à ceci:
#!/bin/sh
. ~/.bash_profile
export PATH=/usr/local/bin/
dt=$(/bin/date '+%d-%m-%Y %H:%M:%S');
echo "starting backup for $dt"
firestore-backup-restore -a ~/path/to/account/credentials/file.json -B ./backups/"$dt"
J'ai écrit un outil qui parcourt les collections/documents de la base de données et exporte le tout dans un fichier json unique. De plus, il importera également la même structure (utile pour le clonage/le déplacement de bases de données Firestore). Il est publié sous forme de package NPM. N'hésitez pas à l'essayer et à donner votre avis.
Une solution utilisant Python 2.
Cherchez-le https://github.com/RobinManoli/python-firebase-admin-firestore-backup
Première installation et configuration du kit de développement Python Admin Firebase: https://firebase.google.com/docs/admin/setup
Puis installez-le dans votre environnement python:
pip install firebase-admin
Installez le module Firestore:
pip install google-cloud-core
pip install google-cloud-firestore
(from ImportError: échec de l'importation de la bibliothèque Cloud Firestore pour Python )
Code python
# -*- coding: UTF-8 -*-
import firebase_admin
from firebase_admin import credentials, firestore
import json
cred = credentials.Certificate('xxxxx-adminsdk-xxxxx-xxxxxxx.json') # from firebase project settings
default_app = firebase_admin.initialize_app(cred, {
'databaseURL' : 'https://xxxxx.firebaseio.com'
})
db = firebase_admin.firestore.client()
# add your collections manually
collection_names = ['myFirstCollection', 'mySecondCollection']
collections = dict()
dict4json = dict()
n_documents = 0
for collection in collection_names:
collections[collection] = db.collection(collection).get()
dict4json[collection] = {}
for document in collections[collection]:
docdict = document.to_dict()
dict4json[collection][document.id] = docdict
n_documents += 1
jsonfromdict = json.dumps(dict4json)
path_filename = "/mypath/databases/firestore.json"
print "Downloaded %d collections, %d documents and now writing %d json characters to %s" % ( len(collection_names), n_documents, len(jsonfromdict), path_filename )
with open(path_filename, 'w') as the_file:
the_file.write(jsonfromdict)