Показаны сообщения с ярлыком backup. Показать все сообщения
Показаны сообщения с ярлыком backup. Показать все сообщения

воскресенье, 5 июля 2020 г.

Скрипт backup postgresql под windows

Автоматический перезапуск службы агента сервера 1С — скрипт + расписание

pg_verify_checksums.exe --pgdata=F:\PostgreSQL\11.7-5.1C\data\
pg_probackup checkdb ... || systemctl stop postgresql

@ECHO OFF
CHCP 1251>Nul
echo Начинаем архивирование!
echo Не закрывайте это окно, оно закроется само.
echo Окно можно свернуть.
echo Программы 1С не будут доступны до завершения.
SETLOCAL ENABLEDELAYEDEXPANSION
SET backup_data_dir=F:\back\
SET pg_bin_dir=F:\PostgreSQL\11.7-5.1C\bin\
SET PGHOST=localhost
SET PGPORT=5432
SET pg_user=postgres
SET PGPASSWORD=pass
REM SET pg_lst_db=psql.exe --username=%pg_user% --list --field-separator=^; --tuples-only --no-align
SET pg_lst_db=%pg_bin_dir%psql.exe --username=%pg_user% -A -t -c "SELECT datname FROM pg_database"
REM Если батник будет запускаться планировщиком при загрузке
REM для исключения повторных срабатываний в один день
REM FORFILES /p %backup_data_dir% /M *.PGDMP /D 0 >nul 2>&1
REM if not errorlevel 1 exit
REM Стопорим сервер 1с
CALL "C:\Program Files\1cv8\8.3.17.1386\bin\ragent.exe" -stop
REM Задержка
ping -n 16 localhost>Nul
REM SET PGBASES=(postgres template0 template1)
REM CD /D %pg_bin_dir%
REM Удаляем в папке backup_data_dir все файл старше DAY
SET DAY=5
forfiles /p %backup_data_dir% /m * /s /d -%DAY% /c "cmd /c del @path /q" >nul 2>&1
REM FOR /f "delims=; tokens=1" %%d IN ('!pg_lst_db!^|find /v "template0";^|find /v "template1";^|find /v "postgres";^|find /v "demo1"') DO (
REM echo %ERRORLEVEL%
FOR /f "delims=; tokens=1" %%d IN ('!pg_lst_db!^|find /v "template";^|find /v "postgres"') DO (
  SET file_name=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
  SET file_name=!file_name: =0!
  SET backup_file_name=%backup_data_dir%%%d-!file_name!.PGDMP
  SET log_file_name=%backup_data_dir%%%d-!file_name!.log
  SET pg_dmp_option=--clean --username=%pg_user% --format=custom --verbose --file=!backup_file_name! --dbname=%%d
  CALL %pg_bin_dir%pg_dump.exe !pg_dmp_option! 2>!log_file_name!
  SET ERROR=!ERRORLEVEL!
  REM echo !ERROR!
  IF !ERROR!==0 ECHO !file_name! Успешное создание резервной копии !backup_file_name! >> %backup_data_dir%\%%d.log
  IF NOT !ERROR!==0 ECHO !file_name! Ошибки при создании резервной копии базы данных !backup_file_name! >> %backup_data_dir%\%%d.log
)
REM Запускаем сервер 1с
CALL "C:\Program Files\1cv8\8.3.17.1386\bin\ragent.exe" -start

суббота, 9 мая 2020 г.

Файловый backup 1c

1c_backup.bat

@echo off
REM скрипт архивирующий папку с базами 1с файлы *.1CD
REM BASEDIR путь к папке где лежат базы 1С , если русскими буквами имя папки DOS dir /x
REM SET BASEDIR=D:\1CBases
REM CALL c:\Apache24\bin\httpd.exe -k stop
SET BASEDIR=c:\V8
REM BACKUPDIR путь к папке куда будем складывать backup
SET BACKUPDIR=f:\backup
REM удаление архивов старше DAY дней
SET DAY=5
REM del /F /Q "%BACKUPDIR%"\
REM forfiles /p %BACKUPDIR% /m *.7z /s /d -%DAY% /c "cmd /c del @path /q"
forfiles /p %BACKUPDIR% /m * /s /d -%DAY% /c "cmd /c del @path /q"
REM PASSWORD пароль для архива
REM SET PASSWORD=VZZETcB1eItOc4HU1RQljWqSeymsM6ZVenvXObU1F5oKM3GLTr96K
REM пароль до 20 символов совместим с rar
SET PASSWORD=VZZETcB1eI
REM NAME имя файла с архивом
SET NAME=backup
SET datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%
SET datetimef=%datetimef: =0%
SET FILENAME=%BACKUPDIR%\%NAME%_%datetimef%.7z
SET LOG=%BACKUPDIR%\%NAME%_%datetimef%.log
REM CALL c:\7-zip\7za.exe a  %FILENAME% -mmt2 -mx1 -t7z -v2000m -bso1 %BASEDIR%\*\*.1CD -p%PASSWORD% >%LOG% 2>&1
CALL c:\7-zip\7za.exe a  %FILENAME% -mmt2 -mx1 -t7z -v2000m -bso1 %BASEDIR%\*\*.1CD >%LOG% 2>&1
REM CALL c:\Apache24\bin\httpd.exe -k start
REM cd f:\rclone
REM  rclone copy f:/backup webdav:backup_1c --progress --config rclone.conf




rclone sync f:/backup webdav:backup_1c --progress --config rclone.conf

rclone copy f:/backup webdav:backup_1c --progress --config rclone.conf

среда, 11 марта 2020 г.

Перестал работать бэкап и восстановление средствами PostgreSQL

Прочее → 1С:Молокозавод 1.3.112.4 - не работает бэкап средствами PostgreSQL
Позиция 1С:
Причиной возникновения ошибки является ограничение PostgreSQL на работу со значениями, размер которых превышает 1Гб.
Ошибка может воспроизводиться, если конфигурация находится на поддержке и при этом отличается (значительно) от конфигурации поставщика (в режиме совместимости 8.2). В этом случае в таблице config может находиться запись с информацией об изменениях основной конфигурации относительно конфигурации поставщика, размер которой при выводе (например, pg_dump) превышает 1Гб (составляет порядка 500Мб при хранении).
Можем рекомендовать в качестве обхода:
-- снять конфигурацию с поддержки, после этого проблемы не будет.
При необходимости ее можно будет вновь вернуть.
-- настроить резервное копирование с помощью утилиты  pg_basebackup:

Отдельно:
lxd debian 10 сборка PostgreSQL 11.6 (По Олегу Харину)
lxd debian 10 сборка PostgreSQL 11.7 (По Олегу Харину)


Там есть патч 999-pg_dump_bin.patch. Если его применить, то можно делать pg_dump с бинарным COPY указав в командной строке опцию --binary-copy. Пример если выгружать на самом сервере:
pg_dump --binary-copy -j 4 -h /var/run/postgresql/ -U postgres -Fd uvadrev -f 1C-uvadrev-2019-12-12.backup



Для выгрузки/загрузки используются дополнительные утилиты pg_dumpbinary/pg_restorebinary
pg_dumpbinary

$ lxc delete srv1c
$ lxc copy srv1c-cop srv1c
$ lxc start srv1c
$ lxc exec srv1c -- sudo --user ubuntu --login
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libdbd-pg-perl
$ git clone https://github.com/lzlabs/pg_dumpbinary.git
$ cd pg_dumpbinary$ perl Makefile.PL
$ make
$ sudo make install
$ perl -MCPAN -e shell install DateTime


$ sudo su postgres
$ psql -l
$ pg_dumpbinary -d dbname postgres backup_postgres


среда, 16 октября 2019 г.

Холодный backup

Холодный backup кластера postgresql
Резервное копирование системы

Сделаем холодный backup кластера main:

$ sudo pg_ctlcluster 9.6 main stop
$ sudo sudo systemctl status postgresql@9.6-main.service 
$ sudo pg_ctlcluster 9.6 beta stop
$ sudo sudo systemctl status postgresql@9.6-beta.service

$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"

$ sudo su - postgres
$ cd /var/lib/postgresql/9.6/main
$  cp -R * /var/lib/postgresql/9.6/beta
$ exit
$ sudo pg_ctlcluster 9.6 main start
$ sudo sudo systemctl status postgresql@9.6-main.service 
$ sudo pg_ctlcluster 9.6 beta start
$ sudo sudo systemctl status postgresql@9.6-beta.service

$ sudo pg_ctlcluster 9.6 main stop
$ time sudo /bin/su postgres -c "tar -cvzf  /var/lib/postgresql/base-$(date +%Y-%m-%d_%H-%M-%S).tar.gz -C /var/lib/postgresql/9.6/main ."
$ sudo pg_ctlcluster 9.6 main start


$ sudo pg_ctlcluster 9.6 beta stop
$ sudo sudo systemctl status postgresql@9.6-beta.service
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"
$ sudo -u postgres tar -xvC /var/lib/postgresql/9.6/beta -f /var/lib/postgresql/base-2019-02-13_18-15-11.tar.gz
$ sudo pg_ctlcluster 9.6 beta start
$ sudo sudo systemctl status postgresql@9.6-beta.service



$ sudo pg_ctlcluster 9.6 main stop
$ sudo su postgres -c "tar -cvzf  /var/lib/postgresql/base-$(date +%Y-%m-%d_%H-%M-%S).tar.gz -C /var/lib/postgresql/9.6/main ."
$ sudo pg_ctlcluster 9.6 main start

$ sudo  mkdir -p /backup/main
$ sudo chown -R postgres:postgres /backup/main

$ nano backup_main.sh

#!/bin/sh -e
PG=9.6
CLASTER=main
#должна быть папка:
DIR=/backup/$CLASTER
#должны быть права
#sudo chown -R postgres:postgres /backup/main
DATEST=`date +"%Y-%m-%d %H-%M-%S"`
sudo su postgres -c "echo '$DATEST ---------------------------------' >> $DIR/$CLASTER.log"
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
sudo pg_ctlcluster $PG $CLASTER stop
sudo su postgres -c "tar -cvzf  $DIR/$CLASTER-$DATA.tar.gz \
     -C /var/lib/postgresql/$PG/$CLASTER . > /dev/null 2>&1"
if [ $? -ne 0 ]
then
     echo "$CLASTER-$DATA.tar.gz неудачное завершение"
     sudo su postgres -c "echo '$CLASTER-$DATA.tar.gz неудачное завершение' >>  \
          $DIR/$CLASTER.log"
else
     echo "$CLASTER-$DATA.tar.gz удачное завершение"
     sudo su postgres -c "echo '$CLASTER-$DATA.tar.gz удачное завершение' >>  \
          $DIR/$CLASTER.log"
fi
DATEEND=`date +"%Y-%m-%d %H-%M-%S"`
sudo su postgres -c "echo '$DATEEND ---------------------------------' >> $DIR/$CLASTER.log"
sudo su postgres -c "echo '-----------------------------------------------------' >> $DIR/$CLASTER.log"
sudo pg_ctlcluster $PG $CLASTER start

Сохранить.

$ time sh backup_main.sh

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

$ sudo su postgres -c "ls /backup/main"
main-2019-10-17_18-03-23.tar.gz  main.log

$ sudo pg_ctlcluster 9.6 main stop
$ sudo su postgres -c "rm -rf /var/lib/postgresql/9.6/main/*"
$ time sudo su postgres -c "tar xvzf  /backup/main/main-2019-10-17_18-03-23.tar.gz -C /var/lib/postgresql/9.6/main/"
$ sudo pg_ctlcluster 9.6 main start

понедельник, 16 сентября 2019 г.

Файловый backup 1c

Бэкап 1С: Семь маленьких путешествий в поисках одной большой утилиты
Бэкапер-1С: резервные копии бухгалтерии 1С (8.3, 8.2, 8.1, 7.7)



В планировщике событие при воде в систему
Программа или сценарий:
"C:\Program Files (x86)\Backuper-1C-Pro\Backuper-1C-Pro.exe"
Добавить аргументы:
-Schedule -CloseAnyway

Архивы будем класть на сервер Ubuntu

Настройка Ubuntu 16.04, 18.04

$ sudo nano /etc/default/rsync

#RSYNC_ENABLE=false
RSYNC_ENABLE=true

Сохранить.


$ sudo nano /etc/rsyncd.conf
# create new
# any name you like

[backup]
# destination directory to copy

path = /backup/rsync
# hosts you allow to access

hosts allow = 192.168.0.0/255.255.255.0
hosts deny = *
list = true
uid = root
gid = root
read only = false


Сохранить.

$ sudo mkdir /backup/rsync
$ sudo systemctl enable rsync
$ sudo systemctl start rsync


Под windows 10 :

g:\rsync>rsync -avz  /cygdrive/G/arhiv 192.168.0.134::backup --progress

Можно сделать один скрипт и поставить в планировщик:

CALL "c:\Program Files (x86)\Backuper-1C-Pro\Backuper-1C-Pro.exe" -Schedule -CloseAnyway
REM Смена диска и переход в папку из которой запущен bat-файл
%~d0
CD %~dp0
CALL e:\rsync\rsync -avz  /cygdrive/E/raisa 192.168.10.24::backup --progress

Можно проверит доступность сервера по ping :

ping -n 1 -w 1000 192.168.0.5|Find "TTL=">nul
If %ErrorLevel%==0 (
CALL d:\Copy\rsync\rsync -avz  /cygdrive/D/Copy/Archiv 192.168.0.5::backup --progress
) Else (
Echo Offline
)

понедельник, 22 апреля 2019 г.

Скрипты от Ingvar Vilkman

Скрипты от Ingvar Vilkman

"Задеплойка" (Vanessa-Deployka)

deployka forked from silverbulleters/deployka


Скачать OneScript
opm install deployka

Ставишь http://oscript.io/ убеждаешься что в PATH путь есть и он активен, иногда нужен перезапуск сеанса, и opm можешь использовать.
https://github.com/oscript-library тут список всех пакетов упакованных в opm. 

воскресенье, 14 апреля 2019 г.

pg_probackup настройка автономного резервного копирования windows

Введение в резервное копирование
Установка Postgres Pro Enterprise в Windows
pg_probackup описание
скачать pg_probackup

Windows 10, 1C мини сервер, PostgreSQL 10.5-24.1C

диск С: ssd

Задать права на папку "c:\Program Files\PostgreSQL\10.5-24.1C" :


Добавить для NETWORK SERVICE




Удаление кластера (сохраните данные!):
Остановим сервер:

>C:\WINDOWS\SysWOW64\net.exe  stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.

> cd  "c:\Program Files\PostgreSQL\10.5-24.1C"
> rd /s /q "c:\Program Files\PostgreSQL\10.5-24.1C\data"


Создание кластера:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\initdb" --encoding=UTF8 -U "postgres" -W -D "c:\Program Files\PostgreSQL\10.5-24.1C\data" --auth-local peer --auth-host md5 --data-checksums

c:\Program Files\PostgreSQL\10.5-24.1C>"c:\Program Files\PostgreSQL\10.5-24.1C\bin\initdb" --encoding=UTF8 -U "postgres" -W -D "c:\Program Files\PostgreSQL\10.5-24.1C\data" --auth-local peer --auth-host md5 --data-checksums
The files belonging to this database system will be owned by user "user".
This user must also own the server process.

The database cluster will be initialized with locale "Russian_Russia.1251".
The default text search configuration will be set to "russian".

Data page checksums are enabled.

Enter new superuser password:
Enter it again:

fixing permissions on existing directory c:/Program Files/PostgreSQL/10.5-24.1C/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... windows
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Success. You can now start the database server using:

    ^"c^:^/Program^ Files^/PostgreSQL^/10^.5^-24^.1C^/bin^/pg^_ctl^" -D ^"c^:^\Program^ Files^\PostgreSQL^\10^.5^-24^.1C^\data^" -l logfile start


-----------------------------------------------------------------------------------------------------------------
Если создаем кластер в том же месте где был изначально, никаких проблем нет.
Если в другом месте:

"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pg_ctl.exe" unregister -N "pgsql-10.5-24.1C-x64"

Для того что бы служба запускалась, должны быть зарегистрирована с указанием места расположения кластера D:\PGDATA

"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pg_ctl.exe" register -N "pgsql-10.5-24.1C-x64" -U "NT AUTHORITY\NetworkService" -D "c:\Program Files\PostgreSQL\10.5-24.1C\data" -w


"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pg_ctl.exe" register -N "pgsql-10.5-24.1C-x64" -U "NT AUTHORITY\NetworkService" -D "D:\PGDATA" -w

Не забыть про права указанные выше, если папка в корне диска, права на корень.

>C:\WINDOWS\SysWOW64\net.exe  start pgsql-10.5-24.1C-x64
-----------------------------------------------------------------------------------------------------------------


c:\Program Files\PostgreSQL\10.5-24.1C\data\postgresql.conf
Добавить в конец:

#------------------------------------------------------------------------------
# Настройки для 1с
#------------------------------------------------------------------------------
port = 5432
max_connections = 1000
#shared_buffers = 4GB
shared_buffers = 512MB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 12GB
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB

default_statistics_target = 100
#effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
lc_messages='C'
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'
max_replication_slots = 10
max_wal_senders = 10
wal_level = replica
#archive_mode = on
#archive_command ='test ! -f /wal/%f && cp %p /wal/%f'
#archive_command = 'copy "%p" "d:\\PostgreSQLBackup\\%f"'
#archive_command = '"c:\\Program Files\\Pg_ProBackup\\2.0.27\\pg_probackup" archive-push -B "c:\\pg_probackup" --instance data --wal-file-path %p --wal-file-name %f'
# Вариант с компрессией wal файлов
archive_command = '"c:\\Program Files\\Pg_ProBackup\\2.0.27\\pg_probackup" archive-push -B "c:\\pg_probackup" --compress --instance data --wal-file-path %p --wal-file-name %f'  
  
Сохранить. 


Далее нужно запустить сервер и проверить работу:

Запустим сервер:

C:\WINDOWS\SysWOW64\net.exe  start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.....
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.



Если версия 1с ниже 8.3.14

Можно создать базу  из 1С:


На 8.3.14 на вновь созданном кластере так не получилось, пришлось использовать консоль управления, сначала задав администратора admin пароль 12345

Вообщем 1с 8.3.14 если не задан администратор не дает создать первую базу, вторую и последующие дает


Скачать по ссылке сверху pg-probackup-2.0.27-PostgreSQL-10.msi
и установить.








>cd "c:\Program Files\Pg_ProBackup\2.0.27"
"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup.exe" help

Инициализация каталога резервных копий


Инициализация (целесообразно на ssd)
"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" init -B c:\pg_probackup
INFO: Backup catalog 'c:/pg_probackup' successfully inited

Определение копируемого экземпляра

#pg_probackup add-instance -B каталог_копий -D каталог_данных --instance имя_экземпляра

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" add-instance -B "c:\pg_probackup" -D "c:\Program Files\PostgreSQL\10.5-24.1C\data"  --instance data
INFO: Instance 'data' successfully inited

Создание полной автономной резервной копии:
"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres


>"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres
INFO: Backup start, pg_probackup version: 2.0.27, backup ID: PQ0C8G, backup mode: full, instance: data, stream: true, remote: false
Password for user postgres:
INFO: Start transfering data files
INFO: Data files are transfered
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: Validating backup PQ0C8G
INFO: Backup PQ0C8G data files are valid
INFO: Backup PQ0C8G completed

То же с сообщением и прогрессом.

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup"  backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres --log-level-console=verbose --progress

Проверка всех архивов:
"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" validate -B "c:\pg_probackup"
INFO: Validate backups of the instance 'data'
INFO: Validating backup PQ0C8G
INFO: Backup PQ0C8G data files are valid
INFO: Backup PQ0C8G WAL segments are valid
INFO: All backups are valid

Создание полной автономной резервной копии:

С опцией  --compress сжимает примерно в 4 раза.

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres --compress

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres --compress
INFO: Backup start, pg_probackup version: 2.0.27, backup ID: PQ0COK, backup mode: full, instance: data, stream: true, remote: false
Password for user postgres:
INFO: Start transfering data files
INFO: Data files are transfered
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: Validating backup PQ0COK
INFO: Backup PQ0COK data files are valid
INFO: Backup PQ0COK completed

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" show -B "c:\pg_probackup"


 Удаление:

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" delete -B "c:\pg_probackup" --instance data -i PQ0C8G

INFO: Delete: PQ0C8G 2019-04-15 17:59:29+03
WARNING: c:\pg_probackup\backups\data\PQ0C8G\backup.pid: No such file or directory
 

Удалим и восстановим кластер data


Остановим сервер:

>C:\WINDOWS\SysWOW64\net.exe  stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.


Удалим кластер:
> rd /s /q "c:\Program Files\PostgreSQL\10.5-24.1C\data"

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

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" restore -B "c:\pg_probackup" --instance data -i PQ0COK

c:\Program Files\PostgreSQL\10.5-24.1C>"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" restore -B "c:\pg_probackup" --instance data -i PQ0COK
INFO: Validating backup PQ0COK
INFO: Backup PQ0COK data files are valid
INFO: Backup PQ0COK WAL segments are valid
INFO: Backup PQ0COK is valid.
INFO: Restore of backup PQ0COK completed.

Запустим сервер:

C:\WINDOWS\SysWOW64\net.exe  start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.....
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.

c:\Program Files\PostgreSQL\10.5-24.1C>"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" restore -B "c:\pg_probackup" --instance data -i PQ0FB0 time = '2019-04-15 20:11:00'



Настройка архивного резервного копирования


Остановим сервер:

>C:\WINDOWS\SysWOW64\net.exe  stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.


c:\Program Files\PostgreSQL\10.5-24.1C\data\postgresql.conf
Добавить в конец:

archive_mode = on
#archive_command = '"c:\\Program Files\\Pg_ProBackup\\2.0.27\\pg_probackup" archive-push -B "c:\\pg_probackup" --instance data --wal-file-path %p --wal-file-name %f'
# Вариант с компрессией wal файлов
archive_command = '"c:\\Program Files\\Pg_ProBackup\\2.0.27\\pg_probackup" archive-push -B "c:\\pg_probackup" --compress --instance data --wal-file-path %p --wal-file-name %f'


Запустим сервер:

C:\WINDOWS\SysWOW64\net.exe  start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.....
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.

Сделаем базовую копию:

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres --compress
INFO: Backup start, pg_probackup version: 2.0.27, backup ID: PQ1N1P, backup mode: full, instance: data, stream: true, remote: false
Password for user postgres:
INFO: Start transfering data files
INFO: Data files are transfered
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: Validating backup PQ1N1P
INFO: Backup PQ1N1P data files are valid
INFO: Backup PQ1N1P completed

Войдем в базу, поработаем.

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


Допустим хотим вернуться назад.

Можно проверить конкретный архив:

Нужно указывать время из будущего!

C:\Users\user>"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" validate -B "c:\pg_probackup" --instance data  -i PQ1N1P --time='2042-04-16 12:26:00'
INFO: Validating backup PQ1N1P
INFO: Backup PQ1N1P data files are valid
WARNING: Thread [0]: WAL segment "c:/pg_probackup/wal/data/0000000100000000000000A4" is absent
WARNING: recovery can be done up to time 2019-04-16 10:52:06+03, xid 0 and LSN 0/A40001D0
ERROR: not enough WAL records to time 2042-04-16 00:00:00+03

Остановим сервер:

>C:\WINDOWS\SysWOW64\net.exe  stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.



Удалим кластер:
> rd /s /q "c:\Program Files\PostgreSQL\10.5-24.1C\data"


restore кластера:

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" restore -B "c:\pg_probackup" --instance data -i PQ1N1P
INFO: Validating backup PQ1N1P
INFO: Backup PQ1N1P data files are valid
INFO: Backup PQ1N1P WAL segments are valid
INFO: Backup PQ1N1P is valid.
INFO: Restore of backup PQ1N1P completed.


c:\Program Files\PostgreSQL\10.5-24.1C\data\postgresql.conf
Закоментировать:

#archive_mode = on
#archive_command = '"c:\\Program Files\\Pg_ProBackup\\2.0.27\\pg_probackup" archive-push -B "c:\\pg_probackup" --instance data --wal-file-path %p --wal-file-name %f'
#archive_command = '"c:\\Program Files\\Pg_ProBackup\\2.0.27\\pg_probackup" archive-push -B "c:\\pg_probackup" --compress --instance data --wal-file-path %p --wal-file-name %f'

Сохранить.


Создать файл recovery.conf:
"c:\Program Files\PostgreSQL\10.5-24.1C\data\recovery.conf"

Добавить в конец:

restore_command = '"c:\\Program Files\\Pg_ProBackup\\2.0.27\\pg_probackup" archive-get -B "c:\\pg_probackup" --instance data --wal-file-path %p --wal-file-name %f'

Сохранить.


Запустим сервер:

C:\WINDOWS\SysWOW64\net.exe  start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.....
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.

Будет проведено восстановление.
Можно проверить и даже сохранить папку:
"c:\pg_probackup\wal\data"

Для нового цикла необходимо:

Остановим сервер:

>C:\WINDOWS\SysWOW64\net.exe  stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.

Удалим архив с wal файлами:
cd  "c:\pg_probackup\wal\data"
rd /s /q .                (. на конце нужна!)

c:\Program Files\PostgreSQL\10.5-24.1C\data\postgresql.conf
Раскоментировать:

archive_mode = on
archive_command = '"c:\\Program Files\\Pg_ProBackup\\2.0.27\\pg_probackup" archive-push -B "c:\\pg_probackup" --instance data --wal-file-path %p --wal-file-name %f'

Сохранить.


Запустим сервер:

C:\WINDOWS\SysWOW64\net.exe  start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.....
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.


Сразу же после восстановления необходимо сделать
новую базовую копию:

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres --compress

INFO: Backup start, pg_probackup version: 2.0.27, backup ID: PQ1QVH, backup mode: full, instance: data, stream: true, remote: false
Password for user postgres:
INFO: Start transfering data files
INFO: Data files are transfered
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: Validating backup PQ1QVH
INFO: Backup PQ1QVH data files are valid
INFO: Backup PQ1QVH completed


C:\Users\user>"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" validate -B "c:\pg_probackup" --instance data  -i PQ1QVH --time='2019-04-16 12:26:00'
ERROR: target backup PQ1QVH does not satisfy restore options

Нужно указывать время из будущего!
(и таймзоны лучше указывать явно, иначе будет браться локальная, а она может отличаться от таймзоны, в которой делался бэкап)

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" validate -B "c:\pg_probackup" --instance data  -i PQ1QVH --time='2042-04-16 12:26:00'
INFO: Validating backup PQ1QVH
INFO: Backup PQ1QVH data files are valid
WARNING: Thread [0]: WAL segment "c:/pg_probackup/wal/data/0000000200000000000000FF" is absent
WARNING: recovery can be done up to time 2019-04-16 12:33:00+03, xid 28924 and LSN 0/FEFFD010
ERROR: not enough WAL records to time 2042-04-16 00:00:00+03

Настройка политики сохранения резервных копий


c:\pg_probackup\backups\data\pg_probackup.conf 
Добавить:
retention-redundancy=1
Сохранить.

При сохранении полной копии будут удаляться предыдущее, а также wal архивные файлы

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres --compress --delete-wal --expired

INFO: Backup start, pg_probackup version: 2.0.27, backup ID: PQ1XSC, backup mode: full, instance: data, stream: true, remote: false
Password for user postgres:
INFO: Start transfering data files
INFO: Data files are transfered
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: Validating backup PQ1XSC
INFO: Backup PQ1XSC data files are valid
INFO: Backup PQ1XSC completed
INFO: Delete: PQ1WV1 2019-04-16 14:24:09+03
INFO: Delete: PQ1QVH 2019-04-16 12:13:39+03
INFO: Delete: PQ1N1P 2019-04-16 10:52:06+03
INFO: removed min WAL segment "0000000200000000000000CF"
INFO: removed max WAL segment "00000002000000010000000C"
INFO: Purging finished
WARNING: c:\pg_probackup\backups\data\PQ1WV1\backup.pid: No such file or directory
WARNING: c:\pg_probackup\backups\data\PQ1QVH\backup.pid: No such file or directory
WARNING: c:\pg_probackup\backups\data\PQ1N1P\backup.pid: No such file or directory


Для запуска можно сделать скрипт pg_probackup.bat :

REM СКРИПТ pg_probackup В КЛАСТЕРЕ POSTGRESQL
CLS
ECHO OFF
CHCP 1251
REM Установка переменных окружения
SET PGBIN=C:\Program Files\PostgreSQL\10.5-24.1C\bin
SET PGUSER=postgres
SET PGPASSWORD=pass
REM Смена диска и переход в папку из которой запущен bat-файл
%~d0
CD %~dp0
REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET LOGFILE=%DATETIME%.log
SET LOGPATH="PGPRO\%LOGFILE%"
REM Обслуживание баз кластера
IF NOT EXIST PGPRO MD PGPRO
REM CALL "c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "d:\pg_probackup" --instance PGDATA -b FULL --stream -U postgres -d postgres --compress --delete-wal --expired --progress >>%LOGPATH%
CALL "c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "c:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres --compress --delete-wal --expired --progress  --log-level-file=notice -j 4 >>%LOGPATH%
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки делается соответствующая запись в журнале
:Error
MSG * "Ошибка при pg_probackup. Смотрите pg_probackup.log."
ECHO %DATETIME% Ошибки при pg_probackup. Смотрите отчет %LOGFILE%. >> pg_probackup.log
GOTO End
REM В случае удачного pg_probackup просто делается запись в журнал
:Successfull
ECHO %DATETIME% Успешное проведение pg_probackup >> pg_probackup.log
GOTO End
:End

Если мы запускаем скрипт через планировщик, то следует ознакомится
Установка приоритета для запланированных заданий


Заменить на 4 сохранить.



По ходу можно,  что то изменить.

Для запуска в скрытом окне:

Создать файл pg_probackup.vbs

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "d:\pg_probackup.bat", 0, false

Сохранить.
Его и запускать в планировщике.


Можно сделать еще один экземпляр для автономных копий:
Идея в одном экземпляре  с retention-redundancy=1 организуем непрерывное wal архивирование, в другом экземпляре с retention-redundancy=30 организимуем собрание автономных копий за месяц, хранилища могут быть на разных дисках.

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" init -B e:\pg_probackup
INFO: Backup catalog 'e:/pg_probackup' successfully inited

"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" add-instance -B "e:\pg_probackup" -D "c:\Program Files\PostgreSQL\10.5-24.1C\data"  --instance data
INFO: Instance 'data' successfully inited
"c:\Program Files\Pg_ProBackup\2.0.27\pg_probackup" backup -B "e:\pg_probackup" --instance data -b FULL --stream -U postgres -d postgres --compress --delete-wal --expired --progress

"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql.exe" -U postgres -c "SHOW archive_command;"

=============================================

 

суббота, 6 апреля 2019 г.

Backup файловых баз 1С windows на yandex диск

Файлы
Как удалять файлы старше 10 дней на windows
Лучший и самый надежный способ использование
Диск 3.0 для Windows
Работа с 7zip из командной строки
How to write error status for command line 7-zip in variable (or, instead, in text file)


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

Оборотной стороной является необходимость синхронизировать всю папку с архивными копиями. Но проблему места можно красиво решить, зная что удаленные файлы хранятся в корзине 90 дней, затем удаляютя. То есть на yandex disk будет хранится последняя копия, предыдущее нужно восстановить из корзины и скачать по webdav.
Тарифа 100 Гб  yandex disk для наших целей вполне достаточно.
Альтернативно можно использовать https://mega.nz/sync

Отличный webdav клиент carotdav

С помощью браузера можно загрузить файлы любого размера до 50 ГБ.
Но мы рекомендуем использовать carotdav для скачиванвания резервной копий более 2 Gb

Нам понадобится консольный 7zip

7z1900-extra.7z

Иеем :
d:\base_1c - папка с базами 1с
d:\yandex_disk  - папка синхронизированная  с yandex disk, каждый день очищаем скриптом
name_work - имя архива задачи и т.п.
set pass_for_archive - пароль архива лучше взять побольше на практике до 4000 символов

Сам скрипт backup.bat устанавливаем в планировщик, запускается один раз в день при включении компьютера:

Рабочий проверенный вариант:

@echo off
REM путь к папке где лежат базы 1С , если русскими буквами имя папки DOS dir /x
set day=30
set name_work=backup
set base_dir=D:\1CBases
set pass_for_archive=VZZETcB1eItOc4HU1RQljWqSeymsM6ZVenvXObU1F5oKM3GLTr96K
set backup_dir=d:\backup
set backup_filename=%backup_dir%\%name_work%_%date:~-4%_%date:~3,2%_%date:~0,2%.7z
set log_filename=%backup_dir%\%name_work%_%date:~-4%_%date:~3,2%_%date:~0,2%.log
echo %backup_filename%
rem del /F /Q %backup_dir%\
forfiles /p %backup_dir% /m *.7z /s /d -%day% /c "cmd /c del @path /q"
rem 7za.exe a %backup_filename% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m %base_dir%\* -p%pass_for_archive% >%log_filename% 2>&1
CALL 7za.exe a %backup_filename% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m -bso1 %base_dir%\* >%log_filename% 2>&1


Тоже самое:
  
@echo off
REM скрипт архивирующий целиком папку с базами 1с
REM BASEDIR путь к папке где лежат базы 1С , если русскими буквами имя папки DOS dir /x
SET BASEDIR=D:\1CBases
REM SET BASEDIR=c:\V8
REM BACKUPDIR путь к папке куда будем складывать backup
SET BACKUPDIR=d:\backup
REM удаление архивов старше DAY дней
SET DAY=30
REM del /F /Q "%BACKUPDIR%"\
forfiles /p %BACKUPDIR% /m *.7z /s /d -%DAY% /c "cmd /c del @path /q"
REM PASSWORD пароль для архива
REM SET PASSWORD=VZZETcB1eItOc4HU1RQljWqSeymsM6ZVenvXObU1F5oKM3GLTr96K
REM пароль до 20 символов совместим с rar
SET PASSWORD=VZZETcB1eI
REM NAME имя файла с архивом
SET NAME=backup
SET FILENAME=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.7z
SET LOG=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.log
ECHO %LOG%
REM CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m %BASEDIR%\*  -p%PASSWORD% >%LOG% 2>&1
CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m -bso1 %BASEDIR%\* >%LOG% 2>&1
pause 10

Другой вариант реального скрипта с описанием отдельных баз:

@echo off
REM скрипт архивирующий отдельные базы в папке базами 1с
REM BASEDIR путь к папке где лежат базы 1С , если русскими буквами имя папки DOS dir /x
REM set BASEDIR=d:\base_1c
SET BASEDIR=D:\1CBases
REM BACKUPDIR путь к папке куда будем складывать backup
SET BACKUPDIR=d:\backup
REM удаление архивов старше DAY дней
SET DAY=30
REM del /F /Q "%BACKUPDIR%"\
forfiles /p %BACKUPDIR% /m *.7z /s /d -%DAY% /c "cmd /c del @path /q"
REM PASSWORD пароль для архива
REM SET PASSWORD=VZZETcB1eItOc4HU1RQljWqSeymsM6ZVenvXObU1F5oKM3GLTr96K
REM пароль до 20 символов совместим с rar
SET PASSWORD=VZZETcB1eI
REM =================================================================
REM ЗП КАМИН ТГ восст 15.01.19
SET BASE=1501~2.19
REM NAME имя файла с архивом
SET NAME=zptg
REM DIR папка в BASEDIR конкретной базы NAME
SET DIR=%BASEDIR%\%BASE%
SET FILENAME=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.7z
SET LOG=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.log
REM 7za.exe a %FILENAME% -r -mmt4 -mx1 -t7z -x!*.lgd -x!*.log %DIR%\* -p%PASSWORD%
REM CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m %DIR%\*  -p%PASSWORD% >%LOG% 2>&1
CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m -bso1 %DIR%\* >%LOG% 2>&1
REM =================================================================
REM ЗП Камин ПР восст 15.01.19
SET BASE=1501~1.19
REM NAME имя файла с архивом
SET NAME=zppr
REM DIR папка в BASEDIR конкретной базы NAME
SET DIR=%BASEDIR%\%BASE%
SET FILENAME=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.7z
SET LOG=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.log
REM 7za.exe a %FILENAME% -r -mmt4 -mx1 -t7z -x!*.lgd -x!*.log %DIR%\* -p%PASSWORD%
REM CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m %DIR%\*  -p%PASSWORD% >%LOG% 2>&1
CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m -bso1 %DIR%\* >%LOG% 2>&1
REM =================================================================
REM БУХ Остр
SET BASE=465C~1
REM NAME имя файла с архивом
SET NAME=buhostr
REM DIR папка в BASEDIR конкретной базы NAME
SET DIR=%BASEDIR%\%BASE%
SET FILENAME=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.7z
SET LOG=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.log
REM 7za.exe a %FILENAME% -r -mmt4 -mx1 -t7z -x!*.lgd -x!*.log %DIR%\* -p%PASSWORD%
REM CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m %DIR%\*  -p%PASSWORD% >%LOG% 2>&1
CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m -bso1 %DIR%\* >%LOG% 2>&1
REM =================================================================
REM БУХ Проп
SET BASE=838BB~1.2
REM NAME имя файла с архивом
SET NAME=buhprop
REM DIR папка в BASEDIR конкретной базы NAME
SET DIR=%BASEDIR%\%BASE%
SET FILENAME=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.7z
SET LOG=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.log
REM 7za.exe a %FILENAME% -r -mmt4 -mx1 -t7z -x!*.lgd -x!*.log %DIR%\* -p%PASSWORD%
REM CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m %DIR%\*  -p%PASSWORD% >%LOG% 2>&1
CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m -bso1 %DIR%\* >%LOG% 2>&1
REM =================================================================
REM БУХ ПТРАНС
SET BASE=85277~1.2
REM NAME имя файла с архивом
SET NAME=buhptrans
REM DIR папка в BASEDIR конкретной базы NAME
SET DIR=%BASEDIR%\%BASE%
SET FILENAME=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.7z
SET LOG=%BACKUPDIR%\%NAME%_%date:~-4%_%date:~3,2%_%date:~0,2%.log
REM 7za.exe a %FILENAME% -r -mmt4 -mx1 -t7z -x!*.lgd -x!*.log %DIR%\* -p%PASSWORD%
REM CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m %DIR%\*  -p%PASSWORD% >%LOG% 2>&1
CALL 7za.exe a %FILENAME% -mmt8 -mx1 -t7z -xr!*.lgd -xr!*.log -xr!*.lgf -xr!*.lgp -xr!*.zip -v2000m -bso1 %DIR%\* >%LOG% 2>&1
REM =================================================================


Добавить в планировщик по событию при входе в систему:










пятница, 22 февраля 2019 г.

pg_probackup настройка автономного резервного копирования

Новая статья:

Установка pg_probackup СУБД PostgreSQL версия 10.5-24.1C 

Backup and recovery manager for PostgreSQL
Описание
ProBackup: как правильно делать бэкап PostgreSQL - Иван Картышов | DevFest Siberia 2017
ProBackup: быстро, надежно, инкрементально
Скрипт демонстрации:
Резервное копирование PostgreSQL с помощью pg_probackup | Григорий Смолкин


Виртуальная машина ubuntu 16.04.5 PostgreSQL версия 10.5-24.1C 1С 8.3.13.1690

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
10 main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log
Первым делом пересоздать кластер (все данные убьются!!!)

$ sudo pg_dropcluster --stop 10 main
$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main --  --data-checksums
Creating new PostgreSQL cluster 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5 --locale ru_RU.UTF-8 --data-checksums
Файлы, относящиеся к этой СУБД, будут принадлежать пользователю "postgres".
От его имени также будет запускаться процесс сервера.

Кластер баз данных будет инициализирован с локалью "ru_RU.UTF-8".
Кодировка БД по умолчанию, выбранная в соответствии с настройками: "UTF8".
Выбрана конфигурация текстового поиска по умолчанию "russian".

Контроль целостности страниц данных включён.

исправление прав для существующего каталога /var/lib/postgresql/10/main... ок
создание подкаталогов... ок
выбирается значение max_connections... 100
выбирается значение shared_buffers... 128MB
выбор реализации динамической разделяемой памяти... posix
создание конфигурационных файлов... ок
выполняется подготовительный скрипт... ок
выполняется заключительная инициализация... ок
сохранение данных на диске... ок

Готово. Теперь вы можете запустить сервер баз данных:

    /usr/lib/postgresql/10/bin/pg_ctl -D /var/lib/postgresql/10/main -l файл_журнала start

Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 down   postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log

$ sudo pg_createcluster --locale ru_RU.UTF-8 10 beta --  --data-checksums


$ sudo systemctl restart postgresql

$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*
$ ss -tunpl | grep 5433
tcp    LISTEN     0      128       *:5433                  *:*
tcp    LISTEN     0      128      :::5433                 :::*


$ sudo -u postgres psql -U postgres -c "show data_checksums;"
 data_checksums
----------------
 on
(1 строка)


$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"

 
##apt-get update apt-get install pg-probackup-{11,10,9.6,9.5} 
$ sudo -i
# echo "deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup.list
# wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add -
# apt-get update
# apt-get install pg-probackup-10

Вариант для скрипта:

$ sudo su -c "echo 'deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)' > /etc/apt/sources.list.d/pg_probackup.list"
$ sudo su -c "wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add -"
$ sudo apt-get update
$ sudo apt-get install pg-probackup-10


Инициализация каталога резервных копий

$ sudo mkdir /backup
$ sudo chown -R postgres:postgres /backup
$ dpkg -L pg-probackup-10
...
/usr/bin/pg_probackup-10
...

#$ pg_probackup-10 init -B /backup
$ sudo /bin/su postgres -c "pg_probackup-10 init -B /backup"
INFO: Backup catalog '/backup' successfully inited


Определение копируемого экземпляра
#$ sudo /usr/bin/pg_probackup-10 add-instance -B каталог_копий -D каталог_данных --instance имя_экземпляра

$ sudo /bin/su postgres -c "pg_probackup-10 add-instance -B /backup -D /var/lib/postgresql/10/main --instance main"
INFO: Instance 'main' successfully inited

Настройка кластера баз данных:

Если не от postgres :

$ sudo su - postgres
$ psql
postgres=#

CREATE ROLE backup WITH LOGIN;
GRANT USAGE ON SCHEMA pg_catalog TO backup;
GRANT EXECUTE ON FUNCTION current_setting(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_is_in_recovery() TO backup;
GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_stop_backup() TO backup;
GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_switch_wal() TO backup;
GRANT EXECUTE ON FUNCTION txid_current() TO backup;
GRANT EXECUTE ON FUNCTION txid_current_snapshot() TO backup;
GRANT EXECUTE ON FUNCTION txid_snapshot_xmax(txid_snapshot) TO backup;
ALTER ROLE backup WITH REPLICATION;

pg < 10

sudo nano /etc/postgresql/9.6/main/pg_hba.conf

Раскомментировать:
local   replication     backup                                peer
host    replication     backup        127.0.0.1/32            md5

Сохранить.


$ sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak
$ sudo nano /etc/postgresql/10/main/postgresql.conf

Добавить:
....
Настройки для 1с здесь не приведены
....

max_wal_senders = 10
wal_level = replica
# Для настройки архивного резервного копирования разкомментировать:

# archive_mode = on
# archive_command = 'pg_probackup-10 archive-push -B /backup --instance main --wal-file-path %p --wal-file-name %f'


$ sudo systemctl restart postgresql

- Автономные копии могут быть восстановлены на сервере, не имеющем файлового доступа к архиву WAL
- Автономное резервное копирование позволяет восстановить состояние кластера на тот момент времени, для которого уже нет файлов WAL.

Создание полной автономной резервной копии:

$ sudo /bin/su postgres -c "pg_probackup-10 backup -B /backup --instance main -b FULL --stream"
INFO: Backup start, pg_probackup version: 2.0.26, backup ID: PNG44Z, backup mode: full, instance: main, stream: true, remote: false
INFO: Start transfering data files
INFO: Data files are transfered
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: Validating backup PNG44Z
INFO: Backup PNG44Z data files are valid
INFO: Backup PNG44Z completed

Просмотр:
$ sudo /bin/su postgres -c "pg_probackup-10 show -B /backup"
BACKUP INSTANCE 'main'
===============================================================================================

 Instance  Version  ID      Recovery Time           Mode  WAL      Current/Parent TLI  Time    Data   Start LSN    Stop LSN  Status
===============================================================================================

 main      10       PNG44Z  2019-02-24 22:47:09+03  FULL  STREAM   2 / 0               211s  2558MB  0/D1000060  0/D10001D0  OK

Проверка backup:
$ sudo /bin/su postgres -c "pg_probackup-10 validate -B /backup"

INFO: Validate backups of the instance 'main'
INFO: Validating backup PNFW41
INFO: Backup PNFW41 data files are valid
INFO: Backup PNFW41 WAL segments are valid
INFO: All backups are valid

С опцией  --compress сжимает примерно в 4 раза.

$ sudo /bin/su postgres -c "pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress"
[sudo] пароль для user:
INFO: Backup start, pg_probackup version: 2.0.26, backup ID: PNH03N, backup mode: full, instance: main, stream: true, remote: false
INFO: Start transfering data files
INFO: Data files are transfered
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: Validating backup PNH03N
INFO: Backup PNH03N data files are valid
INFO: Backup PNH03N completed

$ sudo /bin/su postgres -c "pg_probackup-10 show -B /backup"

BACKUP INSTANCE 'main'
===============================================================================================

 Instance  Version  ID      Recovery Time           Mode  WAL     Current/Parent TLI  Time    Data   Start LSN    Stop LSN  Status
===============================================================================================

 main      10       PNH03N  2019-02-25 10:17:56+03  FULL  STREAM  2 / 0               233s   446MB  0/EA000028  0/EA0001D0  OK
 main      10       PNG6FL  2019-02-24 23:36:27+03  FULL  STREAM  2 / 0               193s  2558MB  0/D7000028  0/D70EF108  OK
 


================================================================


Удаление:

$ sudo /bin/su postgres -c "pg_probackup-10 delete -B /backup --instance main -i PNG44Z"


Удалим и восстановим кластер main

$ sudo systemctl stop postgresql
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"


$ sudo /bin/su postgres -c "pg_probackup-10 show -B /backup"

BACKUP INSTANCE 'main'
===============================================================================================
 Instance  Version  ID      Recovery Time           Mode  WAL      Current/Parent TLI  Time    Data   Start LSN    Stop LSN  Status
===============================================================================================

 main      10       PNG07B  2019-02-24 21:21:55+03  FULL  ARCHIVE  1 / 0               189s  2237MB  0/810000D0  0/81000240  OK
 main      10       PNFWRP  2019-02-24 20:04:43+03  FULL  ARCHIVE  1 / 0                 7s    23MB   0/6000060   0/6000198  OK



Восстановим
$ sudo /bin/su postgres -c "pg_probackup-10 restore -B /backup --instance main -i PNFWRP"

$ sudo systemctl restart postgresql
user@u1604:~$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*

Можно подключаться из 1с

Попробуем восстановить в другой кластер на этом сервере:

$ sudo systemctl stop postgresql
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/beta/*"

Восстановим


$ sudo /bin/su postgres -c "pg_probackup-10 restore -B /backup --instance main -D /var/lib/postgresql/10/beta -i PNG44Z"
INFO: Validating backup PNG44Z
INFO: Backup PNG44Z data files are valid
INFO: Backup PNG44Z WAL segments are valid
INFO: Backup PNG44Z is valid.
INFO: Restore of backup PNG44Z completed.

Настроить:$ sudo nano /etc/postgresql/10/beta/postgresql.conf

max_wal_senders = 10
wal_level = replica

Сохранить.
 
$ sudo systemctl restart postgresql
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*

$ sudo systemctl restart postgresql
$ ss -tunpl | grep 5433
tcp    LISTEN     0      128       *:5433                  *:*
tcp    LISTEN     0      128      :::5433                 :::*

Можно подключаться из 1с:




Перенос полной автономной резервной копии на другой компьютер:

На сервере с которого копируем:

$ sudo /bin/su postgres -c "tar -cvzf  /var/lib/postgresql/pg_pro-$(date +%Y-%m-%d_%H-%M-%S).tar.gz -C /backup ."


На сервере на который копируем:

$ sudo -i
# echo "deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup.list
# wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add -
# apt-get update
# apt-get install pg-probackup-10


$ sudo mkdir /backup
$ sudo chown -R postgres:postgres /backup
$ sudo /bin/su postgres -c "pg_probackup-10 init -B /backup"

любым способом копируем папку с резервной копией
/backup/backups/main/PNG6FL

$ sudo chown -R postgres:postgres /backup

$ sudo /bin/su postgres -c "pg_probackup-10 show -B /backup"


BACKUP INSTANCE 'main'
===============================================================================================
 Instance  Version  ID      Recovery Time           Mode  WAL     Current/Parent TLI  Time    Data   Start LSN    Stop LSN  Status
===============================================================================================

 main      10       PNG6FL  2019-02-24 23:36:27+03  FULL  STREAM  2 / 0               193s  2558MB  0/D7000028  0/D70EF108  OK



$ sudo /bin/su postgres -c "pg_probackup-10 validate -B /backup"
INFO: Validate backups of the instance 'main'
INFO: Validating backup PNG6FL
INFO: Backup PNG6FL data files are valid
INFO: Backup PNG6FL WAL segments are valid
INFO: All backups are valid


Удалим и восстановим кластер main

$ sudo systemctl stop postgresql
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"
 
$ sudo /bin/su postgres -c "pg_probackup-10 restore -B /backup --instance main -i PNG6FL"
INFO: Validating backup PNG6FL
INFO: Backup PNG6FL data files are valid
INFO: Backup PNG6FL WAL segments are valid
INFO: Backup PNG6FL is valid.
INFO: Restore of backup PNG6FL completed.

$ sudo systemctl restart postgresql
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*


================================================================
pg_probackup validate -B каталог_копий
[--instance имя_экземпляра
[ -i ид_резервной_копии | [{--time=время | --xid=ид_транзакции | --recovery-target-name=имя_цели_восстановления }
[--inclusive=логическое_значение]]]]
[--timeline=линия_времени]
[-j число_потоков] [--progress] [-q] [-v]

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

================================================================

#pg_probackup add-instance -B %BACKUP_DIR% -D %PGDATA% --instance %INSTANCE%
#pg_probackup backup -B %BACKUP_DIR% --instance %INSTANCE% --backup-mode=FULL --stream --progress -d postgres
#pg_probackup show -B %BACKUP_DIR%



postgres@test:~$ pwd
/var/lib/postgresql
postgres@test:~$ ls
9.6
postgres@test:~$ pg_probackup-9.6 validate -B /backup --instance main -i PNKVZY --log-directory=/var/lib/postgresql --log-level-file='error'
ERROR: Backup PNKVZY has status: ERROR
postgres@test:~$ ls
9.6  pg_probackup.log  pg_probackup.log.rotation
postgres@test:~$ cat pg_probackup.log
2019-02-27 15:51:33 MSK: ERROR: Backup PNKVZY has status: ERROR


$ pg_probackup-9.6 validate -B /backup --instance main -i PNJKHE --log-directory=/var/lib/postgresql --log-level-file='info'
INFO: Validating backup PNJKHE
INFO: Backup PNJKHE data files are valid
INFO: Backup PNJKHE WAL segments are valid
INFO: Backup PNJKHE is valid.
INFO: Validate of backup PNJKHE completed.




$ cat pg_probackup.log
2019-02-27 15:51:33 MSK: ERROR: Backup PNKVZY has status: ERROR
2019-02-27 15:55:32 MSK: INFO: command: pg_probackup-9.6 validate -B /backup --instance main -i PNJKHE --log-directory=/var/lib/postgresql --log-level-file=info
2019-02-27 15:55:32 MSK: INFO: Validating backup PNJKHE
2019-02-27 15:55:32 MSK: INFO: Backup PNJKHE data files are valid
2019-02-27 15:55:32 MSK: INFO: Backup PNJKHE WAL segments are valid
2019-02-27 15:55:32 MSK: INFO: Backup PNJKHE is valid.
2019-02-27 15:55:32 MSK: INFO: Validate of backup PNJKHE completed.



Идея сделать скрипт,

$ nano backup-pgpro.sh

Вставить текст ниже:







#!/bin/sh
set -e
BACKUP_DIR='/backup'
INSTANCE='main'
BACKU_ID=$(ls /backup/backups/main -1 | tail -1)
VALIDATE=$(sudo /bin/su postgres -c "pg_probackup-9.6 validate -B /backup --instance main -i PNJKHE" | tail -1)




$ sudo /bin/su postgres -c "pg_probackup-9.6 validate -B /backup"

$ ls /backup/backups/main -1 | tail -1
V
$ sudo /bin/su postgres -c "pg_probackup-9.6 show -B /backup --instance main -i PNJKHE"
n# sudo /bin/su postgres -c "pg_probackup-9.6 validate -B /backup --instance main -i PNJKHE"
INFO: Validating backup PNJKHE
INFO: Backup PNJKHE data files are valid
INFO: Backup PNJKHE WAL segments are valid
INFO: Backup PNJKHE is valid.
INFO: Validate of backup PNJKHE completed.
root@test:/backup/backups/main# sudo /bin/su postgres -c "pg_probackup-9.6 validate -B /backup --instance main -i PNKVZY"
ERROR: Backup PNKVZY has status: ERROR



#!/bin/sh
#set -e
#sudo su - postgres
BACKUP_DIR='/backup'
COPY_DIR='/backup/copy'
LOG_DIR='/backup'
LOG_FILE='err.txt'
INSTANCE='main'
COPY_ID=''
sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_FILE"
sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_FILE.rotation"

sudo systemctl stop  srv1cv83.service

# Создание полной автономной резервной копии:
echo "Создание полной автономной резервной копии"
sudo /bin/su postgres -c "pg_probackup-9.6 backup -B $BACKUP_DIR \
     --instance $INSTANCE -b FULL --stream --compress -j 8 \
     --log-directory=$LOG_DIR \
     --log-level-file='error' --error-log-filename=$LOG_FILE"

if [ ! -f $LOG_DIR/$LOG_FILE ]; then
    #echo "Файл не существует!"
    echo "успешно завершено!"
else
    # проверку не проводил
    # не знаю как смоделировать
    # ошибку
    #echo "Файл существует!"
    echo "закончилось неудачей!"
    cat $LOG_DIR/$LOG_FILE
    sudo systemctl start  srv1cv83.service
    exit 1
fi

# Поскольку мы не знаем идентификатор резервной копии
# возьмем последнюю копию, но ее нужно проверить
COPY_ID=$(sudo /bin/su postgres -c "ls /backup/backups/main -1 | tail -1")
echo $COPY_ID

# без ошибки
#COPY_ID='PNJKHE'
# с ошибкой
#COPY_ID='PNKVZY'
# короткий
#COPY_ID='PNJKHE'

sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_FILE"
sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_FILE.rotation"

sudo /bin/su - postgres -c "pg_probackup-9.6 validate -B $BACKUP_DIR \
     --instance $INSTANCE -i $COPY_ID --log-level-file='error' \
     --log-directory=$LOG_DIR \
     --error-log-filename=$LOG_FILE"
if [ ! -f $LOG_DIR/$LOG_FILE ]; then
    echo "Файл не существует!"
    DATA=`date +"%Y-%m-%d_%H-%M-%S"`
    sudo /bin/su postgres -c "tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz \
          $BACKUP_DIR/backups/$INSTANCE/$COPY_ID"
else
    echo "Файл существует!"
    cat $LOG_DIR/$LOG_FILE
    echo "Резервная копия не прошла валидацию!"
    sudo systemctl start  srv1cv83.service
    exit 1

fi


#sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_FILE"
#sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_FILE.rotation"
echo "Нормальное завершение программы!"
sudo systemctl start  srv1cv83.service