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

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

Администрирование - Администрирование данных 1С - Архивирование (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
05.08.19
2
.7z 1.0 3,87Mb 2 Скачать

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

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

См. также

Обработка для управления подключениями пользователей и создание бэкапа КЛИЕНТ-СЕРВЕРНОЙ базы данных 1С 8.2-8.3 (управляемое приложение,"такси") Промо

Архивирование (backup) Администрирование данных 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

Данная обработка позволяет легко и быстро отключить от любой БД одного или несколько пользователей одновременно, установить блокировку сеансов, что необходимо при регламентных операциях с БД, создать резервную копию базы, удалить "дубли" сеансов. Обработка отключает соединения и сеансы указанных пользователей, даже если сеанс или соединение были "повисшими". Возможна интеграция в любую конфигурацию! (Обновление от 11.03.2016, версия 3.0)

2 стартмани

06.11.2012    56073    179    hakerxp    44    

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

Свертка базы Архивирование (backup) v8 Абонемент ($m)

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

1 стартмани

28.05.2020    2188    11    imm0rtal    0    

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

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

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

2 стартмани

01.05.2020    1832    4    info1i    2    

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

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

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

1 стартмани

13.03.2020    3231    0    SerGray    2    

Конфигурация для автоматизации бэкапов Промо

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Конфигурация для организации резервного копирования и хранения бэкапов информационных баз во внутреннем формате 1С *.dt

1 стартмани

23.01.2015    30023    100    dusha0020    43    

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

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

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

1 стартмани

31.01.2020    4457    18    kolianus    1    

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

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

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

1 стартмани

15.01.2020    4453    7    Mallok    9    

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

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

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

1 стартмани

13.01.2020    5220    1    dron-s    16    

Безопасное копирование файловых баз данных 1С (1Cv8.1CD) Промо

Архивирование (backup) Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Безопасное копирование файловых баз данных 1С (1Cv8.1CD) При подключенных пользователях!

1 стартмани

22.12.2014    48072    71    BorovikSV    27    

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

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

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

1 стартмани

23.09.2019    5710    8    alexer    26    

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

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

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

2 стартмани

18.09.2019    5810    7    ketr    24    

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

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

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

1 стартмани

13.08.2019    7422    4    solaru    4    

Резервное копирование SQL-базы 1С в два клика Промо

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Простой и надежный способ бэкапа без углубления в тонкости настройки SQL Server Management Studio

1 стартмани

26.09.2012    50517    43    skilster    9    

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

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

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

1 стартмани

14.06.2019    6839    7    yukoz    4    

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

Архивирование (backup) v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

17.04.2019    2330    2    frkbvfnjh    3    

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

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

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

1 стартмани

28.02.2019    5349    3    DonAlPatino    24    

Копиратор-1С: выгрузка и загрузка базы 1С (7.7 - 8.3) одной кнопкой! Промо

Сервисные утилиты Архивирование (backup) Администрирование данных 1С Абонемент ($m)

Требуется сохранить базу 1С на флешку? Послать аудиторам на проверку или просто взять домой поработать? Копиратор-1С: универсальный помощник выгрузки и загрузки файловых баз 1С любых версий! Не требует установки и дополнительных программ. Представляет из себя один файл, включающий мощных архиватор 7-zip. Умеет подключать базу в список 1С при загрузке!

1 стартмани

17.06.2013    51393    31    alexey.karmanov    49    

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

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

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

1 стартмани

12.02.2019    4962    6    ixilimuse    5    

Легкое создание резервной копии типовой ИБ в режиме 1С:Предприятие

Архивирование (backup) v8 УНФ БГУ ERP2 ЗКГУ3.0 БП3.0 КА2 ЗУП3.x Абонемент ($m)

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

1 стартмани

04.02.2019    6758    9    Леонов Александр    0    

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

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

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

1 стартмани

09.01.2019    5894    0    Sloth    0    

Бэкапер-1С: резервные копии бухгалтерии (1С 7.7 - 8.3) Промо

Архивирование (backup) v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Бэкапер-1С: версия 1.5.0. Появилась гибкая система удаления старых копий! А также: автоматический поиск баз, архивация документов, встроенный архиватор 7-Zip, целостность создаваемых копий, шифрование, отправка отчетов на почту и каталогизация. Ещё никогда резервное копирование не делалось так просто.

1 стартмани

16.05.2013    62011    99    alexey.karmanov    181    

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

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

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

1 стартмани

21.12.2018    5163    0    Sloth    0    

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

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

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

1 стартмани

14.11.2018    11209    41    user598613_svp_gamma    3    

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

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

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

1 стартмани

08.11.2018    6489    4    Amunrah    2    

Резервариус администратора: сделай копию и делай, что хочешь! Промо

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

Необходимо менять базу [скрипты, файлы ... неважно] и хочется подстраховаться? Копия нужна прямо сейчас, чтобы не тряслись коленки потом и можно было сделать “rollback”? Резервариус: сделай копию и делай, что хочешь! Универсальная система хранения копий любых файлов и папок. Поможет там, где нет смысла применять полноценную систему контроля версий или систему резервного копирования.

1 стартмани

26.06.2013    41969    10    alexey.karmanov    29    

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

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

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

1 стартмани

15.10.2018    6317    4    elian    34    

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

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

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

1 стартмани

28.09.2018    6464    6    ligsht    0    

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

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

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

2 стартмани

20.07.2018    5941    1    thueirby    0    

Автоматическая архивация (настройка через обработку), стандартными средствами Windows (batch + schtasks) Промо

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

Есть много статей, как сделать батники для архивации баз 1С, столько же статей, как настроить автоматический запуск этих батников, но лень - она такая. Пользователю разбираться в cmd не хочется, а уж тем более лезть в настройки винды... Специально для ленивых, написал эту обработку.

1 стартмани

18.07.2013    27404    36    greenLiss    11    

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

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

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

1 стартмани

08.07.2018    6588    3    metmetmet    2    

"Перезаливатор" - приложение для автоматизации "перезаливки" баз

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

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

1 стартмани

05.07.2018    14174    15    Tavalik    24    

Бэкапер файловых баз с хранением на яндекс-диске

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

Еще один бекапер файловых баз на инфостарте. Возможно будет интересен франчам, у кого много небольших клиентов с файловыми базами. У себя используем больше года. Состоит из 3-х частей: 1 - размещается на компьютере клиента; 2 - настраивается яндекс-диск; 3 - у себя на рабочем компьютере. Настроенная система организует архивацию файловых баз данных на компьютере клиента, копирование их на яндекс-диск, сбор и анализ информации о наличии архивов на яндекс-дисках с возможностью закачки к себе на рабочий компьютер.

5 стартмани

04.06.2018    7978    1    yabrus    4    

Резервное копирование баз SQL Server на базе 1С. Промо

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

Конфигурация предназначенная для резеврного копирования баз SQL Server. Может использоваться как автономно, так и объединяться с любой конфигурацией. Код полностью открыт и доступен для редактирования.

1 стартмани

24.05.2012    30560    29    bystrov-e    52    

Генератор скриптов резервного копирования

Архивирование (backup) v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка, которая позволяет генерировать скрипты для резервного копирования баз 1С.

1 стартмани

03.06.2018    8102    18    Dream_kz    6    

bat-файл для копирования с FTP *.cfu и обновления 1С

Сервисные утилиты Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Батник для загрузки с FTP файла обновления 1С (*.cfu), создания резервной копии и обновления 1С.

1 стартмани

07.05.2018    9093    2    pyrkin_vanya    2    

Автоматизируем "перезаливку" баз (Скрипты для SQL-Server - Часть 1)

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Предлагаю вашему вниманию несколько SQL-скриптов (для MS SQL-Server) для автоматизации процесса резервного копирования и восстановления баз данных. Скрипты для восстановления позволяют "перезаливать" базы данных, т. е. восстанавливать одну базу из копий другой базы данных. Все скрипты формируют лог для вывода и при необходимости могут отправлять результат работы по электронной почте.

1 стартмани

15.03.2018    29965    18    Tavalik    14    

Резервное копирование 1С 8.2 -файловый вариант .NET 2.0 Промо

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

Задумкой написания данной программы послужил опыт того что приходя к клиенту необходимо максимально быстро сделать обновление. А это необходимо сделать копию базы, запустить конфигуратор со значка который переименован в "Бух" и поставлено дерево... В общем у каждого пользователя свои фокусы. Ко всему прочему если файлы лежат где-то в сети и комп эдак пенек 3, то совсем грустно становиться при попытке открыть "Сетевое окружение".

1 стартмани

24.04.2012    18396    0    valter    6    

Скрипт резервного копирования PostgreSQL на Powershell

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

Заготовка скрипта. Эти заготовки помогут настроить резервное копирование встроенными методами Windows, с помощью Powershell.

1 стартмани

02.03.2018    10133    9    user811626    0    

Архивирование файлов

Архивирование (backup) v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка на управляемых формах позволяет архивировать документы с заданными расширениями.

1 стартмани

26.02.2018    8734    2    user748289    2    

Резервное копирование файлов nw_am.exe

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

Резервное копирование файлов. Интерфейса нет, всё делается через 2 файла настройки. Очень маленькая и незаметная программа, которая работает даже на слабых компьютерах. Тестировалась на Window XP, Window 7 и Windows 10. Проверялось антивирусами Avast и Avira, за вирус не приняли. Язык разработки Pure Basic (надстройка над FASM-ом). Код закрыт, т.к. не думаю. что кому-то будет интересно разбирать синтаксис малознакомой среды разработки. Копирование производится в папки по дате и времени.

1 стартмани

26.02.2018    8406    0    strange2007    1    

Установка автоматического архивирования для 1С 8.1 и 8.2 (4.0.4.2) Промо

Администрирование данных 1С Архивирование (backup) v8 1cv8.cf Россия Абонемент ($m)

Думай о будущем - сохрани прошлое. Настройка автоматического ежедневного архивирования нажатием одной кнопки. Для 1С:Предприятия 8.1 и 8.2. А пароли? ...прячутся :)

