Передача баз PostgreSQL на удалённый сервер резервных копий, удобное восстановление. Почасовой и ежесуточный вариант. В общем, ещё один скрипт

Публикация № 1102528 05.08.19

База данных - Архивирование (backup)

postgres rsync резервное копирование backup postgre

Скрипты сохраняют резервную копию в архив и отправляют на удалённый rsync сервер самым оптимальным образом. Вы без проблем сделаете текущую резервную копию или восстановите за любой другой день, не выгоняя пользователей. Есть вариант с восстановлением на любое время. Не нужны ни белые IP адреса клиентов с NAT, ни VPN. Максимально облегчённый вариант, позволит вам массово подстраховать базы клиентов, и стоить вам будет это почти ничего.

Коротко о главном

Данный материал является продолжением Быстро, дёшево и массово подстраховать базы клиентов от утери. Комплексная система удалённого резервного копирования, только для PostgreSQL. О rsync, о том, как настраивать серверную часть написано в предыдущей статье, и необходимо с ней ознакомиться, чтобы в полной мере понять данный материал. Вся статья посвящена настройке клиента на Windows (в unix-подобных гораздо сделать такой скрипт гораздо проще). Решение не требует ни наличия белых адресов со стороны клиента, ни VPN. Связь инициируется клиентом. Механизмы репликации не задействованы, и поэтому поднятие pgsql на стороне сервера не требуется. Интерес к PG усилился, после того как поступили сведения, что по производительности он уже уверенно идёт в очковой зоне противника (MSSQL 34 попугая, а Postgres 47. Не пойму где я недоглядел. (Тест Гилёва))

MSSQL - прекрасна, несколько раз тыкнул мышкой, и в рабочее время у тебя через несколько минут рабочая копия. Никого не выгнал, никому не помешал - красота. Чтобы добиться такого эффекта от PG, пришлось покубатурить, при этом решить вопрос передачи резервной копии на удалённый сервер. Ниже будет показано как я реализовал два подхода к резервному копированию PG. Подходы решают задачи архивирования БД и их восстановления. Ни то ни другое не требует прерываний в работе пользователя.

Среди поставленных задач:

  • обеспечить себе удобную работу с копиями на серверах клиентов (а-ля MSSQL);
  • обеспечить передачу резервных копий на свой сервер, с минимальной нагрузкой на сеть;
  • поделиться материалом народом, получить советы, конструктивную критику и помощь.

Также я обновил бинарную составляющую клиентской части, а именно rsync и ssh. Файлы взяты из последней установки cygwin и будут включены в архив с составе статьи за шеккель (таки должен же шо то я с этого поиметь). Но вообще его можно не качать и собрать всё самостоятельно, всё что есть в архиве - есть в статье, остальное выдернуть из cygwin или взять например вот тут. В новых версиях cygwin есть один момент с установкой $HOME, на его решение пришлось затратить некоторое кол-во времени. (Но по большому счету можно этого не делать, и использовать какой-нибудь старый рабочий вариант).

 

Варианты

Без архивации WAL

Подход позволяет делать ежесуточные копии (ну вообще любой периодичности, но это на вкус и цвет) и отправлять их на удалённый резервный сервер. (только изменения). Среди минусов - невозможность восстановить копию на какой-то конкретный час, и невысокая скорость восстановления копии. Среди плюсов, простота, нет необходимости архивировать сегменты WAL, занимает меньше места и система резервного копирования и сами копии. Забегая вперёд, думаю, что это будет наиболее популярный вариант в моей практике.

Суть подхода сводится к pg_dump > pigz --resyncable. Всё просто, pigz - аналог gzip имеющий на борту --resyncable (не везде --rsyncable в gzip работает). Получается SQL-ный dump запаковывается в архив, предназначенный для передачи его rsync (блоки не перемешиваются), и одни и те же дампы или слабоизмененные доходят оч быстро. Это копия, сделанная pg_dump, так называемая логическая копия представляет собой грубо говоря сжатый SQL файл, который можно накатить на любую версию PG. После передачи файл отправляется в архив. Архив хранится n дней.

Вот так переносятся 2,4GB база, в которой немного поработали день по каналу в 2Mbit/s:

 

С WAL (архивация журнала транзакций)

С архивами WAL можно восстановить копию на любой момент времени. В течение дня можно передавать на удалённый сервер файлы WAL, таким образом удалённая копия будет актуальная в течение дня. Файловая копия экземпляра сервера, это тоже самое, как если бы вы остановили сервер, скопировали из него папку data и запустили в другом месте, только без остановки сервера.

Минусы:

  • Нельзя сделать делать копию одной какой-то базы;
  • примерно в 1,5 раза больший размер дневной копии;
  • не всякая версия PG сможет проиграть вашу копию, желательно, чтобы была та же самая версия;
  • громоздкость.

Плюсы

  • Можно получить копию на любой момент времени;
  • восстанавливается быстрее, чем логическая копия.

 

Мой подход

Архивирование

