Sauvegarder/Restaurer un dockerized base de données PostgreSQL
Je suis en train de sauvegarder/restaurer une base de données PostgreSQL comme c'est expliqué sur le Panneau site, mais les données ne sont pas restaurés.
Les volumes utilisés par la base de données de l'image sont:
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
et de la CMD est:
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
J'ai créer la DB conteneur avec cette commande:
docker run -it --name "$DB_CONTAINER_NAME" -d "$DB_IMAGE_NAME"
Puis-je connecter un autre récipient pour insérer des données manuellement:
docker run -it --rm --link "$DB_CONTAINER_NAME":db "$DB_IMAGE_NAME" sh -c 'exec bash'
psql -d test -h $DB_PORT_5432_TCP_ADDR
# insert some data in the db
<CTRL-D>
<CTRL-D>
De l'archive tar est alors créé:
$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /etc/postgresql /var/log/postgresql /var/lib/postgresql
Maintenant j'ai retirer le récipient utilisé pour la db et en créer un autre, avec le même nom, et essayez de restaurer les données insérées avant:
$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar
Mais les tables sont vides, pourquoi les données ne sont pas correctement restauré ?
Vous devez vous connecter pour publier un commentaire.
De sauvegarde de vos bases de données
Restaurer vos bases de données
docker exec -t your-db-container pg_dumpall -c -U postgres | gzip > /var/data/postgres/backups/dump_
date +%d-%m-%Y"_"%H_%M_%S.gz
.xz
ou.gz
paniers de cette façon?cat your_dump.sql
avec de la décompression de commandement et de conduite qui, au lieu de lacat
résultat de docker exec.Ok, j'ai compris cela. Postgresql ne permet pas de détecter les modifications dans le dossier /var/lib/postgresql, une fois qu'il est lancé, au moins pas le genre de changements que je veux faire détecter.
La première solution est de démarrer un conteneur avec bash au lieu de démarrer le serveur postgres directement, de restaurer les données, puis démarrez le serveur manuellement.
La deuxième solution est d'utiliser un conteneur de données. Je n'ai pas eu le point de l'avant, maintenant je ne.
Ce conteneur de données permet de restaurer les données avant de commencer la postgres conteneur. Ainsi, lorsque le serveur postgres commence, les données sont déjà là.
Je pense que vous pouvez également utiliser un potgres de sauvegarde contenant qui serait de sauvegarder vos bases de données à l'intérieur d'une période de temps donnée.
Une autre approche (basée sur docker-postgresql-flux de travail)
Local de base de données (pas dans le panneau, mais même approche serait de travailler) à l'exportation:
Conteneur de base de données à importer:
pg_dump mydb -U postgres > export.psql
en conteneur docker bashJ'ai eu ce problème lors de la tentative d'utiliser un db_dump pour restaurer une base de données. J'utilise normalement dbeaver à restaurer - cependant reçu un psql dump, j'ai donc dû trouver une méthode pour restaurer à l'aide du conteneur docker.
À la méthodologie recommandée par la Suite et édité par Soviut fonctionné pour moi:
cat your_dump.sql | docker exec -i your-db-container psql -U postgres -d dbname
(étant donné que c'était un simple dump de la db et non pas de plusieurs db, j'ai inclus le nom)
Toutefois, afin d'obtenir que cela fonctionne, j'ai dû aussi aller dans le virtualenv que le conteneur docker et le projet été en. Cela m'a échappé pour un peu avant d'essayer de le comprendre - que j'ai été reçu à la suite de docker erreur.
read unix @->/var/run/docker.sock: read: connection reset by peer
Cela peut être causé par le fichier /var/lib/docker/réseau/fichiers/local-kv.db .Je ne sais pas l'exactitude de cette déclaration: mais je crois que j'ai été voir ce que je n'ai pas l'utilisateur menu fixe localement, donc n'ont donc pas de ce fichier, qui a été recherché, à l'aide de Suite la réponse.
J'ai ensuite navigué bon répertoire (avec le projet) activé le virtualenv, puis a couru la accepté de répondre. Boom, a travaillé comme un sommet. Espérons que cela aide quelqu'un d'autre!