1 стартмани

17.03.2009    87573    103    alexk-is    198    

Динамическое обновление больше не страшно! Сохранение таблицы Config перед динамическим обновлением

Архивирование (backup) v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Обработка для резервного сохранения SQL-таблиц Config b ConfigSave перед динамическим обновлением, а также восстановления этих таблиц в случае сбоя.

1 стартмани

09.02.2018    18806    56    santon    14    

Быстрый бэкап файловой базы 1С, или другой важной информации из каталога

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

bat файл для быстрого бэкапа каталога и его содержимого.

1 стартмани

31.01.2018    10718    10    born85    4    

Быстро, дёшево и массово подстраховать базы клиентов от утери. Комплексная система удалённого резервного копирования

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

Вы можете держать копии баз своих клиентов актуальными на своем backup-сервере. Rsync передаст только изменения базы, в связи с чем, передача данных произойдет самым рациональным способом. Обновление копии файловой базы происходит почти мгновенно, даже по низкоскоростным каналам связи. Вы сможете держать копии всех MSSQL баз на своём удалённом сервере с почасовой актуальностью. Как это сделать описываю в деталях. Систему можно использовать вообще для любых файлов. Если копия не обновляется заданное время - приходит оповещение об этом. Предыдущая версия уже несколько лет работает на локальном backup-сервере, который спасал мою честь несколько раз.