Раз в сутки (ночью), выполняется pg_basebackup в папку rsync\data (полная базовая копия всего экземпляра сервера). Оттуда rsync отправляет её на север в виде файлов и не удаляет. То есть всегда за счет этого занято место полного размера экземпляра(1). Я пошёл на это сознательно, так так есть шанс, что место на диске займёт что-нибудь другое и резервное копирование вообще не сработает, так же этой копией можно быстро восстанавливать текущую копию.(тем же самым rsync). После создания копии, база в виде набора файлов (несжатая) отправляется на сервер посредством rsync. Такой подход даёт минимальную нагрузку на сеть (speedup более 200(в 200 раз быстрее, чем передача всех данных)). Я пробовал экономить место отправляя tar+ --rsyncable pigz и получил (speedup около 40). После передачи данных файл сжимается и кладётся в postgres\archive

Включен режим архивирования журнала wal в папку rsync\wal_archive. Оттуда каждый час архивированные файлы wal уходят на backup-сервер.

Вот так переносятся та же 2,4GB(dt) база, по каналу 2Mbit/s, в виде копии экземпляра сервера:

 

Восстановление

Поскольку восстановить можно только весь экземпляр, а останавливать основной нельзя, то должен существовать второй экземпляр, назовём его текущая копия. Текущую копию необходимо инициализировать, то есть создать службу Windows(это несложно). Затем перенести из папки postgres\rsync\data, если копия сегодняшняя, либо достать из архива базовую копию за запрошенный день. И в зависимости от того, какую часть дня нужно восстановить накатывается журнал транзакций. То есть появляется ещё одна папка postgres\current_copy, которая занимает столько же места, сколько основной экземпляр(2).

Итого: Для того, чтобы функционировал мой вариант потребуется дополнительное место, занимаемое основным экземпляром PGSQL умноженным на два, и каждая дневная сжатая копия будет весить примерно в 1,5 больше, чем копия сделанная pg_dump. Это основной минус моего подхода. Ну и следствие вот такой архитектуры резервного копирования PG в том, что нельзя восстановить почасовую копию какой-то одной базы данных, восстанавливать придётся все, или нужно распределять базы по экземплярам, что ещё хуже (но возможно с привлечением какой-нибудь автоматики, написанной к примеру на 1С).

Таким образом вот этот способ не подойдёт для основного моего сервера, где множество мелких баз, к которым желательно сохранять почасовые копии, так как восстанавливать все базы для получения последней копии одной из них будет накладнее, чем pg_dump/pg_restore одной базы. Может быть будут применяться оба метода, но однозначно PosgreSQL вот именно в этом аспекте существенно неудобнее MSSQL, но дарёному слону в зубы не смотрят. PG зато выигрывает в части переноса базовой копии на удалённый backup-сервер так как полная копия MSSQL ни черта не rsyncable.

Процесс восстановления базы за сегодняшний день на 10 часов, при том, что сегодня эту базу на сегодня уже восстанавливали:

Процесс занимает около 3-х минут. Если день другой, то восстановление будет занимать около 10 минут. На этой машине, которая мне досталась, всего одна 2,4 база, SATA HDD и i5-7400.
 

Матчасть

Инициализация

Ставьте версию от postgrespro. Настройте PG, поменяйте pg_hba.conf так, чтобы пароль не был нужен для подключения с localhost. Определитесь с местонахождением папки с программой и архивами, в моём случае это C:\Backup, но желательно переносить её на тот диск, на котором есть место под архивы. (Заготовка для папки под статьёй)

Папка имеет следующую структуру:
C:\Backup - папка содержащаяя в себе всё (полностью готовая лежит под статьёй)
C:\Backup\home - содержит .ssh, в которой ключи от соединения rsync. .ssh должна быть доступна только пользователю, который будет запускать резервное копирование.

C:\backup\bin - содержит бинарные файлы и нижеуказанные скрипты. Должна указываться в планировщике заданий Windows в качестве рабочей при составлении заданий на резервное копирование. Запуск скриптов производить находясь в этой папке.
C:\Backup\postgres\temp - временные файлы
C:\Backup\postgres - папка для работы скриптов PostgreSQL
C:\Backup\postgres\archive - хранит резервные копии в виде сжатых файлов
C:\Backup\postgres\current_copy - используется для хранения текущей копии (вариант с арх WAL)
C:\Backup\postgres\rsync - содержит базовую копию (папка base) и журнал (wal_archive)
Последние две папки используются только в варианте с архивированием WAL.

C:\Backup\etc - содержит файл nsswitch.conf необходимый для определения $HOME.

Для того, чтобы бинарники, производные от новых cygwin могли найти $HOME необходимо заполнить файл /etc/nsswitch.conf

db_home: /cygdrive/C/Backup/home

Это укажет, что home именно там и нигде иначе, и указать cygwin где вообще находится корень, чтобы он мог найти etc/nsswitch.conf.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Cygwin\setup]
"rootdir"="C:\\Backup"

Если правильно указали ключи и настроили права на C:\Backup\home\.ssh, то ssh ключи должны попасть в эту папку по нажатию C:\Backup\bin\ssh-keygen.exe.

Включите архивацию в файле postgresql.conf

wal_level = replica
archive_mode = on
archive_command = 'copy "%p" "C:\\Backup\\postgres\\rsync\\wal_archive\\%f"'
#archive_timeout=3600

archive_timeout - это время в секундах, по истечению которого файл WAL будет сформирован, даже если он не заполнен до конца. Весить и заполненный и незаполненный файл будет одинаково. Если интенсивность работы с базой невысокая, а вам необходимо иметь почасовую копию, то поставьте 3600 (час). Я для себя выключил, так как посчитал излишним.

 

