172 похожих чатов

Парни, привет. Внезапный вопрос: Есть пачка баз данных для тестовых деплойментов

девелоперами и тестерами.
Нынешняя схема такая: тестер/девелопер, когда ему надо, идёт в Портейнер и деплоит стек с той бд, которая ему нужна. Стек поднимается, тестовая бд ресторится из дампа. Всё работает, всё отлично.
Но есть момент: некоторые тестовые бд довольно большие. Снапшот одной из таких неприятных за последние две недели весит 60 гиг. В условиях портейнера это довольно долго восстанавливается — может до часа с индексами.
Я придумал стартовать по ночам контейнеры с постгресом, чтобы бд там восстанавливалась, потом я этот контейнер просто коммичу в новый образ (с паузой исходного) и тушу оба. Таким образом, тестеры/девелоперы могли бы просто мгновенно поднимать стек с любой бд, вне зависимости от её объёма, просто запрашивая контейнер с тегом нужной бд.
Однако, возникла неприятность: Когда я поднимаю контейнер с имеющейся в нём БД, то постгрес не видит тейблспейса, куда была эта бд восстановлена. Куда копать?
Отвечайте, плз, реплаем или в личку, чтобы я не потерял ваш ответ в общем потоке.

10 ответов

9 просмотров
Sun-Cheez Автор вопроса

Парни, на этот вопрос всё ещё нужны ответы/идеи. В логах постгреса, стартующего из нового образа тишина: кроме стандартных сообщений «я запустился и готов к работе» ничего нет, а тейблспейс потерялся. :(

Sun Cheez
Парни, на этот вопрос всё ещё нужны ответы/идеи. В...

Основная идея -- вы запускаете какую-то херню, а не тот образ, в котором добавили tablespace.

Sun-Cheez Автор вопроса
Ilya Anfimov
Основная идея -- вы запускаете какую-то херню, а н...

Нет, таки я запускаю правильный образ. Просто постгрес запускается как будто с нуля.

Sun Cheez
Нет, таки я запускаю правильный образ. Просто пост...

Ну, тот значит тот, что я могу поделать. PS postgres, во-первых не можэт "случайно" потерять запись в pg_tablespace а во-вторых -- думаю, упадёт при первом обращении к таблицэ из этого tablespace если запись -- будет, а с симлинком в $PGDATA/pg_tblspc будут проблемы.

Sun-Cheez Автор вопроса
Ilya Anfimov
Ну, тот значит тот, что я могу поделать. PS postg...

Так, спасибо за мысль. Образ же на основе дефолтного пг. То есть он уверен, что запускается пустой и инициализируется соответственно. Надо заоверрайдить с чего всё начинается

Sun Cheez
Так, спасибо за мысль. Образ же на основе дефолтно...

если база для тестера нужна одна на экземпляр постгреса в контейнере то запакуйте data_directory целиком, с уже готовой базой. т.е. где у вас делается восстановление БД тормозите постгрес и заливаете поверх data_diretcory уже готовую с данными. распаковывать можно tar + pigz, что бы быстрее было.

Sun-Cheez Автор вопроса
Pavel Nikiforov
если база для тестера нужна одна на экземпляр пост...

Там уже сложный процесс. Там в процессе бэкапа продовых баз делается укороченый снапшот, из которого вычищается всякое что тестерам не положено и потом просто целиком дампится, чтобы разворачиваться на разных тестах. Данные снапшоты используются не только живыми людьми, но и всякими автотестами.

Sun Cheez
Там уже сложный процесс. Там в процессе бэкапа про...

ну так сделали снапшот, потом пустой постгрес поставили, снапшот туда развернули, это делается 1 раз, можно применить всякие хитрости типа добавления индексов потом, после влива данных. потом постгрес гасите и делаете архив data_directory. Его уже тестерам раздаете. Т.е. в месте "потом просто целиком дампится" надо залить это в пустой постргерс и запаковать data_directory.

Sun-Cheez Автор вопроса
Pavel Nikiforov
ну так сделали снапшот, потом пустой постгрес пост...

я по сути так и делаю: поднимаю дефолтный контейнер с пг и восстанавливаю в него из дампа короткую бд. Я, кажется, понял в чём косяк. Ща колдую над этим.

Sun-Cheez Автор вопроса

В общем, надо было, как обычно, правильно задать вопрос гуглу. Если кому интересно, то вот решение: https://stackoverflow.com/questions/27377876/docker-postgres-with-initial-data-is-not-persisted-over-commits Во втором ответе.

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
11
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
10
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
падает джоба хотя уже была собрана на соседнем namespace, куда капать? │ │ Copying blob sha256:2fa066caddb8f09a71082b03aa43046f79346a01d9c89e06a1f508bb1207dba5 427 │ │ Copyin...
Andrei St
6
Здравствуйте. Задача состоит в том, чтобы сделать real-time чат в мобильном приложении. После передачи сообщения пользователем через веб-сокеты, для основного и долговременног...
🐾
5
Книга Юрова В.И пойдёт для обучения?
Botsman
24
Карта сайта