Я пытаюсь сделать резервную копию / восстановить базу данных PostgreSQL, как описано на сайте Docker, но данные не восстанавливаются.
Тома, используемые образом базы данных:
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
и CMD это:
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"]
Я создаю контейнер БД с помощью этой команды:
docker run -it --name "$DB_CONTAINER_NAME" -d "$DB_IMAGE_NAME"
Затем я подключаю другой контейнер, чтобы вставить некоторые данные вручную:
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>
Затем создается архив tar:
$ 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
Теперь я удаляю контейнер, используемый для БД, и создаю другой, с тем же именем, и пытаюсь восстановить данные, вставленные ранее:
$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar
Но таблицы пусты, почему данные не восстанавливаются должным образом?
database
postgresql
backup
docker
Карл Левассер
источник
источник
Ответы:
Резервное копирование ваших баз данных
Восстановите ваши базы данных
источник
docker exec -t your-db-container pg_dumpall -c -U postgres | gzip > /var/data/postgres/backups/dump_
дата +% d-% m-% Y "_"% H_% M_% S.gz
cat your_dump.sql
команду unzip и передать ее вместоcat
результата в docker exec.docker exec -t your-db-container pg_dumpall -c -U postgres | gzip > ./tmp/dump_$(date +"%Y-%m-%d_%H_%M_%S").gz
Я думаю, что вы также можете использовать контейнер для резервного копирования Potgres, который будет резервировать ваши базы данных в течение определенного времени.
источник
Хорошо, я понял это. Postgresql не обнаруживает изменения в папке / var / lib / postgresql после его запуска, по крайней мере, не те изменения, которые я хочу, чтобы он обнаруживал.
Первое решение - запустить контейнер с bash вместо прямого запуска сервера postgres, восстановить данные, а затем запустить сервер вручную.
Второе решение заключается в использовании контейнера данных. Я не понял этого раньше, теперь я понимаю. Этот контейнер данных позволяет восстановить данные перед запуском контейнера postgres. Таким образом, когда сервер postgres запускается, данные уже есть.
источник
Другой подход (основанный на docker-postgresql-workflow )
Локально работающая база данных (не в докере, но такой же подход будет работать) для экспорта:
База данных контейнера для импорта:
источник
pg_dump mydb -U postgres > export.psql
в доке контейнера BashУ меня была эта проблема при попытке использовать db_dump для восстановления БД. Я обычно использую dbeaver для восстановления - однако получил дамп psql, поэтому мне пришлось придумать способ восстановления с помощью docker-контейнера.
Методология, рекомендованная Фортом и отредактированная Совиутом, сработала для меня:
cat your_dump.sql | docker exec -i your-db-container psql -U postgres -d dbname
(поскольку это был один дБ, а не несколько дБ, я включил имя)
Однако, чтобы заставить это работать, я должен был также перейти к virtualenv, в котором находились док-контейнер и проект. Это немного ускользнуло от меня, прежде чем я понял это, поскольку я получал следующую ошибку докера.
read unix @->/var/run/docker.sock: read: connection reset by peer
Это может быть вызвано файлом /var/lib/docker/network/files/local-kv.db. Я не знаю точности этого утверждения: но я считаю, что я видел это, поскольку я не использую docker локально, поэтому у него не было этого файла, который он искал, используя ответ Форта.
Затем я перешел в правильный каталог (вместе с проектом), активировал virtualenv и запустил принятый ответ. Бум, работал как волчок. Надеюсь, что это поможет кому-то еще там!
источник
Это команда работала для меня.
например
Ссылка : решение, данное GMartinez-Sisti в этом обсуждении. https://gist.github.com/gilyes/525cc0f471aafae18c3857c27519fc4b
источник
cat db.dump | docker exec ...
путь не работал для моего дампа (~ 2 Гб). Это заняло несколько часов и привело к ошибке нехватки памяти.Вместо этого я скопировал дамп в контейнер и pg_restore'ed изнутри.
Предполагая, что идентификатор контейнера
CONTAINER_ID
и имя БДDB_NAME
:источник
dksnap
( https://github.com/kelda/dksnap ) автоматизирует процесс запускаpg_dumpall
и загрузки дампа через/docker-entrypoint-initdb.d
.Он показывает вам список запущенных контейнеров, и вы выбираете, какой из них вы хотите сделать резервную копию. Получающийся в результате артефакт представляет собой обычный образ Docker, поэтому вы можете затем отправить
docker run
его или поделиться им, отправив его в реестр Docker.(отказ от ответственности: я сопровождающий проекта)
источник
Приведенная ниже команда может быть использована для получения дампа из контейнера postgress docker
источник