- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
#!/bin/bash
echo Создание каталога...
if ! [ -d ./dump ]; then
mkdir ./dump
fi
currentdate=$(date +%F);
cd ./dump
echo Создание резервной копии основной базы данных...
pg_dump -U %логин% -f database.dump
echo Создание архива...
lzma -9vc database.dump > $currentdate.lzma
echo Удаление временных файлов...
rm -rf database.dump
echo Создание резервной копии завершено.
Fike 05.06.2014 13:41 # +2
нахера создавать папку по относительному пути?
dunmaksim 05.06.2014 13:54 # 0
а) имеется тут же файл .pgpass с логинами/паролями для доступа к БД
б) в заданиях cron'а стоит выполнение данного скрипта. Не от имени root же делать бэкапы.
Fike 05.06.2014 14:17 # 0
dunmaksim 05.06.2014 14:29 # 0
Elvenfighter 05.06.2014 18:58 # +1
же!
Fike 05.06.2014 14:13 # 0
шта?
WGH 05.06.2014 14:09 # +1
Что мешает на ходу сжимать, без временных файлов? pg_dump | xz > $currentdate.sql.xz
dunmaksim 05.06.2014 14:30 # 0
Раньше в один архив помещалось два дамба двух разных БД (одна для хранения инфы, одна для логов действий пользователей).
WGH 05.06.2014 14:40 # 0
(pg_dump --blabla && pg_dump --blabla) | xz > $currentdate.sql.xz
И ещё: LZMA на уровне -9 будет отжирать уж слишком много памяти при сжатии при сомнительном профите.
Да, и /bin/bash - непортабельно. Тем более в скрипте всё равно нет ни одного башизма.
dunmaksim 05.06.2014 14:48 # 0
cd ~
if ! [ -d ./dump ]; then
mkdir ./dump
fi
currentdate=$(date +%F);
cd ./dump
echo Создание резервной копии основной базы данных...
pg_dump -U %логин% | xz -9e -z T 6 -v -F gz > $currentdate.gz
echo Создание резервной копии завершено.
WGH 05.06.2014 15:18 # 0
dunmaksim 05.06.2014 15:40 # 0
bormand 05.06.2014 15:44 # 0
Они же склеются в один файл... Потом расчленять придется при восстановлении, если нужен только один. Неудобно.
WGH 05.06.2014 15:50 # 0
Это уже вопрос к ОПу, а не ко мне.
bormand 05.06.2014 16:30 # 0
Судя по тому, что ОП выгружает дампы на диск - 146%, что он делал tar.xz.
dunmaksim 05.06.2014 19:25 # 0
guest 09.06.2014 04:56 # −2
bormand 09.06.2014 05:31 # +1
kegdan 09.06.2014 06:24 # −1
defecate-plusplus 09.06.2014 07:12 # +2
kegdan 09.06.2014 07:16 # −1
dunmaksim 09.06.2014 07:56 # 0
kegdan 09.06.2014 11:28 # −1
http://ru.wikipedia.org/wiki/7-Zip
3.14159265 09.06.2014 11:51 # +4
3.14159265 09.06.2014 11:50 # +4
За что ж так Лемпеля?
defecate-plusplus 09.06.2014 13:43 # +3
kegdan 09.06.2014 15:29 # 0
brutushafens 09.06.2014 15:50 # +2
bormand 09.06.2014 14:44 # +3
guest 10.06.2014 02:23 # 0
dunmaksim 05.06.2014 15:01 # 0
wvxvw 05.06.2014 16:31 # 0
Как бы это уже тоже устарело. systemd - это теперь наше все.
Кроме того, лучше делать архив так, чтобы он сразу же уничтожал незаархивированый файл. Можно приводить разные аргументы в пользу надежности разных сценариев, но, на практике, я сталкивался с ситуацией, когда бекап нельзя было сделать потому, что не хватало места, а чтобы запороть бекап при создании архива - ну это нужно, чтобы электричество отключили, или что-то такого плана.
bormand 05.06.2014 16:36 # 0
Ну тогда уж пайп, как WGH советовал выше.
> а чтобы запороть бекап при создании архива - ну это нужно, чтобы электричество отключили
Если создавать архив под временным именем, а потом перемещать в нужную папку - шанс на фейл почти нулевой. Такую транзакцию на журналируемой фс хер убьешь даже отключением света. А если и убьется - то вместе с файловой системой.
P.S. Вот что самое главное - никогда не создавать бекап сразу поверх старого. Да и вообще, желательно его сливать куда-нибудь на ленточку или соседний сервак. Данные и их бекап на одном компе = ССЗБ.
eth0 05.06.2014 19:33 # 0
Dummy00001 07.06.2014 13:38 # +8
2. Проверяй наличие свободного места!!! Например, что есть как минимум 20% места. Громко жалуйся на ошибки.
3. `mkdir` заменить на `mktemp -d`
4. `cd ./dump` - когда тебе важны данные всегда *ВСЕГДА* проверяй результат `cd`. Если где-то что-то обламалось и папка не существует, то ты будешь переписывать и удалять локальные файлы. (Это опять отсылка на использованию абсолютных путей.)
5. Про pg_dump | xz тебе уже расказали: когда можно, лучше избегать дергать файловую систему за зря.
6. Пользуйся `xz -2` - по компресси аналогично bzip2, но намного быстрее. Скорость бэкапа может и не самый важный критерий, но по моему опыту лучше сервак за зря не грузить. А если грузишь, то не надолго. Думай так: сбой может произойти час спустя как ты запустил бэкап. Быстрый бэкап уже закончит - медленый будет прерван. В первом случае у тебя уже есть с чего данные подымать. Во втором - данные только с прошлого дня.
7. Добавь `sync` в конце скрипта для пущей надежности.
8. Вывод бэкап скрипта шли самому себе на мыло. Например:
bash the_cool_backup.sh | mail -s "Backup output from $(date +%F)" [email protected]
Dummy00001 07.06.2014 13:41 # +3
Плюс добась где-нибудь вывод того сколько времени комманды заняли (добавь `time`). Низкая скорость часто есть признак проблем.
Dummy00001 07.06.2014 13:48 # +2
bormand 07.06.2014 14:56 # +1
... причем на том серваке, на который этот архив приземляется.
Dummy00001 07.06.2014 15:04 # +2
главное что бы архивы лились на другой диск, а не на тот же диск где и сама база лежит.
....
и еще более главное, это раз в месяц старые бэкапы проверять на целостность. потому что современные диски имеют тэнденцию сыпатся почти в рандомных местах.
я собственно только по этой причине свои бэкапы и архивирую. как правило с самой низкой компресией (но не store) что бы целостность потом можно было проверить. (некоторые архиваторы для store даже чексум не генерят.)
guest 09.06.2014 04:57 # 0
Причем незаметно, доо.
>как правило с самой низкой компресией (но не store) что бы целостность потом можно было проверить.
А что мешает отдельно чексуммы генерить?
Dummy00001 09.06.2014 11:22 # 0
Зачем? Архиватор уже все делает за меня. Ну и в добавок, если можно, слегка архивирует.
И в каждую ось уже все проинтегрировано из коробки: открываешь архив, нажимаешь кнопку "тест", готово.
guest 10.06.2014 02:25 # 0
Dummy00001 10.06.2014 02:37 # 0
навороченые хэши нужны только если тебе нужна крипто-сильная подпись, что бы кто-то данные не подменил.
я честно говоря начал архивами пользоватся только потому что мне нужно было бэкапить в начале кучи файлов. оно просто и на само деле удобно, почему ничего другого и не искал.
dunmaksim 07.06.2014 19:34 # +1
guest 22.08.2014 15:04 # 0
guest 22.08.2014 15:28 # 0
bormand 22.08.2014 15:46 # 0
kegdan 22.08.2014 15:53 # 0
bormand 22.08.2014 15:54 # 0
kegdan 22.08.2014 16:04 # 0
bormand 22.08.2014 16:26 # 0
kegdan 22.08.2014 16:32 # 0
хотя с точки зрения физики любую инфу можно восстановить.
кроме попавшей в чд
bormand 22.08.2014 21:01 # 0
Так что вся надежда на распределённость бекапа. В чем неплохо помогают облака.
inkanus-gray 22.08.2014 21:10 # 0
P.S.: http://tjournal.ru/paper/block-school-for-nothing
bormand 22.08.2014 21:13 # 0
inkanus-gray 22.08.2014 21:17 # 0
bormand 22.08.2014 21:19 # 0
И? А винт можно уронить на пол, комп могут украсть или изъять, флешку постирают вместе со штанами, а распечатку съест кот.
Просто не надо держать все яйца в одной корзине, вот и всё.
kegdan 22.08.2014 21:22 # 0
насколько я помню в других местах нашей бренной вселенной с точки зрения физики информация, как и энергия, не исчезает
3.14159265 23.08.2014 14:52 # 0
На самом деле нет.
Ученые недавно изобрели облачный /dev/null в котором любая ваша информация гарантированно исчезнет.
Ну а насчёт исчезновения энергии в черной дыре - это и вовсе бред, её масса ведь увеличится.
kegdan 23.08.2014 15:54 # 0
1024-- 23.08.2014 16:59 # +1
Выходит, по теории доктора Кегдана, информация всё ещё доступна, поскольку она всё ещё в нашей вселенной. Ну а что достать кто-то не может - так это проблемы ниасиляторов.
kegdan 23.08.2014 17:13 # 0
guest 23.08.2014 17:21 # +3
1024-- 23.08.2014 17:22 # +2
kegdan 23.08.2014 18:08 # 0
bormand 23.08.2014 18:25 # 0
kegdan 23.08.2014 18:33 # 0
bormand 23.08.2014 18:40 # 0
Знание нескольких японских слов и Аска на аватарке еще не делают меня отаку ;)
kegdan 23.08.2014 18:46 # 0
bormand 23.08.2014 20:19 # 0
kegdan 23.08.2014 20:26 # 0
http://vk.com/video86875430_145736276
bormand 23.08.2014 20:27 # 0
kegdan 23.08.2014 20:28 # 0
WGH 07.06.2014 14:00 # 0
У меня cron это сам делает. Достаточно перед записью написать MAILTO=...
Dummy00001 07.06.2014 14:33 # 0
6a6yuH 27.08.2020 21:41 # 0
Дампать лучше в custom формат: будет чуть меньше места
Используйте пайпы, чтобы не плодить временные файлы: foo | bzip2 > bar.bz