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

вторник, 29 октября 2019 г.

ops

Стенд pg 9.6.15 pg_probackup
Здесь описана установка сервера ubuntu, postgresql, pg_probackup, 1c
========================================
Сравнение pg_dump в файл и в каталог
Здесь сравненение pg_dump в файл одним потоком
и в католог в несколько потоков, приведен скрипт
для pg_dump в каталог в несколько потоков
========================================
pg_probackup восстановление одной базы
Приведены примеры восстановления одной базы или всех баз
в тестовый кластер postgresql beta, приведены примеры, как подключиться
к тестовому кластеру beta из 1с.
Приведен скрипт, для основного резервного копирования
========================================
 Восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)
Приведены примеры восстановления из последней полной резервной копии, на заданный момент времени с использованием механизма непрерывного архивирования и WAL архивов.
========================================
Тестирование и исправление конфигурации на сервере Ubuntu
Приведена установка дополнительного тестового сервера 1С (на альтернативных портах)

воскресенье, 27 октября 2019 г.

Тестирование и исправление конфигурации на сервере Ubuntu

7.4.5. Проверки конфигурации и расширений
Работа с конфигуратором по протоколу SSH (не в режиме агента)
xvfb-run • help

#$ sudo dpkg -i 1c-enterprise83-client_8.3.15-1565_amd64.deb
$ sudo dpkg -i 1c-enterprise83-client_8.3.13-1644_amd64.deb
$ sudo apt install -f
$ sudo apt-get install xvfb dbus-x11

$ sudo nano /etc/systemd/system/srv1cv83-test.service

# srv1cv83-test.service
#
[Unit]
Description=1C:Enterprise Server
Wants=network.target
After=network.target

[Service]
#MemoryAccounting=true
#MemoryLimit=15G
Type=simple
Environment=LANG=ru_RU.UTF-8
Environment=TZ=Europe/Moscow
Environment=PORT=2540
Environment=REGPORT=2541
Environment=RANGE=2560:2690
Environment=DATADIR=/home/usr1cv8/.test/1C/1Cv83
PrivateTmp=yes
ExecStart= /opt/1C/v8.3/x86_64/ragent -d /home/usr1cv8/.test/1C/1Cv83 -port 2540 -regport 2541 -range 2560:2690

# -seclev 0 -debug
Restart=always
RestartSec=3
User=usr1cv8
Group=grp1cv8

[Install]
WantedBy=multi-user.target



Сохранить.
 
$ sudo systemctl daemon-reload  # запускать после изменений файла
$ sudo systemctl start srv1cv83-test.service
$ sudo systemctl status srv1cv83-test.service
#$ sudo  systemctl enable srv1cv83-test.service


В проверяемых базах создадим пользователя
admin пароль admin
Права:
- Администратор системы
- Интерактивное открытие внешних отчетов и обработок
- Полные права

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

$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4

Скрипт поднимет последнюю полную копию в кластере pg beta (5433)
Подключит 1с базы, запусти тестирование и исправление каждой базы.

$ sudo nano /root/test1c_all.sh

#!/bin/sh -e
#/backup
#должна быть папка:
SERVER1C=u1804:2541
SERVERDB="'u1804 port=5433'"
DBPASS=pass
ADMIN1C=admin
PWADMIN1C=admin
BACKUP_DIR=/backup
LOG0=$BACKUP_DIR/test.log
LOG1=$BACKUP_DIR/test1c.log
log=$BACKUP_DIR'/log/pg_probackup.log'

#должны быть права
#sudo chown -R postgres:postgres /backup
sudo su postgres -c "echo '--------------------------------------------------------------------' >> $LOG1"
#exit
#============================================
#if false; then
sudo pg_dropcluster --stop 9.6 beta
sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta --  --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"
sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D \
     /var/lib/postgresql/9.6/beta  --log-level-file=info -j4
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
    msg="кластер beta неудачное восстановление"
    FLAG=true
else
    msg="кластер beta удачное восстановление"
    FLAG=false
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
echo $msg
sudo su postgres -c "echo '$DATA $msg' >> $LOG1"
sudo su postgres -c "echo '--------------------------------------------------------------------' >> $LOG1"
sudo su postgres -c "cat $log >> $LOG1"
sudo su postgres -c "echo '--------------------------------------------------------------------' >> $LOG1"

if $FLAG; then
    sudo su postgres -c "echo 'Завершение работы'>> $LOG1"
    sudo su postgres -c "echo '--------------------------------------------------------------------' >> $LOG1"
    echo "Завершение работы"
    exit 1
fi
sudo pg_ctlcluster 9.6 beta start
sudo -u postgres psql -p 5433 -c "\l"
#sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl start  -w -D /var/lib/postgresql/9.6/beta \
#  -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
#sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl stop  -w -D /var/lib/postgresql/9.6/beta \
#   -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"
#fi

#if false; then

sudo systemctl stop srv1cv83-test.service
sudo rm -rf /home/usr1cv8/.test
sudo systemctl start srv1cv83-test.service
# делаем  backup
DB_BASE=`sudo su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'" | \
     cut -d"|" -f1 | /bin/grep -v template | /bin/grep -v postgres`