2 стартмани

14.11.2017    14959    ЕСТЬNULL    8    

Восстановление части данных из архива в рабочую базу данных Промо

Администрирование данных 1С Архивирование (backup) Распределенная БД (УРИБ, УРБД) v8 1cv8.cf Россия Абонемент ($m)

Когда случилась неприятная ситуация... Ситуация первая. Ввели документ прошлым периодом. Слетела граница последовательности. Восстановили и обнаружили, что поплыли отчетные данные прошлых периодов. Ситуация вторая. Кто-то нажал "что-то" и были удалены элементы справочников прошлого периода без контроля целостности. Теперь в документах и отчетах "битые" ссылки. Эта статья о том, что можно сделать в подобной ситуации. Не волнуйтесь. ВСЕ БУДЕТ ХОРОШО.

1 стартмани

16.12.2009    28350    4    alexk-is    17    

Автоматическое архивирование 1С для 8.3 в *.dt

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Обработка предназначена для автоматического архивирования базы 1С.

1 стартмани

13.11.2017    11918    11    zVORTEXz    8    

Генератор скрипта резервного копирования PostgreSQL

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

Однажды возникла необходимость настроить резервное копирование порядка 20 баз 1С на PostgreSQL. Вручную писать скрипт было очень лень, поэтому была написана эта обработка.