Вариант без архивации WAL

PostgresSimple.bat

"PostgresSimple.bat backup" создаст резервную копию и отправит на удалённый сервер
"PostgresSimple.bat restore base base_copy" Сделает текущую копию базы base в base_backup
"PostgresSimple.bat restore base base_copy 2019-07-29" Восстановит копию базы base в base_backup за 2019.07.29

@echo off
SETLOCAL EnableDelayedExpansion enableextensions
rem chcp 866 >nul

rem Пути к программе
set PROGFOLDER=C:\Backup
set PROGFOLDER_UNiX=/cygdrive/C/Backup
set pgsql_folder=C:\Program Files\PostgresPro\11

rem rsync логин & сервер
set RSYNCLOGIN=someclient
set RSYNCHOST=backupserver.org
set RSYNCSSHPORT=22

set PGUSER=postgres
set PGPASSWORD=lalapass

set pg_threads=8
:: 1Mb/s = 125 KB/s
set speed=70
set keepdays=7

set HOME=%PROGFOLDER_UNiX%/home
set archive_folder=%PROGFOLDER%\postgres\archive
set archive_folder_unix=%PROGFOLDER_UNiX%/postgres/archive
SET LOGPATH=%PROGFOLDER%/backup.log
SET LOGPATH_UNiX=%PROGFOLDER_UNiX%/backup.log
SET RSYNC=%PROGFOLDER%\bin\rsync.exe

FOR /F "usebackq tokens=*" %%t IN (`powershell -NoProfile -Command "(Get-Date).ToString('yyyy-MM-dd')"`) DO (SET "Today=%%t")

if "%~1"=="" (
	GOTO Usage:
)


if "%~1"=="backup" (

	ECHO %DATE% %TIME% ================== Backup just have been started ============= >> %LOGPATH%

	for /f "tokens=*" %%i in (postgresbases.txt) do (
		set CurrentBase=%%i

		"%pgsql_folder%\bin\pg_dump.exe" -U %PGUSER% -Z0 -Fc !CurrentBase! | pigz.exe --rsyncable > %archive_folder%\!CurrentBase!.pigz

		IF NOT %ERRORLEVEL%==0 GOTO Error
		ECHO %DATE% %TIME% ================== Backup have been done without errors ============= >> %LOGPATH%
		ECHO. >> %LOGPATH%

		%RSYNC% -avhP --rsh='%PROGFOLDER_UNiX%/bin/ssh.exe -p %RSYNCSSHPORT% -T -o Compression=no -x' --bwlimit=%speed% --log-file=%LOGPATH_UNiX% --stats --modify-window=1 --chmod=u+rw,og-rwx,Du+rw,Dog-rwx "%archive_folder_unix%/!CurrentBase!.pigz" %RSYNCLOGIN%@%RSYNCHOST%:~/
		move "%archive_folder%\!CurrentBase!.pigz" "%archive_folder%\!CurrentBase!_%Today%.pigz" 

	)
	forfiles /P "%archive_folder%" /D -%keepdays% /C "cmd /c del @path /q" 
	goto:eof
)

if "%~1"=="restore" (
if "%~2"=="" GOTO Usage: 
if "%~3"=="" GOTO Usage: 


if "%~4" equ "" (

	"%pgsql_folder%\bin\dropdb.exe" -U %PGUSER% %~3 
	"%pgsql_folder%\bin\createdb.exe" -U %PGUSER% -T template0 %~3

	"%pgsql_folder%\bin\pg_dump.exe" -U %PGUSER% -Fd -j %pg_threads% -f "%PROGFOLDER%\postgres\Temp" %~2
	"%pgsql_folder%\bin\pg_restore.exe" -U %PGUSER% -c -Fd -j %pg_threads% -d %~3 "%PROGFOLDER%\postgres\Temp"
	
	del /q "%archive_folder%\Temp\*" 
	for /d %%x in ("%archive_folder%\Temp\*") do @rd /s /q "%%x"	
	  
) else (

	if not exist %archive_folder%\%~2_%~4.pigz (
	echo File %archive_folder%\%~2_%~4.pigz is not exist.
	goto :EOF
	)
	"%pgsql_folder%\bin\dropdb.exe" -U %PGUSER% %~3 
	"%pgsql_folder%\bin\createdb.exe" -U %PGUSER% -T template0 %~3
	pigz.exe -dc %archive_folder%\%~2_%~4.pigz | "%pgsql_folder%\bin\pg_restore.exe" -U %PGUSER% -c -Fc -d %~3

)
goto:EOF
)

:Usage 
echo Usage: 
echo "PostgresSimple.bat backup" создаст резервную копию и отправит ­на удалённый сервер
echo "PostgresSimple.bat restore base base_copy" Сделает текущую копию базы base в base_backup
echo "PostgresSimple.bat restore base base_copy 2019-07-29" Восстановит копию базы base в base_backup за  2019.07.29
goto:EOF

:Error 
echo Usage: 
ECHO %DATE% %TIME% ================== Backup have been done with error ============= >> %LOGPATH%
ECHO. >> %LOGPATH%
goto:EOF

Так же необходимо создать файл C:\Backup\bin\postgresbases.txt вида:

base1
base2

Для того, чтобы знать что архивировать.

 

Вариант с архивацией WAL

PostgresWAL.bat

