[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Бэкап части базы в Постгре
sergeiss
Задача, вобщем-то простая smile.gif Надо сделать на сервере бэкап базы и перенести его на ноутбук. Раньше я это проделывал много раз.

Но сейчас проблема в том, что сервер расширен, и БД там уже очень "пухлая" скопилась. Одна только БД больше, чем весь диск на ноуте.

Поэтому стоит задача перенести часть данных, удалив некие старые данные. Чтобы объем БД был достаточно небольшой.

При этом надо учитывать:
- данные в основной БД не должны пострадать вообще никак;
- кроме таблиц есть еще триггеры, view, пользовательские типы данных, функции;
- делать такой бэкап мне надо хотя бы раз в 1-1,5 месяца

Я пока придумал только один способ, но он несколько извратный.
1. Делаю полный бэкап БД;
2. Делаю вторую БД на серваке, куда раскрываю бэкап;
3. Удаляю все старые данные;
4. Делаю бэкап уменьшенной БД;
5. Заливаю его на ноут и разворачиваю.

Других вариантов что-то не приходит в голову, а этот извратный потому, что весьма и весьма долгий (данных ну очень много, и дальше будет только больше) и нудный.

А может, кто-то из (редких тут) спецов по Постгре подскажет что-то более разумное?



Спустя 21 минута, 39 секунд (3.02.2010 - 14:13) glock18 написал(а):
разве постгре не позволяет бэкапить датабазы не целиком, а по-таблично?

Спустя 25 минут, 9 секунд (3.02.2010 - 14:38) sergeiss написал(а):
Мне нужно не потаблично, а часть данных из таблиц. Например, есть там данные с октября по январь. Мне надо оставить только январь. При простом бэкапе сие не сделаешь никак.
Да и потаблично я не уверен, что можно. К тому же, я не зря упомянул триггеры, функции и другую шнягу - их надо целиком вытаскивать.

Спустя 20 минут, 33 секунды (3.02.2010 - 14:58) glock18 написал(а):
более чем уверен, что триггеры и процедуры занимают одну миллионную часть smile.gif если еще не меньше.

то что таблицы надо брать не целиком хуже. в mysql есть возможность
insert into outfile (кажется) можно попробовать ее. insert into outfile select с условием.

поднимать аналогично. получить create table можно отдельно. и так можно получить отдельно структуру и данные (те какие нужны). думаю, это как раз то, что нужно.


Спустя 1 день, 20 часов, 23 минуты, 25 секунд (5.02.2010 - 11:22) sergeiss написал(а):
Учитывая всякие взаимосвязи и автоинкрементные поля, решил сделать так, как сам же описал выше.
То есть, делаю бэкап базы, создаю на сервере клона, потом обрезаю данные клона до нужного размера, делаю бэкап урезанного клона и переношу на ноутбук.
Первый этап прошел вчера (8 часов понадобилось blink.gif), сейчас идет уже создание клона.

А в Постгре можно тоже копировать часть таблицы в текстовый файл. Вот только я так подумал, что проблемы могут быть при восстановлении базы.
Эта фича хороша во многих случаях, кроме моего нынешнего smile.gif

Спустя 7 дней, 6 часов, 12 минут, 21 секунда (12.02.2010 - 17:34) sergeiss написал(а):
Делаю по алгоритму, который сам же и описал в первом сообщении темы.

1. Сделал бэкап - 6 часов. (объем "родной" базы около 135 ГБ, вместе со всеми индексами, объем файла бэкапа около 13,5 ГБ).
2. Сделал клона базы из бэкапа - где-то около 10 часов. (объем базы получился около 120 ГБ - меньше на 15 ГБ; скорее всего за счет того, что там где-то сидят удаленные, но не упакованные данные - запустил сегодня autovacuum).
3. Удалил часть данных во многих таблицах - 33 часа blink.gif blink.gif blink.gif
4. Сегодня запустил бэкап почищенной базы (клона) - уже прошло 4 часа, судя по объему файла бэкапа (исходя из ожидаемого мной объема), где-то ночью закончится... Или завтра днем. (я думаю, что файл будет где-то 3-4 ГБ, сейчас пока 1,5 ГБ).

Уже несколько дней работаю с этой фигней. Да еще и юзеры "бухтят" smile.gif - мол, чего там твой сервак тормозит?

Вот так вот работать с большими базами smile.gif Не так-то и просто.

Спустя 58 минут, 20 секунд (12.02.2010 - 18:33) olgatcpip написал(а):
Ты сказал, что тебе примерно раз в месяц нужно такое делать...

я бы догадалась только до такого

1 - Выгрузить только структуру БД нужных таблиц, вьюшек, функций
2 - Написать на php скрипт, который бы выбирал нужную мне часть строк и сам заливал бы их, или формировал бы запрос с данными, которорые я бы и заливала на вторую базу.
3 - раз в месяц бы запускала этот скрипт на ночь.

------------------------------
есть ещё более сумасшедшая идея.

сделать клона, в которую будут делаться ежедневные записи, и удаление старых. Например, тем же php из клона удалять старое, другим php выберать новое. Так сказать размазать нагрузку.

Спустя 1 час, 23 минуты, 53 секунды (12.02.2010 - 19:56) sergeiss написал(а):
Насчет "раз в месяц" не получится, с такими продолжительностями.

А насчет
Цитата (olgatcpip @ 12.02.2010 - 19:33)
Так сказать размазать нагрузку.
я думал... Придется что-то такое "мутить".


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.