1 стартмани

21.10.2017    9408    16    sleemp    3    

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

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

Архиватор на основе кода Хаффмана. Консольная программа. Компилятор gcc. Проанализировав размер файлов до и после кодирования, можно с уверенностью сказать, что для файлов видео, аудио, изображения, документов(*.pdf; *.docx; *.rmp; *.exe) кодирование оказалось неэффективным, а для файлов исходных текстов (*.cpp) и исполняемых файлов Linux кодирование, напротив, оказалось эффективным, и их размер уменьшился почти вдвое.

1 стартмани

19.09.2017    8227    0    user823634    1    

Резервное копирование. Выгрузка информационных баз 1C:Предприятие 8.2; Баз данных: MS SQL Express, PostgreSQL, IBM DB2 Express-C; Любых каталогов. Промо

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

Программный продукт «CVM backup» предназначен для: • автоматической выгрузки «Информационной базы» любых конфигураций платформы 1С: Предприятие с отключение пользователей; • автоматических созданий дампов баз данных: MS SQL Express, PostgreSQL, IBM DB2 Express-C; • автоматической архивации любых локальных директорий.

1 стартмани

12.02.2012    47458    52    cvmbackup    223    

Скрипты на SQL для автоматизации архивации и сжатия баз данных

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

Автоматизирует всю работу по созданию backup на Sql Server, архивированию, удалению старых. Раскладывает backup по папкам - годовые, месячные, недельные, ежедневные. Архивирует WIN RAR. Очищает старые исходя из заданной политики сроков хранения backup каждого вида.

1 стартмани

22.05.2017    17983    23    SergeiGer    12    

Архивные копии файловой базы данных в фоновом режиме

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Создание командных файлов архивирования файловой базы данных. Архивация происходит в фоновом режиме, возможно сохранение копий в три разных места.

5 стартмани

18.05.2017    11064    2    BackHand001    8    

Backuper (программа резервного копирования данных)

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

Программа резервного копирования произвольных данных и выгрузки DT из баз 1С.

2 стартмани

11.04.2017    19936    76    ziercool    54    

Автоматическое сохранение базы штатными средствами

Архивирование (backup) v7.7 1cv7.md Абонемент ($m)

Всё началось с того, что я лентяй. Когда пришел на работу в первый раз, мне сообщили, что уже лет 10 делают сохранение  базы каждый день в конце рабочего дня. Из этого вытекает, что  если кто-то решит подтянуть свои хвосты, то мне приходится сидеть на работе тоже. Честно, мягко говоря, меня это не особо радовало... Порывшись на просторах инета, было принято решение сделать "автосохранялку". Как уже говорилось, "Я ЛЕНИВЫЙ", поэтому мне было попросту лень ставить всякие утилиты и программки, реализовал все штатными средствами.

1 стартмани

02.12.2016    12309    5    mt111    9