"PostgresWAL.bat backup" создаст и отправит на сервер полную резервную копию (запускается раз в сутки, ночью)
"PostgresWAL.bat backup h" отправит на сервер журнал WAL (запускается каждый час в рабочее время)
"PostgresWAL.bat init" создаст службу postgres_copy на которой будет работать скопированный экземпляр
"PostgresWAL.bat restore [день] [время]" Восстановит экземпляр сервера на указанные дату и время
                         [день] - today (сегодняшний день), либо дата в формате 2019-07-29
                         [время] - пусто - начало дня, last - конец дня, либо дата в форматe 13:00:00
                         Например:
"PostgresWAL.bat restore today last" - последняя сегодняшняя копия
"PostgresWAL.bat restore today" самая ранняя сегодняшняя копия
"PostgresWAL.bat restore 2019-07-29 13:00:00" конкретные время и день

@echo off
SETLOCAL EnableDelayedExpansion enableextensions

rem Пути к программам
set PROGFOLDER=C:\Backup
set PROGFOLDER_UNIX=/cygdrive/C/Backup
set pgsql_folder=C:\Program Files\PostgresPro\11
set zip=C:\Program Files\7-Zip\7z.exe

rem rsync логин & сервер
set RSYNCLOGIN=somebody
set RSYNCHOST=backupserver.org
set RSYNCSSHPORT=22

set PGUSER=postgres
set PGPASSWORD=lalapass

set pg_threads=8
:: 1Mb/s = 125 KB/s
set speed=70
set keepdays=7

SET RSYNC=%PROGFOLDER%\bin\rsync.exe
set HOME=%PROGFOLDER_UNiX%/home
set archive_folder=%PROGFOLDER%\postgres\archive
set archive_folder_unix=%PROGFOLDER_UNiX%/postgres/archive
SET LOGPATH=%PROGFOLDER%/backup.log
SET LOGPATH_UNiX=%PROGFOLDER_UNIX%/backup.log
set rsync_data_folder=%PROGFOLDER%\postgres\rsync
set rsync_data_folder_unix=%PROGFOLDER_UNIX%/postgres/rsync
set current_copy=%PROGFOLDER%\postgres\current_copy
set current_copy_unix=%PROGFOLDER_UNIX%/postgres/current_copy

FOR /F "usebackq tokens=*" %%t IN (`powershell -NoProfile -Command "(Get-Date).ToString('yyyy-MM-dd')"`) DO (SET "Today=%%t")
FOR /F "usebackq tokens=*" %%t IN (`powershell -NoProfile -Command "(Get-Date).AddDays(-1).ToString('yyyy-MM-dd')"`) DO (SET "Yesterday=%%t")

if "%~1"=="" (
GOTO Usage:
)


if "%~1"=="backup" (

ECHO %DATE% %TIME% ================== Backup just have been started ============= >> %LOGPATH%

	if "%~2"=="h" (

		%rsync% -zavhP --rsh='%PROGFOLDER_UNiX%/bin/ssh.exe -p %RSYNCSSHPORT% -T -o Compression=no -x' --bwlimit=%speed% --delete --stats --modify-window=1 --chmod=u+rw,og-rwx,Du+rw,Dog-rwx "%rsync_data_folder_unix%/wal_archive" %RSYNCLOGIN%@%RSYNCHOST%:~/postgres

	) else (

		rem Сохраняем wal вчерашним днём, очищаем
		"%zip%" a "%archive_folder%\%Yesterday%_wal.7z" "%rsync_data_folder%\wal_archive\*"
		forfiles /P "%rsync_data_folder%\wal_archive" /C "cmd /c del @path /q"
		%rsync% -zavhP --rsh='%PROGFOLDER_UNiX%/bin/ssh.exe -p %RSYNCSSHPORT% -T -o Compression=no -x' --bwlimit=%speed% --delete-before --stats --modify-window=1 --chmod=u+rw,og-rwx,Du+rw,Dog-rwx "%rsync_data_folder_unix%/wal_archive" %RSYNCLOGIN%@%RSYNCHOST%:~/postgres

		rem Очисткака каталога под резервную копию
		del /q "%rsync_data_folder%\data\*" 
		for /d %%x in ("%rsync_data_folder%\data\*") do @rd /s /q "%%x"

		call "%pgsql_folder%\bin\pg_basebackup.exe" -D "%rsync_data_folder%\data" -U %PGUSER% -X fetch --progress 3>>%LOGPATH%

		IF NOT %ERRORLEVEL%==0 GOTO Error
		ECHO %DATE% %TIME% Базовая копия %Today% готова >> %LOGPATH%

		"%zip%" a "%archive_folder%\%Today%.7z" "%rsync_data_folder%\data\*"

		%rsync% -zahP --rsh='%PROGFOLDER_UNiX%/bin/ssh.exe -p %RSYNCSSHPORT% -T -o Compression=no -x' --log-file=%LOGPATH_UNiX% --bwlimit=%speed% --delete --stats --chmod=u+rw,og-rwx,Du+rw,Dog-rwx "%rsync_data_folder_unix%/data" %RSYNCLOGIN%@%RSYNCHOST%:~/postgres

		forfiles /P "%archive_folder%" /D -%keepdays% /C "cmd /c del @path /q"  

	)
goto:EOF
)

