воскресенье, 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;"

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

 

Комментариев нет:

Отправка комментария