#DB_BASE="demo test" #конкретные базы
#DB_BASE="" #пропустить
#DB_BASE="" #пропустить
echo $DB_BASE
for DB_NAME in $DB_BASE
 do
     echo $DB_NAME
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     DATA1=`date +"%Y-%m-%d %H:%M:%S"`
     # Записываем информацию в лог с секундами
     sudo su postgres -c "echo '$DATA1 Начало создания базы ${DB_NAME}' >> $LOG1"
     sudo su postgres -c "xvfb-run /opt/1C/v8.3/x86_64/./1cv8 CREATEINFOBASE Srvr=\"$SERVER1C;Ref=$DB_NAME;\
     DBMS='PostgreSQL';DBSrvr=$SERVERDB;DB=$DB_NAME;DBUID='postgres';DBPwd=$DBPASS;\
     CrSQLDB='Y';SchJobDn='Y';\" /Out "$LOG0" > /dev/null 2>&1"
     if [ $? -ne 0 ]
     then
         DATA1=`date +"%Y-%m-%d %H:%M:%S"`
         echo "$DATA1 Ошибка создания базы ${DB_NAME}"
         sudo su postgres -c "cat $LOG0 >> $LOG1"
         sudo su postgres -c "echo '$DATA1 Ошибка создания базы ${DB_NAME}' >>  $LOG1"
         TEST=false
     else
         DATA1=`date +"%Y-%m-%d %H:%M:%S"`
         echo "$DATA1 Завершение создания базы ${DB_NAME}"
         sudo su postgres -c "cat $LOG0 >> $LOG1"
         sudo su postgres -c "echo '$DATA1 Завершение создания базы ${DB_NAME}' >>  $LOG1"
         TEST=true
     fi
     sudo su postgres -c "echo '--------------------------------------------------------------------' >> $LOG1"
     #
     if $TEST; then
     # Записываем информацию в лог с секундами
     DATA1=`date +"%Y-%m-%d %H:%M:%S"`
     echo "$DATA1 Начало тестирования базы ${DB_NAME}"
     sudo su postgres -c "echo '$DATA1 Начало тестирования базы ${DB_NAME}' >>  $LOG1"

     sudo su postgres -c "xvfb-run /opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S$SERVER1C'\'$DB_NAME /N$ADMIN1C\
         /P$PWADMIN1C /IBcheckAndRepair -LogAndRefsIntegrity /Out $LOG0 > /dev/null 2>&1"
     if [ $? -ne 0 ]
     then
         DATA1=`date +"%Y-%m-%d %H:%M:%S"`
         echo "$DATA1 Ошибка тестирования базы ${DB_NAME}"
         sudo su postgres -c "cat $LOG0 >> $LOG1"
         sudo su postgres -c "echo '$DATA1 Ошибка тестирования базы ${DB_NAME}' >>  $LOG1"
     else
         DATA1=`date +"%Y-%m-%d %H:%M:%S"`
         echo "$DATA1 Завершение тестирования базы ${DB_NAME}"
         sudo su postgres -c "cat $LOG0 >> $LOG1"
         sudo su postgres -c "echo '$DATA1 Завершение тестирования базы ${DB_NAME}' >>  $LOG1"
     fi
     sudo su postgres -c "echo '--------------------------------------------------------------------' >> $LOG1"
     fi
done

sudo systemctl stop srv1cv83-test.service
sudo pg_ctlcluster 9.6 beta stop
#fi
#============================================

Сохранить.

$ sudo sh /root/test1c_all.sh


Восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)

$ sudo -u postgres psql -c "\l+"


Установить базу с тестовой конфигурацией ЗИК ГУ

$ sudo su postgres -c "createdb --username postgres -T template0 demo"

$ time sudo su postgres -c "pg_restore -d demo -j 4 /home/user/zgutest.dump"

Делаем полную копию:
$ sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4

Проверить архивирование:
$ sudo -u postgres  psql -c " select * from pg_stat_archiver;"

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

 
Скопировать postgresql.conf

$ sudo -u postgres cp /etc/postgresql/9.6/main/postgresql.conf /backup/postgresql.conf

Скопировать pg_hba.conf

$ sudo -u postgres cp /etc/postgresql/9.6/main/pg_hba.conf /backup/pg_hba.conf
 

Просмотр:

$ sudo -u postgres pg_probackup-9.6 show -B /backup

ID Q010SV


Проверка backup:
$ sudo -u postgres pg_probackup-9.6 validate -B /backup

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

Дополнительно можно проверить

$ sudo -u postgres pg_probackup-9.6 validate -B /backup   --instance main -i Q010SV --time='2042-04-16 12:26:00'







WARNING: Recovery can be done up to time 2019-10-27 12:35:49+03, xid 34293 and LSN 1/5AFFD5E0

Останавливаем 1с
$ sudo systemctl stop srv1cv83.service


Внимание мы удалим полностью существующий кластер с базами 1С !!!
Вместе с настройками в /etc/postgresql 
Еще раз сохраним:
$ sudo -u postgres cp /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/9.6/main/postgresql.conf.bak
$ sudo -u postgres cp /etc/postgresql/9.6/main/pg_hba.conf /etc/postgresql/9.6/main/pg_hba.conf.bak

$ sudo pg_dropcluster --stop 9.6 main
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 main --  --data-checksums