rem ================================================ INIT ZONE =====================================================================
if "%~1"=="init" (
	"%pgsql_folder%\bin\pg_ctl.exe" register -N postgres -D "%current_copy%"
	copy "%pgsql_folder%\data\postgresql.conf" "%current_copy%\postgresql.conf" 
	call replaceinfile.bat %current_copy%\postgresql.conf 5432 5433
	call replaceinfile.bat %current_copy%\postgresql.conf archive_mode #archive_mode
	call replaceinfile.bat %current_copy%\postgresql.conf archive_command #archive_command
	call replaceinfile.bat %current_copy%\postgresql.conf archive_timeout #archive_timeout
	call replaceinfile.bat %current_copy%\postgresql.conf wal_level #wal_level
	goto:EOF
)
rem ================================================ RESTORE ZONE ==================================================================



if "%~1"=="restore" (
if "%~2"=="" GOTO Usage: 

	rem Тормозим сервис
	net stop postgres_copy

	rem Если today, тогда берём из rsync (сегодняшняя копия)
	if "%~2"=="today" (
		"%rsync%" -avhP --delete --stats "%rsync_data_folder_unix%/data/" "%current_copy_unix%" --inplace --exclude="postgresql.conf"
		set restorewalfolder=%rsync_data_folder%\wal_archive
		set restore_date=%Today%
	) else (
		set restorewalfolder=%PROGFOLDER%\postgres\temp
		set restore_date=%~2
		set recovery_end_command=

		if "%~3" neq "" (
			rem восстановление WAL
			"%zip%" x "%archive_folder%\!restore_date!_wal.7z" -o"!restorewalfolder!"
			set recovery_end_command=forfiles /P "!restorewalfolder!" /C "cmd /c del @path /q" && echo "Ready to connect"
		)
		move %current_copy%\postgresql.conf %PROGFOLDER%\postgres\temp\postgresql.conf
		rem очистка папки с данными
		del /q "%current_copy%"\* 
		for /d %%x in ("%current_copy%\*") do @rd /s /q "%%x" 

		rem восстановление папки с данными
		"%zip%" x "%archive_folder%\!restore_date!.7z" -o"%current_copy%"
		move %PROGFOLDER%\postgres\temp\postgresql.conf %current_copy%\postgresql.conf
)

	rem Если параметр не time и не last, то восстанавливаем на начало дня (не подгружаем wal)
	if "%~3" equ "last" (
		set restoretime=23:59:59	  
	) else (
		set restoretime=%~3
	)

	set restorewalfolder_double=!restorewalfolder:\=\\!
	echo restore_command='copy "!restorewalfolder_double!\\%%f" "%%p"' > %current_copy%\recovery.conf
	echo recovery_target_action=promote >> %current_copy%\recovery.conf

	if "%~3" equ "" (
	echo recovery_target='immediate' >> %current_copy%\recovery.conf
	) else (
	echo recovery_target_time='!restore_date! !restoretime!' >> %current_copy%\recovery.conf
	)
	echo recovery_end_command='!recovery_end_command!' >> %current_copy%\recovery.conf 

	net start postgres_copy
	echo "PostgreSQL has been started. Please wait while recovery.conf became renamed recovery.done in %current_copy%"
	goto:EOF
)

:Usage 
echo Usage: 
echo "PostgresWAL.bat backup" создаст и отправит на сервер полную резервную копию
echo "PostgresWAL.bat backup h" создаст и отправит на сервер журнал WAL
echo "PostgresWAL.bat init" создаст службу postgres_copy на которой будет крутиться скопированный экземпляр
echo "PostgresWAL.bat restore [день] [время]" Восстановит экземпляр сервера на указанные дату и время
echo                          [день] - today (сегодняшний день), либо дата в формате 2019-07-29 
echo                          [время] - пусто - начало дня, last - конец дня, либо дата в форматe 13:00:00
echo "Например:"
echo "PostgresWAL.bat restore today last" - последняя сегодняшняя копия
echo "PostgresWAL.bat restore today" самая ранняя сегодняшняя копия
echo "PostgresWAL.bat restore 2019-07-29 13:00:00" конкретные время и день

goto:EOF

:Error 
echo Usage: 
ECHO %DATE% %TIME% ================== Backup have been done with error ============= >> %LOGPATH%
ECHO. >> %LOGPATH%
goto:EOF

 

Канэс

На сегодняшний день мной ещё не накоплен ни опыт использования механизмов, указанных в статье, ни эксплуатации postgres в боевых условиях, почти нет телеметрии, достаточной для того, чтобы её показать. Отталкиваясь статьи планирую внедрять PG по мере необходимости и добывать драгоценный опыт. Кто использует PG, напишите пожалуйста, есть ли в скриптах или методике ошибки, которые могут сыграть роковую роль? На что стоит обратить внимание? Как бы вы сделали?
Напрягает кодировка логов после PGSQL - не знаю что с ней делать, некритично, но проблема есть. Возможно стоит доработать скрипт отправкой email, если что-то не так. Пока на данный момент угроблено огромное количество времени и уже пока завязывать исследования до лучших времён.

Да, есть ещё интересные инструменты, в частности Barman и pg_probackup. Я узнал о них уже после того как потратил много времени на классические варианты это во-первых, во-вторых эти инструменты не совсем мне подходят.
Barman требует двустороннего контакта с клиентом и таким образом от клиента требуется либо белый адрес и NAT либо VPN. Я не могу на такое пойти, так как хочу массово сохранять копии, а такие усложнения ставят крест на этих планах. Pg_probackup при поверхностном знакомстве мне очень понравился, но не ясно как переносить изменения на удалённый rsync сервер. Только раскрывать последний архив и отправлять его таким образом, что тоже самое. В общем не стал, у кого есть время может и попробует.

Огромное спасибо блогу http://renbuar.blogspot.com за его существование. Из него я очень многое для себя подчекрнул.

Скачать файлы

Наименование Файл Версия Размер
Шаблон-папка Backup. Всё необходимое для резервного копирования PostgreSQL на удалённый сервер.

.7z 3,87Mb
7
.7z 1.0 3,87Mb 7 Скачать

Специальные предложения

Оставьте свое сообщение

См. также

Архивирование базы в dt и дамп postgres

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    2504    0    Gnom-Gluck    5    

5

Утилита копирования баз данных 1С

Архивирование (backup) Платформа 1С v8.3 Абонемент ($m)

Небольшая утилита для копирования файловых баз данных 1С.

1 стартмани

02.06.2022    2710    1    Giblarium    8    

5

Конфигурация 1С v.8, для резервного копирования клиент-серверных баз 1С v.8 в *.DT на внешний FTP сервер

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Данная конфигурация, по времени, указанном в регламентном задании, проходит по заполненному в ней справочнику баз 1С, отключает пользователей и рабочие сеансы и выгружает в файл *.DT: локальную папку, сетевую папку или ftp сервер.

1 стартмани

22.04.2022    3783    12    FeDBuka    8    

4

Архивация информационной базы в формате dt для ОС Linux

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализация сценария резервного копирования информационных баз в формате dt для ОС Linux на примере Ubuntu 20.04 в клиент-серверном варианте для командной оболочки bash.

1 стартмани

20.02.2022    4963    4    masterb    10    

6

Резервное копирование баз 1С с выкидыванием пользователей

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Предназначена для администратора базы. bat файл создает резервные копии и выкидывает пользователей.

1 стартмани

31.01.2022    3914    2    sidalexsandr    8    

2

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Автообновление конфигурации после обмена

Архивирование (backup) DevOps и автоматизация разработки Обмен между базами 1C Платформа 1С v8.3 Украина Абонемент ($m)

Рабочий механизм автоматического обновления конфигурации "периферийной" базы после получения пакета обмена. Перед обновлением выполняется резервное копирование базы данных.

1 стартмани

02.09.2021    4661    2    Volvo32    1    

4

Портал TopBy (бэкап электронных накладных) (ОФ, УФ)

Архивирование (backup) WEB-интеграция Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка предназначена для получения списка электронных накладных с портала TopBy и возможностью их скачивания файлами в форматах XML и XLS. (Обычные и управляемые формы)

1 стартмани

29.08.2021    5121    2    kozusenok    0    

1

Конфигурация для создания резервных копий баз на сервере 1С: предприятие (SQL)

Архивирование (backup) Платформа 1С v8.3 8.3.14 Россия Абонемент ($m)

Конфигурация выполняет выгрузку баз в файлы DT, работающих в клиент-серверном режиме (SQL).

1 стартмани

11.08.2021    5045    13    macrosina    6    

10

Создание копии базы самим пользователем средствами SQL

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Как-то надоело постоянно бухгалтеру восстанавливать копии базы для тестов. Сделал обработку, которая умеет автоматически создать копию с текущей базы средствами sql и восстановить в выбранную копию.

1 стартмани

12.07.2021    4944    10    77dream77    8    

5

Методика многоуровневого резервного копирования SQL баз данных 1С (и не только)

Архивирование (backup) Абонемент ($m)

Описание методики резервного копирования баз данных MS SQL Server по схеме дед-отец-сын и набор скриптов для ее реализации. Разработана для баз 1С, но подходит для любых.

5 стартмани

29.05.2021    4498    3    tedkuban    0    

2

Видеокурс-практикум: как подготовить и написать ТЗ, ЗНР, ЧТЗ. Промо

В курсе обобщен опыт работы аналитика на проектах в течение пяти лет, в нескольких фирмах. Подходы к написанию документов унифицированы и по возможности не привязаны к конфигурациям 1С.

3 500 рублей

Изменение допустимого размера базы для сжатия при резервном копировании

Архивирование (backup) 8.3.14 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Если резервное копирование файловой базы 1С:Бухгалтерия 3.0 или 1С:Зарплата и управление персоналом 3 (ЗУП) у Вас перестало архивировать файл 1CD (просто копирует файл 1CD вместо добавления его в ZIP), то скорее всего у Вас база стала более 2 ГБ. В штатном резервном копировании установлено жесткое ограничение на этот размер. Данное расширение позволяет задать любой другой допустимый размер базы для сжатия.

1 стартмани

12.04.2021    4559    4    3soft    0    

1

История данных - расширение для конфигурации "INFOSTART ERP community edition"

Архивирование (backup) Infostart ERP community Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Расширение позволяет хранить (восстанавливать) историю данных прикладных объектов (справочников, документов, движений регистров по документам).

10 стартмани

16.03.2021    5837    9    33lab    9    

5