Удалим данные кластера main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/main/*"

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

Восстановим кластер main
$ sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -i Q010SV --recovery-target='latest' -j 4


INFO: Validating backup Q010SV
INFO: Backup Q010SV data files are valid
INFO: Backup Q010SV WAL segments are valid
INFO: Backup Q010SV is valid.
INFO: Restore of backup Q010SV completed.

Обратить внимание - будет автоматически создан /var/lib/postgresql/9.6/main/recovery.conf

$ sudo -u postgres cat  /var/lib/postgresql/9.6/main/recovery.conf
# recovery.conf generated by pg_probackup 2.2.3
restore_command = '/usr/bin/pg_probackup-9.6 archive-get -B /backup --instance main --wal-file-path=%p --wal-file-name=%f'
recovery_target_action = 'pause'

Нужно стартануть кластер, хоть он и не запустится
$ sudo pg_ctlcluster 9.6 main start
#$ sudo sudo systemctl status postgresql@9.6-main.service 

Для восстановления запустить так:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl start  -w -D /var/lib/postgresql/9.6/main  -o '-c config_file=/etc/postgresql/9.6/main/postgresql.conf'"


....
....
Дождаться завершения восстановления!


Остановить:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl stop  -w -D /var/lib/postgresql/9.6/main  -o '-c config_file=/etc/postgresql/9.6/main/postgresql.conf'"


После этого будет работать штатный режим:
$ sudo pg_ctlcluster 9.6 main start

$ sudo sudo systemctl status postgresql@9.6-main.service


Важно: на данном этапе не настроен  /etc/postgresql/9.6/main/postgresql.conf !
Не будет настроено непрерывное архивирование!!!

Запускаем 1с пока просто для проверки!
$ sudo systemctl start srv1cv83.service


Входим в 1С проверяем что присутствуют все документы, введеные после
выполнения последней полной копии.

Проверить архивирование:
$ sudo -u postgres  psql -c " select * from pg_stat_archiver;"

Видим что архивирование не выполняется.

После проверки восстановления нужно включить непрерывное архивирование.



Для возобновления архивирования:

$ sudo systemctl stop srv1cv83.service

$ sudo pg_ctlcluster 9.6 main stop

$ sudo -u postgres cp /backup/postgresql.conf /etc/postgresql/9.6/main/postgresql.conf
$ sudo -u postgres cp /backup/pg_hba.conf  /etc/postgresql/9.6/main/pg_hba.conf 

или

$ sudo -u postgres cp /etc/postgresql/9.6/main/postgresql.conf.bak /etc/postgresql/9.6/main/postgresql.conf
$ sudo -u postgres cp /etc/postgresql/9.6/main/pg_hba.conf.bak /etc/postgresql/9.6/main/pg_hba.conf 

Проверим:

Должны быть настройки для pg_probackup и для 1с.

$ sudo -u postgres nano /etc/postgresql/9.6/main/postgresql.conf
$ sudo -u postgres nano /etc/postgresql/9.6/main/pg_hba.conf
$ sudo pg_ctlcluster 9.6 main start

$ sudo systemctl start srv1cv83.service


Делаем полную копию:
$ sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4


Проверить архивирование:
$ sudo -u postgres  psql -c " select * from pg_stat_archiver;"

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

pg_probackup восстановление одной базы

Запуск Ubuntu server 16.04.5 PostgreSQL, версия 10.3-3.1C без systemctl start postgresql.service
Документация pg_probackup
Стенд pg 9.6.15 pg_probackup


Начиная с pg_probackup 2.2.3
 
$ sudo -u postgres pg_probackup-9.6 version
pg_probackup-9.6 2.2.3 (PostgreSQL 9.6.15)


$ sudo su postgres -c "psql -c \"select pg_size_pretty( pg_database_size('demo'))\""

pg_size_pretty
----------------
 3461 MB
(1 строка)
$ time sudo su postgres -c "pg_dump -Fc demo"  > ~/demo.dump

Создадим несколько баз:
$ sudo su postgres -c "createdb --username postgres -T template0 demo1"
$ sudo su postgres -c "createdb --username postgres -T template0 demo2"
$ sudo su postgres -c "createdb --username postgres -T template0 demo3"
$ sudo su postgres -c "createdb --username postgres -T template0 demo4"
$ sudo su postgres -c "createdb --username postgres -T template0 demo5"

Восстановим указав резервную копию
$ time sudo su postgres -c "pg_restore -d demo1 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo2 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo3 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo4 -j 4 /home/user/demo.dump"
$ time sudo su postgres -c "pg_restore -d demo5 -j 4 /home/user/demo.dump"

$ sudo su postgres -c "psql -c \"SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;\""

   datname  |  size
-----------+---------
 postgres  | 7079 kB
 demo      | 3461 MB
 template1 | 7079 kB
 template0 | 6969 kB
 demo1     | 3425 MB
 demo2     | 3425 MB
 demo3     | 3425 MB
 demo4     | 3426 MB
 demo5     | 3426 MB
(9 строк)

$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4

$ sudo -u postgres pg_probackup-9.6 show -B /backup
ID PZGX6Z

Создание дополнительного кластера
$ pg_lsclusters
#$ sudo pg_dropcluster --stop 9.6 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta --  --data-checksums

Creating new cluster 9.6/beta ...
  config /etc/postgresql/9.6/beta
  data   /var/lib/postgresql/9.6/beta
  locale ru_RU.UTF-8
  socket /var/run/postgresql
  port   5433


Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"

Для восстановления базы demo5 добавляем восстановление базы postgres (для простоты подключения)

$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZGX6Z -j4 --db-include=demo5 --db-include=postgres

или если восстанавливаем кластер целиком:

$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZGX6Z -j4


$ sudo du -h -s /var/lib/postgresql/9.6/main/base
21G     /var/lib/postgresql/9.6/main/base

$ sudo du -h -s /var/lib/postgresql/9.6/beta/base
3,4G    /var/lib/postgresql/9.6/beta/base

Нужно стартануть кластер, хоть он и не запустится
$ sudo pg_ctlcluster 9.6 beta start
#$ sudo sudo systemctl status postgresql@9.6-beta.service 

Для восстановления запустить так:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl start  -w -D /var/lib/postgresql/9.6/beta  -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"

Если восстанавливаем кластер целиком ниже красным не делаем.
В другом окне (ssh):
   
$ sudo su postgres -c 'psql -p 5433 -c "\l+"'
$ sudo su postgres -c 'psql -p 5433 -l'


$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo1;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo2;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo3;"'
$ sudo su postgres -c 'psql -p 5433 -c "DROP DATABASE demo4;"'

Остановить:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl stop  -w -D /var/lib/postgresql/9.6/beta  -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"

После этого будет работать штатный режим:
$ sudo pg_ctlcluster 9.6 beta start

$ sudo sudo systemctl status postgresql@9.6-beta.service
 






  $ time sudo su postgres -c "pg_dump -p 5433 -Fc demo5"  > ~/demo5_5433.dump

Мержевание:

$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4

$ time sudo su postgres -c "pg_dump -Fc demo"  > ~/demo.dump

$ sudo su postgres -c "createdb --username postgres -T template0 demo6"

$ time sudo su postgres -c "pg_restore -d demo6 -j 4 /home/user/demo.dump"

$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired -j4

 $ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired -j4

$ sudo -u postgres pg_probackup-9.6 show -B /backup



ID PZH4E6

$ time sudo -u postgres pg_probackup-9.6 merge -B /backup --instance main -i PZH4E6 -j 4
$ sudo -u postgres pg_probackup-9.6 show -B /backup



Создание дополнительного кластера
$ pg_lsclusters
$ sudo pg_dropcluster --stop 9.6 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta --  --data-checksums

Creating new cluster 9.6/beta ...
  config /etc/postgresql/9.6/beta
  data   /var/lib/postgresql/9.6/beta
  locale ru_RU.UTF-8
  socket /var/run/postgresql
  port   5433


Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"

Для восстановления базы demo5 добавляем восстановление базы postgres (для простоты подключения)


$ time sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PZH4E6 -j4


Нужно стартануть кластер, хоть он и не запустится
$ sudo pg_ctlcluster 9.6 beta start
#$ sudo sudo systemctl status postgresql@9.6-beta.service 

Для восстановления запустить так:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl start  -w -D /var/lib/postgresql/9.6/beta  -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"

Остановить:
$ sudo su postgres -c "/usr/lib/postgresql/9.6/bin/pg_ctl stop  -w -D /var/lib/postgresql/9.6/beta  -o '-c config_file=/etc/postgresql/9.6/beta/postgresql.conf'"

После этого будет работать штатный режим:
$ sudo pg_ctlcluster 9.6 beta start

$ sudo sudo systemctl status postgresql@9.6-beta.service

$ time sudo su postgres -c "pg_dump -p 5433 -Fc demo6"  > ~/demo6_5433.dump




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

Раскомментировать:

#host    replication     postgres        127.0.0.1/32            md5
host    replication     postgres        127.0.0.1/32            md5



Сохранить.

$ sudo pg_ctlcluster 9.6 main restart

$ sudo nano /root/backup.sh
#!/bin/sh -e
# Внимание задать пароль PGPASSWORD !!!
#/backup
inst='/backup'
cd $inst
#  /backup/pg_probackup
log=$inst'/log/pg_probackup.log'
log1=$inst'/log/probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst
sudo su postgres -c "PGPASSWORD=12345 pg_probackup-9.6 backup -B $inst --instance main \
    -U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal \
    --log-level-file=info -j 4"
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
    msg="$inst неудачное завершение."
else
    msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
msg1="Размер экземпляра pg_probackup: $(du -h -s $inst/backups)"
sudo su postgres -c "echo '$DATA $msg' >> $log"
sudo su postgres -c "echo '$DATA $msg1' >> $log"
sudo su postgres -c "echo '==================================================================' >> $log"
sudo su postgres -c "cat $log >> $log1"
#cat $log  | mutt -s "pg_probackup" root
#echo "$DATA $msg" >> $log1
# Сразу архивируем для rsync
#COPY_DIR=$inst/copy
COPY_DIR=/backup/copy
#COPY_LOG=$inst/copy/copy.log
COPY_LOG=/backup/copy/copy.log
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
    DATA=`date +"%Y-%m-%d_%H-%M-%S"`
    #rm  $inst/copy/*
    sudo su postgres -c "tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz  \
           $inst/backups/main/$COPY_ID > /dev/null 2>&1"
    if [ $? = 0 ]
    then
        msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
    else
        msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
    fi
    DATA=`date +"%Y-%m-%d %H:%M:%S"`
    sudo su postgres -c "echo '$DATA $msg' >> $COPY_LOG"
    #echo "$DATA $msg" | mutt -s "copy pg_probackup" root
fi


$ sudo sh /root/backup.sh

$ sudo crontab -e

# m h  dom mon dow   command
45 11 * * * sh /root/backup.sh


Сохранить.

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

$ sudo -u postgres  psql -c " select * from pg_stat_archiver;"

воскресенье, 13 октября 2019 г.

Сравнение pg_dump в файл и в каталог

25.1. Выгрузка в SQL

$ sudo su postgres -c "psql -c \"select pg_size_pretty( pg_database_size('demo'))\""
 pg_size_pretty
----------------
 9195 MB
(1 строка)



$ time sudo su postgres -c "pg_dump -Fc demo"  > ~/demo.dump
real    6m5,898s
user    5m25,457s
sys     0m6,010s


$ sudo mkdir /pg_dump
$ sudo chown -R postgres:postgres /pg_dump
$ time sudo su postgres -c "pg_dump -j 4 -F d -f /pg_dump demo"

real    3m24,548s
user    5m18,820s
sys     0m8,760s


Удалить базу:
$ sudo -u postgres psql -c "DROP DATABASE demo;"
$ sudo su postgres -c "createdb --username postgres -T template0 demo"


Создадим несколько баз:
$ sudo su postgres -c "createdb --username postgres -T template0 demo1"
$ sudo su postgres -c "createdb --username postgres -T template0 demo2"
$ sudo su postgres -c "createdb --username postgres -T template0 demo3"

Восстановим указав резервную копию
$ time sudo su postgres -c "pg_restore -d demo1 /home/user/demo.dump"
real    42m55,742s
user    0m41,076s
sys     0m4,237s

$ time sudo su postgres -c "pg_restore -d  demo2 -j 4 /home/user/demo.dump"
real    21m50,954s
user    0m51,454s
sys     0m10,632s


$ time sudo su postgres -c "pg_restore -d demo3 -j 4   /pg_dump"

real    21m31,491s
user    0m49,814s
sys     0m8,429s


$ sudo su postgres -c "psql -c \"SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;\""
  datname  |  size
-----------+---------
 postgres  | 7079 kB
 demo      | 9195 MB
 template1 | 7079 kB
 template0 | 6969 kB
 demo1     | 9186 MB
 demo2     | 9183 MB
 demo3     | 9182 MB
(7 строк)

$ nano backup_demo.sh

#!/bin/sh -e
#/backup
BASE=demo
#должна быть папка:
DIRPGDUMP=/backup/pg_dump
#должны быть права
#sudo chown -R postgres:postgres /backup
DATEST=`date +"%Y-%m-%d %H-%M-%S"`
sudo su postgres -c "echo '$DATEST ---------------------------------' >> $DIRPGDUMP/pg_dump_$BASE.log"
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DIR=$DIRPGDUMP/$BASE-$DATA
sudo -u postgres mkdir -p $DIR
sudo su postgres -c "pg_dump -j 4 -F d -f $DIR $BASE" && sudo su postgres -c "cd $DIRPGDUMP; \
     tar -cvzf $BASE-$DATA.tar.gz $BASE-$DATA > /dev/null 2>&1"
if [ $? -ne 0 ]
then
     echo "$BASE-$DATA.tar.gz неудачное завершение"
     sudo su postgres -c "echo '$BASE-$DATA.tar.gz неудачное завершение' >> $DIRPGDUMP/pg_dump_$BASE.log"
else
     echo "$BASE-$DATA.tar.gz удачное завершение"
     sudo su postgres -c "echo '$BASE-$DATA.tar.gz удачное завершение' >> $DIRPGDUMP/pg_dump_$BASE.log"
fi
DATEEND=`date +"%Y-%m-%d %H-%M-%S"`
sudo su postgres -c "echo '$DATEEND ---------------------------------' >> $DIRPGDUMP/pg_dump_$BASE.log"
sudo su postgres -c "echo '-----------------------------------------------------' >> $DIRPGDUMP/pg_dump_$BASE.log"
sudo su postgres -c "rm -rf $DIR"

Сохранить.

$ time sh backup_demo.sh


$ nano backup_all.sh

#!/bin/sh -e
#/backup
#должна быть папка:
BACKUP_DIR=/backup/pg_dump
LOG1=$BACKUP_DIR/backup.log
#должны быть права
#sudo chown -R postgres:postgres /backup
sudo su postgres -c "echo '---------------------------------' >> $LOG1"
#exit
#============================================
# делаем  backup
DB_BASE=`sudo su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'" | \
     cut -d"|" -f1 | /bin/grep -v template | /bin/grep -v postgres`
#DB_BASE="demo test" #конкретные базы
#DB_BASE="" #пропустить
echo $DB_BASE
for DB_NAME in $DB_BASE
 do
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     DATA1=`date +"%Y-%m-%d %H:%M:%S"`
     # Записываем информацию в лог с секундами
     sudo su postgres -c "echo '$DATA1 Начало backup базы ${DB_NAME}' >> $LOG1"
     echo "$DATA1 Начало backup базы ${DB_NAME}"
     DIR=$BACKUP_DIR/$DB_NAME-$DATA
     sudo su postgres -c "mkdir -p $DIR"
     sudo su postgres -c "pg_dump -j 4 -F d -f $DIR $DB_NAME" && sudo su postgres -c \
     "cd $BACKUP_DIR; tar -cvzf $DB_NAME-$DATA.tar.gz $DB_NAME-$DATA > /dev/null 2>&1"
     if [ $? -ne 0 ]
     then
         DATA1=`date +"%Y-%m-%d %H:%M:%S"`
         echo "$DATA1 Ошибка завершения backup для базы ${DB_NAME}"
         sudo su postgres -c "echo '$DATA1 Ошибка backup для для базы ${DB_NAME}' >>  $LOG1"
         sudo su postgres -c "rm -rf $DIR"
         sudo su postgres -c "rm -rf $DIR.tar.gz"
     else
         DATA1=`date +"%Y-%m-%d %H:%M:%S"`
         echo "$DATA1 Завершение backup для базы ${DB_NAME}"
         sudo su postgres -c "echo '$DATA1 Завершение backup для для базы ${DB_NAME}' >>  $LOG1"
         #sudo su postgres -c "rm -rf $DIR"
         #sudo su postgres -c "rm -rf $DIR.tar.gz"
     fi
     sudo su postgres -c "echo '--------------------------------------------------------------------' >> $LOG1"
done
#============================================


Сохранить.

$ time sh backup_demo.sh

воскресенье, 29 сентября 2019 г.

Стенд pg 9.6.15 pg_probackup

ProBackup: быстро, надежно, инкрементально
EgorRogov_pg_probackup_script.txt
Резервное копирование PostgreSQL с помощью pg_probackup | Григорий Смолкин
pg_probackup
PGConf.Сибирь 2018 «PG_PROBACKUP. Резервное копирование и верификация PostgreSQL» Григорий Смолкин
Backup and recovery manager for PostgreSQL
pg_probackup
ubuntu-18.04.3-server-amd64.iso

В данной статье опишем установку сервера СУБД PostgreSQL 9.6.15  1C от PostgresPRO  на ubuntu 18.04.3 на виртуальную машину.

Устанавливаем ubuntu 18.04.3 виртуальную машину
RAM (16 GB)

Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера u1804

После установки, Ctrl +Alt + T (окно терминала)
$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt autoremove -y
$ sudo apt install mc ssh samba -y

Возможно sudo apt upgrade -y не пройдет из за блокировки, тогда sudo reboot и повторите с начала.

$ lsusb

2. Настройка сети

Тестовый сервер будет использовать dhcp

Смотрим:
$ cat  /etc/hosts
127.0.0.1       localhost
.....


$ sudo nano /etc/hosts

Меняем:

127.0.0.1       localhost       test2


Сохранить.

$ cat /proc/cpuinfo | grep MHz
cpu MHz         : 800.111
cpu MHz         : 800.028
cpu MHz         : 800.377
cpu MHz         : 800.190


3. Тюнинг остального:

Сделаем еще один скрипт для настройки остального:

$ nano tuning.sh

#!/bin/bash
# отключим ipv6
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
#sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
#тюнинг postgresql
#add a swap file to an Ubuntu 16.04
#sudo fallocate -l 1G /swapfile
#sudo chmod 600 /swapfile
#sudo mkswap /swapfile
#sudo swapon /swapfile
#sudo cp /etc/fstab /etc/fstab.bak
#sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sudo /bin/su -c "echo 'vm.swappiness=1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_migration_cost_ns = 5000000' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_autogroup_enabled = 0' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_background_bytes = 67108864' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_bytes = 536870912' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.zone_reclaim_mode = 0' >> /etc/sysctl.conf"
sudo sysctl -p
# перезагрузим сеть
#sudo systemctl restart networking.service
#sudo systemctl start networking.service
#sudo systemctl enable networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl --list-boots
sudo sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
# Отключение уведомлений службы Apport (/var/crash)
sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport
# Отключим службу ondemand# (для разгона cpu)
# cat /proc/cpuinfo | grep MHz
# systemctl status ondemand
sudo systemctl stop ondemand
sudo systemctl disable ondemand
# shutdown -r now

Сохраним файл tuning.sh

------------------------------------------
Сделаем исполняем
$ chmod +x tuning.sh
$  sudo ./tuning.sh

или
$  sudo sh tuning.sh
------------------------------------------

Перезагрузимся

$ sudo reboot

После перезагрузки по сети можно подключиться MobaXterm

$ cat /proc/cpuinfo | grep MHz 
cat /proc/cpuinfo | grep MHz
cpu MHz         : 4000.489
cpu MHz         : 4000.162
cpu MHz         : 4000.980
cpu MHz         : 4002.072

$ free
              total        used        free      shared  buff/cache   available
Память:    16284616       95512    15944100        1312      245004    15870784
Подкачка:     1048572           0     1048572

$ sudo apt-get update -y
$ sudo apt-get install -y wget gnupg2
$ wget -O - http://1c.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO-1C | sudo apt-key add -
$ sudo su -c "echo deb http://1c.postgrespro.ru/archive/2019_08_15/deb bionic main > /etc/apt/sources.list.d/postgrespro-1c.list"
$ sudo apt-get update -y
$ if dpkg -s libpq5 2>/dev/null; then sudo apt-get remove -y libpq5; fi
$ wget http://1c.postgrespro.ru/archive/2019_08_15/deb/pool/main/p/postgresql-pro-1c-9.6/libpq5_9.6.15-1.1C.bionic_amd64.deb
$ sudo dpkg -i libpq5_9.6.15-1.1C.bionic_amd64.deb
$ sudo apt-get install -y postgresql-pro-1c-9.6
$ sudo systemctl status postgresql.service
$ sudo su postgres -c "psql -c 'show data_checksums;'"
 data_checksums
----------------
 off
(1 строка)
$ sudo pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

Внимание ниже настройки не обратимы!
Будет снесен кластер postgresql /var/lib/postgresql/9.6/main
и его настройки /etc/postgresql/9.6/main

$ sudo pg_dropcluster --stop 9.6 main
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 main --  --data-checksums

Creating new cluster 9.6/main ...
  config /etc/postgresql/9.6/main
  data   /var/lib/postgresql/9.6/main
  locale ru_RU.UTF-8
  socket /var/run/postgresql
  port   5432

$ sudo pg_ctlcluster 9.6 main start
#$ sudo systemctl start postgresql.service
$ sudo su postgres -c "psql -c 'show data_checksums;'"
 data_checksums
----------------
 on
(1 строка)

#Делаем проверки
$ sudo systemctl status postgresql.service
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*
$ ps aux | grep postgres | grep -- -D
postgres  4123  0.0  0.1 315200 28236 ?        S    15:12   0:00 /usr/lib/postgresql/9.6/bin/postgres -D /var/lib/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf

$ sudo pg_lsclusters
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo cp /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/9.6/main/postgresql.conf.bak

-----------------------------------------------------------------

Настройка postgresql.conf для 1С Total Memory (RAM): 16 GB

$ sudo nano /etc/postgresql/9.6/main/postgresql.conf
Добавить в конец:

# DB Version: 10
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd

max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 8GB # 4GB for 1c
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
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'
 -----------------------------------------------------------------

Установка pg_probackup 

pg_probackup описание

$ 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-9.6
$ dpkg -l | grep pg-probackup-9.6 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pg-probackup-9.6 помечен как зафиксированный.
$ sudo -u postgres pg_probackup-9.6 version

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


Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo pg_probackup-9.6 init -B /backup
$ sudo mkdir /backup/copy
$ sudo mkdir /backup/log
$ sudo mkdir /backup/pg_dump
$ sudo chown -R postgres:postgres /backup/
#$ sudo chmod -R 777 /backup/pg_probackup
# /backups примонтированный диск для архивов
#$ sudo mkdir /backups/copy
#$ sudo mkdir /backups/pg_dump
#$ sudo chown -R postgres:postgres /backups/ 


Определение копируемого экземпляра 
$ sudo -u postgres pg_probackup-9.6 add-instance -B /backup -D /var/lib/postgresql/9.6/main --instance main


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

Добавить:

max_wal_senders = 10
wal_level = replica
unix_socket_directories='/var/run/postgresql'
# Для настройки архивного резервного копирования разкомментировать:
archive_mode = on
#archive_command ='test ! -f /wal/%f && cp %p /wal/%f' 
archive_command = '/usr/bin/pg_probackup-9.6 archive-push -B /backup --compress --instance main --wal-file-path %p --wal-file-name %f'

Сохранить.

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

Раскоментировать:

local replication postgres peer

Сохранить.

$ sudo systemctl restart postgresql.service

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

$ sudo -u postgres nano /backup/backups/main/pg_probackup.conf

Добавить:

retention-redundancy=5

Сохранить


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


$ sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired

Сделаем несколько инкрементальных копий

$ sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired

$ sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired

$ sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired 



Просмотр:

$ sudo -u postgres pg_probackup-9.6 show -B /backup




Объединим последнюю икрементальную копию PYLG52 её родительской полной копией (PYLFNY), вместе со всеми инкрементальными копиями между ними.


$ sudo -u postgres pg_probackup-9.6 merge -B /backup --instance main -i PYLG52
 $ sudo -u postgres pg_probackup-9.6 show -B /backup




Проверка backup:

Проверка файлов:
Проверяет правильность кластера базы данных PostgreSQL, обнаруживая физическое и логическое повреждение.
Проверяет все файлы данных, расположенные в заданном каталоге данных, проводя проверку контрольных сумм на уровне блоков и проверку корректности заголовков страниц. При запуске с ключом --amcheck эта команда также выполняет логическую проверку всех индексов в указанном экземпляре Postgres Pro, используя расширение amcheck.
$ sudo -u postgres pg_probackup-9.6 checkdb -B /backup --instance main
INFO: Start checking data files
INFO: Data files are valid

Проверка backup:
Проверяет наличие и целостность всех файлов, необходимых для восстановления кластера. 
$ sudo -u postgres pg_probackup-9.6 validate -B /backup

-------------------------------------------------------------------------------------------------------
Ниже не адаптировалось под 9.6

Пример восстановления из полной автономной резервной копии (замена кластера на резервную копию)


Сделали копию:
 $ sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired 

Перед восстановлением

Просмотр:

$ sudo -u postgres pg_probackup-9.6 show -B

Проверка backup:
$ sudo -u postgres pg_probackup-9.6 validate -B /backup

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

Можно восстанавливать.

Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим данные кластера main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -i PRP29I
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
INFO: Backup PRP29I is valid.
INFO: Restore of backup PRP29I completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service


------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)


$ sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-9.6 show -B /backup


Проверка backup:
$ sudo -u postgres pg_probackup-9.6 validate -B /backup

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
 Можно восстанавливать, но проверим непрерывность архивирования:


Войти в 1с создать документ, провести, выйти из 1с.


$ sudo -u postgres pg_probackup-9.6 validate -B /backup   --instance main -i PRP6Q5 --time='2042-04-16 12:26:00'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
WARNING: Thread [1]: Could not read WAL record at 1/88000000
ERROR: Thread [1]: WAL segment "/backupwal/wal/main/000000010000000100000088" is absent
WARNING: Recovery can be done up to time 2019-05-18 14:36:30+03, xid 0 and LSN 1/2A000198
ERROR: Not enough WAL records to time 2042-04-16 12:26:00+03



Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим данные кластера main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/main/*"

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



Восстановим кластер main
$ sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -i PRP6Q5 --recovery-target='latest'


INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
INFO: Backup PRP6Q5 is valid.
INFO: Restore of backup PRP6Q5 completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service

После проверки восстановления нужно включить непрерывное архивирование.

 -------------------------------------------------------------------------------------------------------

Создание дополнительного кластера
#$ sudo pg_dropcluster --stop 9.6 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 9.6 beta --  --data-checksums
[sudo] пароль для user:
Creating new cluster 9.6/beta ...
  config /etc/postgresql/9.6/beta
  data   /var/lib/postgresql/9.6/beta
  locale ru_RU.UTF-8
  socket /var/run/postgresql
  port   5433

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

Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/9.6/beta/*"


$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4

.....
INFO: Backup start, pg_probackup version: 2.1.5, instance: main, backup ID: PYRFBC, backup mode: FULL, wal-method: STREAM, remote: false, replica: false, compress-algorithm: zlib, compress-level: 1
......
INFO: Validating backup PYRFBC
.....

Восстановление конкретного экземпляра:

$ sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta -i PYRFBC

или восстановление последней копии

$ sudo -u postgres pg_probackup-9.6 restore -B /backup --instance main -D /var/lib/postgresql/9.6/beta


=====================================================================
Определение копируемого экземпляра если будем сохранять кластер beta, вообщем то нам это не надо.


$ sudo -u postgres pg_probackup-9.6 add-instance -B /backup -D /var/lib/postgresql/9.6/beta --instance beta

Проверка:
$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance beta -b FULL --stream --compress --delete-wal --expired -j4
=====================================================================

Откорректировать  postgresql.conf для кластера beta

$ sudo cp /etc/postgresql/9.6/beta/postgresql.conf /etc/postgresql/9.6/beta/postgresql.conf.bak

$ sudo nano /etc/postgresql/9.6/beta/postgresql.conf

$ sudo pg_ctlcluster 9.6 beta start


Подключение 1с  ко второму кластеру PostgreSQL




 -------------------------------------------------------------------------------------------------------

Для проверки стандартной wal архивации:

$ sudo mkdir -p /wal
$ sudo chown -R postgres:postgres /wal


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

расскоментировать:
archive_command ='test ! -f /wal/%f && cp %p /wal/%f'

Сохранить.

$ sudo systemctl restart postgresql.service


В папку /test положить файлы:
deb64_8_3_15_1656.tar.gz

# установка 1с
$ mkdir -p /tmp/1ctmp
$ cd /tmp/1ctmp
$ sudo apt install imagemagick -y
#$sudo apt install -y unixodbc libgsf-1-114 libglib2.0
$ sudo apt install libfreetype6 libgsf-1-common unixodbc glib2.0
#ubuntu
$ sudo  apt install -y xfonts-utils cabextract
$ sudo apt install ttf-mscorefonts-installer -y
#$ sudo dpkg -i fonts-ttf-ms_1.0-eter4ubuntu_all.deb
#$ sudo fc-cache -fv
$  ls /home/user/test/
$ cp /home/user/test/deb64_8_3_15_1656.tar.gz /tmp/1ctmp
$ tar xvzf deb64_8_3_15_1656.tar.gz
$ sudo dpkg -i 1c-enterprise83-common_8.3.15-1656_amd64.deb
$ sudo dpkg -i 1c-enterprise83-server_8.3.15-1656_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-ws_8.3.15-1656_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-crs_8.3.15-1656_amd64.deb
#$ sudo apt -f -y install
$ sudo chown -R usr1cv8:grp1cv8 /opt/1C
#$ sudo echo -e "pass\npass\n" | sudo passwd usr1cv8
$ sudo service srv1cv83 start
$ sudo service srv1cv83 status
#$ sudo usermod -aG sudo usr1cv8

$ sudo  apt install -y libc6-i386
$ cd ~/test
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd-modules_7.90-eter2ubuntu_amd64.deb
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd_7.90-eter2ubuntu_amd64.deb
$ sudo dpkg -i *.deb
#$ sudo apt-get install -f -y
$ sudo service haspd start
$ sudo service haspd status
#$ sudo reboot

$ sudo service srv1cv83 status
$ ss -tlnp | grep :15
LISTEN     0      128          *:1560                     *:*
LISTEN     0      128          *:1540                     *:*
LISTEN     0      128          *:1541                     *:*
LISTEN     0      128         :::1560                    :::*
LISTEN     0      128         :::1540                    :::*
LISTEN     0      128         :::1541                    :::*


Для программной лицензии (прявязанной к hasp)

в /var/1C/licenses
Положить лицензию

$ sudo mv 20190207114003.lic /var/1C/licenses

или вставить hasp

После установки

$ sudo reboot

Запуск службы сервера администрирования RAS

$ sudo nano /etc/systemd/system/srv1cv8-ras.service

Вставить:

[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target remote-fs.target nss-lookup.target
Requires=srv1cv83.service

[Service]
Type=simple
ExecStart=/opt/1C/v8.3/x86_64/ras cluster --port=1545
KillSignal=SIGINT
PrivateTmp=true
Restart=on-failure
RestartSec=5
User=usr1cv8
Group=grp1cv8

[Install]
WantedBy=multi-user.target

Сохранить.


#$ sudo systemctl daemon-reload
$ sudo systemctl enable srv1cv8-ras.service
$ sudo systemctl start srv1cv8-ras.service
$ sudo systemctl status srv1cv8-ras.service


 $ sudo su postgres -c "psql -c \"select pg_size_pretty( pg_database_size('demo'))\""
 pg_size_pretty
----------------
 9193 MB
(1 строка)

$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired

real    2m37,066s
user    1m40,382s
sys     0m34,089s


$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j 2

real    1m44,581s
user    1m43,316s
sys     0m57,534s



$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4

real    1m8,021s
user    1m50,815s
sys     1m12,284s


$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired -j4

real    0m10,455s
user    0m2,287s
sys     0m2,436s
 




$ time sudo su postgres -c "pg_dump -Fc demo"  > ~/demo.dump

Создадим несколько баз:
$ sudo su postgres -c "createdb --username postgres -T template0 demo1"
....
$ sudo su postgres -c "createdb --username postgres -T template0 demo10"

Восстановим указав резервную копию
$ sudo su postgres -c "pg_restore -d demo1 /home/user/demo.dump"
.....
$ sudo su postgres -c "pg_restore -d demo10 /home/user/demo.dump"

$ sudo su postgres -c "psql -c \"select sum(pg_catalog.pg_database_size(d.datname)) from pg_catalog.pg_database d;\""
     sum
--------------
 103128915240
(1 строка)

$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4

real    10m58,273s
user    19m34,595s
sys     11m39,389s




$ time sudo -u postgres pg_probackup-9.6 backup -B /backup --instance main -b DELTA --stream --compress --delete-wal --expired -j4

real    4m34,368s
user    0m32,296s
sys     0m52,805s



$ sudo -u postgres pg_probackup-9.6 show -B /backup


$ time sudo -u postgres pg_probackup-9.6 merge -B /backup --instance main -i PYNHKF -j 4



 

pg_dumpall > db.out
 
$ time sudo su postgres -c "pg_dumpall"  > ~/dump100G.dump

real    11m7,245s
user    1m9,058s
sys     2m0,203s

$ psql -f db.out postgres