Автоматическое архивирование и обновление типовых 1С с рассылкой уведомлений

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Автоматическое архивирование и обновление типовых 1С. Программа запускается по таймеру в назначенных заданиях Windows. По указанному ключу в запуске будет обновлять конфигурацию или архивировать.

1 стартмани

13.03.2021    5423    3    eda_light    4    

1

Проверка резервного копирования

Архивирование (backup) Платформа 1С v8.3 Россия Абонемент ($m)

Программа проверяет наличие бэкапов на текущую дату в указанных каталогах.

1 стартмани

04.02.2021    4968    2    r.moschenskiy    0    

2

Архивирование резервных копий файловой базы 1С: Бухгалтерия 3.0

Архивирование (backup) Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Начиная с версии 3.0.63.xx при создании резервной копии файловой базы средствами 1С Бухгалтерия файл 1Cv8.1CD не архивируется ZIP, а просто копируется в папку, если размер файла превышает 2000 Мб. В результате для хранения резервных копий требуется примерно втрое больше места на диске. Данное расширение конфигурации позволяет исправить ситуацию, подняв лимит до 4000 Мб. Расширение можно подключать как в режиме конфигуратора, так и в пользовательском, конфигурация остаётся на замке, статус поддержки не изменяется.

1 стартмани

18.12.2020    7380    1    Smarty1963    0    

2

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

Программа резервного копирования баз (1С и др.) на Python 3

Архивирование (backup) Абонемент ($m)

Программа позволяет делать резервные копии файловых баз 1С в конце рабочего дня или по регламенту планировщика заданий. Исходный код открыт, так как прога дорабатывается и усовершенствуется. Для работы программы необходимо установить интерпретатор Python версии не ниже 3.5

1 стартмани

18.11.2020    5857    1    kentipolt    0    

2

Создание копии рабочей базы

Свертка базы Архивирование (backup) Платформа 1С v8.3 Абонемент ($m)

Как регулярно создавать копии рабочей базы для разработки? Как уменьшить объём тестовой базы? Как получать всегда актуальную тестовую базу?

1 стартмани

28.05.2020    12761    26    imm0rtal    0    

13

Автосохранение документов

Архивирование (backup) Обработка документов Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Абонемент ($m)

Обработка автоматически локально сохраняет измененные документы через заданный промежуток времени и позволяет их восстанавливать в любой момент.

1 стартмани

13.05.2020    7998    2    DedKore    0    

1

Настройка архивации баз MS SQL Server и мониторинг с помощью OneScript

Архивирование (backup) OneScript Мониторинг Абонемент ($m)

Схемы архивации баз и мониторинга. Скрипт для архивации журналов транзакций с записью лога в текстовый файл. Скрипты для мониторинга состояния архивации с отправкой статуса на почту.

2 стартмани

01.05.2020    10256    4    info1i    2    

5

Готовое решение для резервного копирования баз данных Postgresql

Архивирование (backup) Россия Абонемент ($m)

BAT файл для создания резервных копий баз данных средствами Postgresql.

1 стартмани

13.03.2020    8969    1    SerGray    2    

17

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Резервное копирование и обслуживание баз данных 1С 8.3 на PostgreSQL

Архивирование (backup) Администрирование СУБД Абонемент ($m)

Резервные копии обязательны для 1С, особенно важно при большем документообороте. В статье я расскажу, как у нас организовано резервное копирование, обслуживание и восстановление из копии базы 1С 8.3, работающей на PostgreSQL

1 стартмани

31.01.2020    16027    47    kolianus    2    

23

Скрипт (bash) автоматической ежедневной выгрузки баз Postgres на ftp-сервер + Скрипт восстановления

Архивирование (backup) Абонемент ($m)

Скрипт автоматически выгружает базы Postgres и выкладывает на ftp-сервер. Сохраняет базы по дням недели, что позволяет экономить место на диске. Добавлен скрипт для восстановления базы из архива.

1 стартмани

15.01.2020    15999    17    Mallok    9    

13

Резервное копирование БД 1С средствами батника и выгрузка файловой базы в dt

Архивирование (backup) ИТ-компания Россия Абонемент ($m)

Резервное копирование БД с помощью батника. Код батника совсем небольшой.

1 стартмани

13.01.2020    22662    5    dron-s    19    

16

Создание выгрузок файлов .dt с помощью PowerShell и RAS\RAC для клиент-серверных баз

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

У платформы 1С 8.3 есть кроссплатформенная утилита RAS\RAC(Remote Administration Server\Remote Administration Client), которая позволяет удаленно управлять кластером серверов 1C. Ниже выложен шаблон скрипта PowerShell для выгрузки базы 1C в файл dt с помощью этой утилиты.

1 стартмани

23.09.2019    16084    34    alexer    27    

13

Бэкап средствами 1С для баз под управлением СУБД

Архивирование (backup) Платформа 1С v8.3 Абонемент ($m)

Скрипт для создания бэкапов баз 1С под управлением СУБД с созданием log-файла и отправки уведомлений на почту.

2 стартмани

18.09.2019    13517    10    ketr    24    

4

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Универсальный скрипт резервного копирования Postgres, архивирует все базы сервера баз данных

Архивирование (backup) Абонемент ($m)

Предлагаю использовать универсальный скрипт резервного копирования Postgres, архивирует все базы сервера баз данных, архивируются все добавленные базы, ведется лог архивирования, контролируется глубина архива. Скрипт тестировался на PostgreSQL 10.5 CentOS Linux release 7.6.1810

1 стартмани

13.08.2019    15956    5    solaru    9    

28

БЭКАПЕР на FTP c открытым кодом

Архивирование (backup) Абонемент ($m)

Бесплатная Windows программа для автоматической загрузки (дублирования) архивов баз данных 1С, SQL и прочих файлов на ваш FTP-сервер. Надёжная защита от вирусов шифровальщиков и прочих неприятностей связанных с потерей данных. Программа полностью бесплатная + представляются исходный код, чтобы каждый мог её доработать под себя.

1 стартмани

14.06.2019    14203    16    yukoz    4    

11

Внешняя компонента для безопасного копирования файловой базы без отключения пользователей

Архивирование (backup) Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Внешняя компонента для блокировки и последующего безопасного копирования файловой базы 1С, написанная по технологии NativeAPI.

1 стартмани

17.04.2019    8916    7    frkbvfnjh    3    

13

Контроль создания архивных копий

Архивирование (backup) Платформа 1С v8.3 Абонемент ($m)

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

2 стартмани

06.04.2019    8149    2    apxi    1    

1

Последовательный и параллельный бэкап баз в MS SQL скриптами

Архивирование (backup) Платформа 1С v8.3 Россия Абонемент ($m)

На картинке старый добрый Maintaince Plan. Работает давно и надежно. Но вот при 30 активных и столько же архивных базах каждое изменение - это много щелканий мышкой и сохранений. А хочется просто исправить список баз в одном месте, и все. В процессе переписывания Maintaince Plan в скрипт возникла идея попробовать обрабатывать базы параллельно. В конце концов, зачем была потрачена куча денег на "ядра, кэш и прочий треш"?

1 стартмани

28.02.2019    11550    5    DonAlPatino    24    

5

Работа с 1С:Аналитика Промо

Онлайн-курс предусматривает изучение возможностей системы “1С:Аналитика”, которая работает как составная часть платформы “1С:Предприятие” и обеспечивает оперативный просмотр и анализ необходимых данных.

4500 рублей

Быстрое восстановление бэкапа на тестовую базу

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Кто как восстанавливает свежие бэкапы на тестовые базы. Лично я довольно долго использовал для этого SQL скрипт. С ним меньше возни, чем с интерфейсом, который меняется из версии к версии. Кто-то использует bat файлы, тоже быстрый и надежный способ. В данной публикации я делюсь приложением, написанным на C#, которое восстанавливает базу из бэкапа, и даже при необходимости может перед восстановлением сохранить копию *.cf.

1 стартмани

12.02.2019    11020    9    ixilimuse    5    

2

Простая проверка "целостности" и резервное копирование реестра кластера сервера 1С Предприятия на Linux-сервере

Архивирование (backup) Платформа 1С v8.3 Абонемент ($m)

Bash-скрипт для проверки контрольной суммы файла реестра кластера и создания резервной копии данного файла в случае, если изменение считается "корректным", при работе сервера 1С Предприятия на платформе GNU/Linux.

1 стартмани

09.01.2019    11792    1    Sloth    0    

4

Резервное копирование прикрепленных файлов ИБ на Linux-сервере

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Немного о том, как организовать резервное копирование прикрепленных файлов информационной базы, хранящихся в файловых томах, а не в самой ИБ, в случае когда сервер 1С Предприятия работает на платформе GNU/Linux.

1 стартмани

21.12.2018    11027    0    Sloth    0    

5

Резервное копирование и обслуживание баз Postgre SQL в Windows

Архивирование (backup) Россия Абонемент ($m)

Резервное копирование и обслуживание баз Postgre SQL в Windows скриптами командной строки

1 стартмани

14.11.2018    24013    81    user598613_svp_gamma    21    

24

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

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

BAT-файл для выгрузки информационной базы в zip-архив

Архивирование (backup) Абонемент ($m)

Скрипт позволяет упростить и ускорить мероприятия по выгрузке информационных баз в архив.

1 стартмани

08.11.2018    12228    5    Amunrah    2    

1

Резервное копирование по расписанию для MS SQL Express

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Внешняя дополнительная обработка, которая позволяет использовать регламентные задания 1С для запуска сценария резервного копирования на сервере MS SQL Express. Таким образом решается проблема отсутствия у Express версии сервера MS SQL собственного агента и планировщика заданий. Обработка позволяет настроить для себя разрешение записи на диск и выполняться в безопасном режиме.

1 стартмани

15.10.2018    12103    4    elian    34    

4

Резервное копирование файлов 1С:Документооборот

Архивирование (backup) Платформа 1С v8.3 1С:Документооборот Абонемент ($m)

WSH файл резервного копирования файлов инкрементальный.

1 стартмани

28.09.2018    11920    7    ligsht    0    

5

Копирование / хранение бекапов

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка копирует файловые базы или sql бекапы на ftp. При этом сохраняет на ftp только 5 последний файлов, и удаляет старые, при успешной и/или не успешном копировании может производиться рассылка email

2 стартмани

20.07.2018    10387    1    thueirby    0    

6

Автоматизация удаления устаревших резервных копий

Архивирование (backup) Абонемент ($m)

Скрипт и библиотека на OneScript для автоматизации удаления устаревших резервных копий.

1 стартмани

08.07.2018    11868    3    metmetmet    2    

4