Пишу для себя, чтобы не забыть как делал. 95 % рабочее. На комментарии отвечаю, когда увижу.
четверг, 31 октября 2019 г.
Установка PostgreSQL, версия 11.5-1.1C на Ubuntu 18.04.3
В данной статье опишем установку PostgreSQL 11.5-1.1C на 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
Установка СУБД PostgreSQL 11.5-1.1C
После перезагрузки по сети можно подключиться MobaXtermк нашей виртуальной машине (по ip или или имени ) загрузить файлы установки:
$ mkdir /home/user/test
В папку /test положить файлы:
postgresql_11.5_1.1C_amd64_deb.tar.bz2
$ wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7_amd64.deb
$ sudo sudo dpkg -i libicu55_55.1-7_amd64.deb
$ dpkg -l | grep libicu55 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
# libicu55 помечен как зафиксированный.
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt update
$ sudo apt-get install postgresql-common -y
$ dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
pgdg-keyring помечен как зафиксированный.
postgresql-client-common помечен как зафиксированный.
postgresql-common помечен как зафиксированный.
$ mkdir -p /tmp/post
$ cp /home/user/test/postgresql_11.5_1.1C_amd64_deb.tar.bz2 /tmp/post/
$ cd /tmp/post
$ tar -xvf postgresql_11.5_1.1C_amd64_deb.tar.bz2
$ ls
$ cd postgresql-11.5-1.1C_amd64_deb
$ ls
# список файлов:
#libpq5_11.5-1.1C_amd64.deb postgresql-11_11.5-1.1C_amd64.deb postgresql-client-11_11.5-1.1C_amd64.deb
$ sudo dpkg -i *.deb
$ dpkg -l | grep 11.5-1.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#postgresql-11 помечен как зафиксированный.
#postgresql-client-11 помечен как зафиксированный.
#libpq5 помечен как зафиксированный.
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
11 main 5432 online postgres /var/lib/postgresql/11/main pg_log/postgresql-%a.log
$ sudo pg_dropcluster --stop 11 main
$ sudo pg_createcluster --locale ru_RU.UTF-8 11 main -- --data-checksums
$ sudo pg_ctlcluster 11 main start
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
11 main 5432 online postgres /var/lib/postgresql/11/main pg_log/postgresql-%a.log
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo cp /etc/postgresql/11/main/postgresql.conf /etc/postgresql/11/main/postgresql.conf.bak
#Делаем проверки
$ sudo pg_ctlcluster 11 main status
$ 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 30761 0.0 0.2 393564 48888 ? S 17:20 0:00 /usr/lib/postgresql/11/bin/postgres -D /var/lib/postgresql/11/main -c config_file=/etc/postgresql/11/main/postgresql.conf
-------------------------------------------------------------------------------------------------------
Настройка postgresql.conf для 1С Total Memory (RAM): 16 GB
$ sudo nano /etc/postgresql/11/main/postgresql.confДобавить в конец:
# DB Version: 11
# 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'
Сохранить.
#$ sudo systemctl restart postgresql.service
$ sudo pg_ctlcluster 11 main restart
-------------------------------------------------------------------------------------------------------
Установка 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-11
#$ dpkg -l | grep pg-probackup-11 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pg-probackup-11 помечен как зафиксированный.
Инициализация каталога резервных копий 1 экземпляр на примонтированом HDD
Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo pg_probackup-11 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
Определение копируемого экземпляра
$ sudo -u postgres pg_probackup-11 add-instance -B /backup -D /var/lib/postgresql/11/main --instance main
$ sudo nano /etc/postgresql/11/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-11 archive-push -B /backup --compress --instance main --wal-file-path %p --wal-file-name %f'
Сохранить.
#$ sudo systemctl restart postgresql.service
$ sudo pg_ctlcluster 11 main restart
Настройка политики сохранения 5 резервных копий
$ sudo -u postgres nano /backup/backups/main/pg_probackup.confДобавить:
retention-redundancy=5
Сохранить
Создание полной автономной резервной копии:
$ sudo -u postgres pg_probackup-11 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j 4
$ sudo -u postgres pg_probackup-11 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j 4 --log-level-file=info
Просмотр: $ sudo -u postgres pg_probackup-11 show -B /backup
Проверка backup:
Проверка файлов:
$ sudo -u postgres pg_probackup-11 checkdb -B /backup --instance main
INFO: Start checking data files
INFO: Data files are valid
Проверка backup:
$ sudo -u postgres pg_probackup-11 validate -B /backup
INFO: Validate backups of the instance 'main'
INFO: Validating backup PUVU29
INFO: Backup PUVU29 data files are valid
INFO: Backup PUVU29 WAL segments are valid
INFO: Validating backup PUVTUX
INFO: Backup PUVTUX data files are valid
INFO: Backup PUVTUX WAL segments are valid
INFO: All backups are valid
-------------------------------------------------------------------------------------------------------
вторник, 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С (на альтернативных портах)
Здесь описана установка сервера ubuntu, postgresql, pg_probackup, 1c
========================================
Сравнение pg_dump в файл и в каталог
Здесь сравненение pg_dump в файл одним потоком
и в католог в несколько потоков, приведен скрипт
для pg_dump в каталог в несколько потоков
========================================
pg_probackup восстановление одной базы
Приведены примеры восстановления одной базы или всех баз
в тестовый кластер postgresql beta, приведены примеры, как подключиться
к тестовому кластеру beta из 1с.
Приведен скрипт, для основного резервного копирования
========================================
Восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)
Приведены примеры восстановления из последней полной резервной копии, на заданный момент времени с использованием механизма непрерывного архивирования и WAL архивов.
========================================
Тестирование и исправление конфигурации на сервере Ubuntu
Приведена установка дополнительного тестового сервера 1С (на альтернативных портах)
PostgreSQL 1C Медленная работа при переходе на клиент серверный режим работы
Решение проблемы с зависанием PostgreSQL
Типичные причины неоптимальной работы запросов и методы оптимизации
Платформа 8.0/8.1 → Медленная работа при переходе на клиент серверный режим работы
Управление Торговлей, ред. 11 → Подбор товаров в документы продажи
Платформа 8.3 → Проблема с запросом на postgres
Платформа 8.3 → Postgre очень низкая производительность!!!
enable_nestloop=off
constraint_exclusion = on
join_collapse_limit=1
Решение проблемы с зависанием PostgreSQL
Типичные причины неоптимальной работы запросов и методы оптимизации
Платформа 8.0/8.1 → Медленная работа при переходе на клиент серверный режим работы
Управление Торговлей, ред. 11 → Подбор товаров в документы продажи
Платформа 8.3 → Проблема с запросом на postgres
Платформа 8.3 → Postgre очень низкая производительность!!!
enable_nestloop=off
constraint_exclusion = on
join_collapse_limit=1
Решение проблемы с зависанием PostgreSQL
При выполнения некоторых регламентных операций (Закрытие месяца, Расчет себестоимости и т.п), где используются сложные запросы с большим количеством соединений больших таблиц, возможно существенное увеличение времени выполнения операции. В основном, эти проблемы связаны с работой оптимизатора PostgreSQL и отсутствием актуальной статистики по таблицам, учавствующим в запросе.
Варианты решения проблемы:
Увеличить количество записей, просматриваемых при сборе статистики по таблицам. Большие значения могут повысить время выполения команды ANALYZE, но улучшат построение плана запроса:
Файл postgresql.conf - default_statistics_target = 1000 -10000.
Отключение оптимизатору возможности использования NESTED LOOP при выборе плана выполнения запроса в конфигурации PostgreSQL:
Файл postgresql.conf - enable_nestloop=off.
Отрицательным эффектом этого способа является возможное замедление некоторых запросов, поскольку при их выполении будут использоваться другие, более затратные, методы соединения (HASH JOIN).
Отключение оптимизатору возможности изменения порядка соединений таблиц в запросе:
Файл postgresql.conf - join_collapse_limit=1.
Следует использовать этот метод, если вы уверены в правильности порядка соединений таблиц в проблемном запросе.
Восстановление кластера main (PITR)
$ dpkg -l | grep 8.3
... 8.3.15-1565 ...
$ tar xvzf client_8_3_15_1565.deb64.tar.gz
$ sudo dpkg -i 1c-enterprise83-client_8.3.15-1565_amd64.deb
$ sudo apt install -f
$ sudo apt-get install xvfb dbus-x11
$ time sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak
$ sudo pg_ctlcluster 10 main stop
$ sudo chown -R postgres:postgres /backup
$ sudo nano /root/restore_main.sh
#!/bin/sh -e
#/backup
#должна быть папка:
pgpass="'1q2w3e4r5'"
PGVER=10
SERVER1C=u1804:1541
SERVERDB="'u1804 port=5432'"
DBPASS=1q2w3e4r5
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 $PGVER main
sudo pg_createcluster --locale ru_RU.UTF-8 $PGVER main -- --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/$PGVER/main/*"
sudo -u postgres pg_probackup-$PGVER restore -B /backup --instance main -D \
/var/lib/postgresql/$PGVER/main --log-level-file=info -j4 --recovery-target='latest'
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
msg="кластер main неудачное восстановление"
FLAG=true
else
msg="кластер main удачное восстановление"
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 $PGVER main start
sudo pg_ctlcluster $PGVER main stop
sudo -u postgres cp /etc/postgresql/$PGVER/main/postgresql.conf.bak /etc/postgresql/$PGVER/main/postgresql.conf
sudo pg_ctlcluster $PGVER main start
#sudo -u postgres psql -U postgres -c "alter user postgres with password $pgpass;"
sudo -u postgres psql -p 5432 -c "\l"
#fi
#if false; then
sudo systemctl stop srv1cv83.service
sudo rm -rf /home/usr1cv8/.1cv8
sudo systemctl start srv1cv83.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='N';\" /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"
#Запретить тестирование и исправление TEST=false
TEST=false
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.service
#sudo pg_ctlcluster $PGVER main stop
#fi
#============================================
Сохранить.
$ sudo sh /root/restore_main.sh
... 8.3.15-1565 ...
$ tar xvzf client_8_3_15_1565.deb64.tar.gz
$ sudo dpkg -i 1c-enterprise83-client_8.3.15-1565_amd64.deb
$ sudo apt install -f
$ sudo apt-get install xvfb dbus-x11
$ time sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak
$ sudo pg_ctlcluster 10 main stop
$ sudo chown -R postgres:postgres /backup
$ sudo nano /root/restore_main.sh
#!/bin/sh -e
#/backup
#должна быть папка:
pgpass="'1q2w3e4r5'"
PGVER=10
SERVER1C=u1804:1541
SERVERDB="'u1804 port=5432'"
DBPASS=1q2w3e4r5
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 $PGVER main
sudo pg_createcluster --locale ru_RU.UTF-8 $PGVER main -- --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/$PGVER/main/*"
sudo -u postgres pg_probackup-$PGVER restore -B /backup --instance main -D \
/var/lib/postgresql/$PGVER/main --log-level-file=info -j4 --recovery-target='latest'
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
msg="кластер main неудачное восстановление"
FLAG=true
else
msg="кластер main удачное восстановление"
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 $PGVER main start
sudo pg_ctlcluster $PGVER main stop
sudo -u postgres cp /etc/postgresql/$PGVER/main/postgresql.conf.bak /etc/postgresql/$PGVER/main/postgresql.conf
sudo pg_ctlcluster $PGVER main start
#sudo -u postgres psql -U postgres -c "alter user postgres with password $pgpass;"
sudo -u postgres psql -p 5432 -c "\l"
#fi
#if false; then
sudo systemctl stop srv1cv83.service
sudo rm -rf /home/usr1cv8/.1cv8
sudo systemctl start srv1cv83.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='N';\" /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"
#Запретить тестирование и исправление TEST=false
TEST=false
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.service
#sudo pg_ctlcluster $PGVER main stop
#fi
#============================================
Сохранить.
$ sudo sh /root/restore_main.sh
понедельник, 28 октября 2019 г.
Восстановление кластера main
$ dpkg -l | grep 8.3
... 8.3.15-1565 ...
$ tar xvzf client_8_3_15_1565.deb64.tar.gz
$ sudo dpkg -i 1c-enterprise83-client_8.3.15-1565_amd64.deb
$ sudo apt install -f
$ sudo apt-get install xvfb dbus-x11
$ time sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak
$ sudo pg_ctlcluster 10 main stop
$ sudo chown -R postgres:postgres /backup
$ sudo nano /root/restore_main.sh
#!/bin/sh -e
#/backup
#должна быть папка:
pgpass="'1q2w3e4r5'"
PGVER=10
SERVER1C=u1804:1541
SERVERDB="'u1804 port=5432'"
DBPASS=1q2w3e4r5
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 $PGVER main
sudo pg_createcluster --locale ru_RU.UTF-8 $PGVER main -- --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/$PGVER/main/*"
sudo -u postgres pg_probackup-$PGVER restore -B /backup --instance main -D \
/var/lib/postgresql/$PGVER/main --log-level-file=info -j4
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
msg="кластер main неудачное восстановление"
FLAG=true
else
msg="кластер main удачное восстановление"
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 -u postgres cp /etc/postgresql/$PGVER/main/postgresql.conf.bak /etc/postgresql/$PGVER/main/postgresql.conf
sudo pg_ctlcluster $PGVER main start
sudo -u postgres psql -U postgres -c "alter user postgres with password $pgpass;"
sudo -u postgres psql -p 5432 -c "\l"
#fi
#if false; then
sudo systemctl stop srv1cv83.service
sudo rm -rf /home/usr1cv8/.1cv8
sudo systemctl start srv1cv83.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='N';\" /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"
#Запретить тестирование и исправление TEST=false
TEST=false
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.service
#sudo pg_ctlcluster $PGVER main stop
#fi
#============================================
Сохранить.
$ sudo sh /root/restore_main.sh
Проверка в кластере beta
$ 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
Скрипт поднимет последнюю полную копию в кластере pg beta (5433)
Подключит 1с базы, запусти тестирование и исправление каждой базы.
$ sudo nano /root/test1c_all.sh
#!/bin/sh -e
#/backup
#должна быть папка:
pgpass="'1q2w3e4r5'"
PGVER=10
SERVER1C=u1804:2541
SERVERDB="'u1804 port=5433'"
DBPASS=1q2w3e4r5
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 $PGVER beta
sudo pg_createcluster --locale ru_RU.UTF-8 $PGVER beta -- --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/$PGVER/beta/*"
sudo -u postgres pg_probackup-$PGVER restore -B /backup --instance main -D \
/var/lib/postgresql/$PGVER/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 -u postgres cp /etc/postgresql/$PGVER/beta/postgresql.conf.bak /etc/postgresql/$PGVER/beta/postgresql.conf
sudo pg_ctlcluster $PGVER beta start
#sudo -u postgres psql -U postgres -c "alter user postgres with password $pgpass;"
sudo -u postgres psql -p 5433 -c "\l"
#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"
#Запретить тестирование и исправление TEST=false
#TEST=false
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 $PGVER beta stop
#fi
#============================================
Сохранить.
$ time sudo sh /root/test1c_all.sh
... 8.3.15-1565 ...
$ tar xvzf client_8_3_15_1565.deb64.tar.gz
$ sudo dpkg -i 1c-enterprise83-client_8.3.15-1565_amd64.deb
$ sudo apt install -f
$ sudo apt-get install xvfb dbus-x11
$ time sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak
$ sudo pg_ctlcluster 10 main stop
$ sudo chown -R postgres:postgres /backup
$ sudo nano /root/restore_main.sh
#!/bin/sh -e
#/backup
#должна быть папка:
pgpass="'1q2w3e4r5'"
PGVER=10
SERVER1C=u1804:1541
SERVERDB="'u1804 port=5432'"
DBPASS=1q2w3e4r5
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 $PGVER main
sudo pg_createcluster --locale ru_RU.UTF-8 $PGVER main -- --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/$PGVER/main/*"
sudo -u postgres pg_probackup-$PGVER restore -B /backup --instance main -D \
/var/lib/postgresql/$PGVER/main --log-level-file=info -j4
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
msg="кластер main неудачное восстановление"
FLAG=true
else
msg="кластер main удачное восстановление"
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 -u postgres cp /etc/postgresql/$PGVER/main/postgresql.conf.bak /etc/postgresql/$PGVER/main/postgresql.conf
sudo pg_ctlcluster $PGVER main start
sudo -u postgres psql -U postgres -c "alter user postgres with password $pgpass;"
sudo -u postgres psql -p 5432 -c "\l"
#fi
#if false; then
sudo systemctl stop srv1cv83.service
sudo rm -rf /home/usr1cv8/.1cv8
sudo systemctl start srv1cv83.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='N';\" /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"
#Запретить тестирование и исправление TEST=false
TEST=false
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.service
#sudo pg_ctlcluster $PGVER main stop
#fi
#============================================
Сохранить.
$ sudo sh /root/restore_main.sh
Проверка в кластере beta
$ 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
Скрипт поднимет последнюю полную копию в кластере pg beta (5433)
Подключит 1с базы, запусти тестирование и исправление каждой базы.
$ sudo nano /root/test1c_all.sh
#!/bin/sh -e
#/backup
#должна быть папка:
pgpass="'1q2w3e4r5'"
PGVER=10
SERVER1C=u1804:2541
SERVERDB="'u1804 port=5433'"
DBPASS=1q2w3e4r5
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 $PGVER beta
sudo pg_createcluster --locale ru_RU.UTF-8 $PGVER beta -- --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/$PGVER/beta/*"
sudo -u postgres pg_probackup-$PGVER restore -B /backup --instance main -D \
/var/lib/postgresql/$PGVER/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 -u postgres cp /etc/postgresql/$PGVER/beta/postgresql.conf.bak /etc/postgresql/$PGVER/beta/postgresql.conf
sudo pg_ctlcluster $PGVER beta start
#sudo -u postgres psql -U postgres -c "alter user postgres with password $pgpass;"
sudo -u postgres psql -p 5433 -c "\l"
#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"
#Запретить тестирование и исправление TEST=false
#TEST=false
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 $PGVER beta stop
#fi
#============================================
Сохранить.
$ time sudo sh /root/test1c_all.sh
воскресенье, 27 октября 2019 г.
Тестирование и исправление конфигурации на сервере Ubuntu
Работа с конфигуратором по протоколу 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 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;"
четверг, 24 октября 2019 г.
среда, 23 октября 2019 г.
vacuumdb --all --analyze --full
$ vacuumdb --all --analyze --full
23.1.2. Высвобождение дискового пространства
Подсказка: Результат обычного VACUUM может быть неудовлетворительным, когда вследствие массового изменения или удаления строк в таблице оказывается много мёртвых версий строк. Если у вас есть такая таблица и вам нужно освободить лишнее пространство, которое она занимает, используйте команду VACUUM FULL или, в качестве альтернативы, CLUSTER или один из вариантов ALTER TABLE, выполняющий перезапись таблицы. Эти команды записывают абсолютно новую копию таблицы и строят для неё индексы. Все эти варианты требуют исключительной блокировки. Заметьте, что они также на время требуют дополнительного пространства на диске в объёме, приблизительно равном размеру таблицы, поскольку старые копии таблицы и индексов нельзя удалить до завершения создания новых копий.
23.1.2. Высвобождение дискового пространства
Подсказка: Результат обычного VACUUM может быть неудовлетворительным, когда вследствие массового изменения или удаления строк в таблице оказывается много мёртвых версий строк. Если у вас есть такая таблица и вам нужно освободить лишнее пространство, которое она занимает, используйте команду VACUUM FULL или, в качестве альтернативы, CLUSTER или один из вариантов ALTER TABLE, выполняющий перезапись таблицы. Эти команды записывают абсолютно новую копию таблицы и строят для неё индексы. Все эти варианты требуют исключительной блокировки. Заметьте, что они также на время требуют дополнительного пространства на диске в объёме, приблизительно равном размеру таблицы, поскольку старые копии таблицы и индексов нельзя удалить до завершения создания новых копий.
Тестирование и исправление конфигурации на сервере Ubuntu
7.4.5. Проверки конфигурации и расширений
Работа с конфигуратором по протоколу SSH (не в режиме агента)
xvfb-run • help
$ sudo dpkg -i 1c-enterprise83-client_8.3.15-1565_amd64.deb
$ sudo apt install -f
$ sudo apt-get install xvfb dbus-x11
$ nano test.sh
#!/bin/sh
/opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"Григорьянц А.А. (системный администратор)" \
/P"12345" /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
или
#!/bin/sh
/opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"ЛяшоваЛП" \
/P"12345" /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
#!/bin/sh
/opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"ЛяшоваЛП" \
/P"12345" /DumpIB /home/user/demo.dt
# /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
$ chmod +x test.sh
$ time xvfb-run ~/test.sh
или
$ time xvfb-run /opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"ЛяшоваЛП" /P"12345" /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
$ time xvfb-run /opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"ЛяшоваЛП" /P"12345" /DumpIB /home/user/demo.dt /Out"/home/user/log.txt"
===================================================================
$ time sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres pg_probackup-10 show -B /backup
PZVGGS
$ pg_lsclusters
$ sudo pg_dropcluster --stop 10 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 10 beta -- --data-checksums
Creating new cluster 10/beta ...
config /etc/postgresql/10/beta
data /var/lib/postgresql/10/beta
locale ru_RU.UTF-8
socket /var/run/postgresql
port 5433
Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/beta/*"
Для восстановления базы demo5 добавляем восстановление базы postgres (для простоты подключения)
$ time sudo -u postgres pg_probackup-10 restore -B /backup --instance main -D /var/lib/postgresql/10/beta -i PZVGGS -j4
$ sudo pg_ctlcluster 10 beta start
$ sudo sudo systemctl status postgresql@10-beta.service
$ sudo systemctl stop srv1cv83.service
$ sudo rm -rf /home/usr1cv8/.1cv8
$ sudo systemctl start srv1cv83
$ sudo systemctl restart srv1cv8-ras.service
$ time xvfb-run /opt/1C/v8.3/x86_64/./1cv8 CREATEINFOBASE Srvr='"u1804";Ref="demo_beta";DBMS="PostgreSQL";DBSrvr="u1804 port=5433";DB="demo";DBUID="postgres";DBPwd="pass";CrSQLDB="Y";SchJobDn="Y";' /Out "/home/user/log.txt"
$ cat /home/user/log.txt >> /home/user/log.log
$ rm -rf /home/user/log.txt
$ time xvfb-run /opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo_beta" /N"ЛяшоваЛП" /P"12345" /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
$ cat /home/user/log.txt >> /home/user/log.log
$ sudo nano /root/test1c_all.sh
#!/bin/sh -e
#/backup
#должна быть папка:
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 10 beta
sudo pg_createcluster --locale ru_RU.UTF-8 10 beta -- --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/beta/*"
sudo -u postgres pg_probackup-10 restore -B /backup --instance main -D \
/var/lib/postgresql/10/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 10 beta start
#fi
sudo systemctl stop srv1cv83.service
sudo rm -rf /home/usr1cv8/.1cv8
sudo systemctl start srv1cv83
sudo systemctl restart srv1cv8-ras.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=\"'u1804';Ref=$DB_NAME;\
DBMS='PostgreSQL';DBSrvr='u1804 port=5433';DB=$DB_NAME;DBUID='postgres';DBPwd='pass';\
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'u1804\'$DB_NAME /N'ЛяшоваЛП'\
/P'12345' /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 srv1cv8-ras.service
sudo systemctl stop srv1cv83
sudo pg_ctlcluster 10 beta stop
#============================================
Работа с конфигуратором по протоколу SSH (не в режиме агента)
xvfb-run • help
$ sudo dpkg -i 1c-enterprise83-client_8.3.15-1565_amd64.deb
$ sudo apt install -f
$ sudo apt-get install xvfb dbus-x11
$ nano test.sh
#!/bin/sh
/opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"Григорьянц А.А. (системный администратор)" \
/P"12345" /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
или
#!/bin/sh
/opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"ЛяшоваЛП" \
/P"12345" /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
#!/bin/sh
/opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"ЛяшоваЛП" \
/P"12345" /DumpIB /home/user/demo.dt
# /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
$ chmod +x test.sh
$ time xvfb-run ~/test.sh
или
$ time xvfb-run /opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"ЛяшоваЛП" /P"12345" /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
$ time xvfb-run /opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo" /N"ЛяшоваЛП" /P"12345" /DumpIB /home/user/demo.dt /Out"/home/user/log.txt"
===================================================================
$ time sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres pg_probackup-10 show -B /backup
PZVGGS
$ pg_lsclusters
$ sudo pg_dropcluster --stop 10 beta
$ sudo pg_createcluster --locale ru_RU.UTF-8 10 beta -- --data-checksums
Creating new cluster 10/beta ...
config /etc/postgresql/10/beta
data /var/lib/postgresql/10/beta
locale ru_RU.UTF-8
socket /var/run/postgresql
port 5433
Удалим данные кластера beta
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/beta/*"
Для восстановления базы demo5 добавляем восстановление базы postgres (для простоты подключения)
$ time sudo -u postgres pg_probackup-10 restore -B /backup --instance main -D /var/lib/postgresql/10/beta -i PZVGGS -j4
$ sudo pg_ctlcluster 10 beta start
$ sudo sudo systemctl status postgresql@10-beta.service
$ sudo systemctl stop srv1cv83.service
$ sudo rm -rf /home/usr1cv8/.1cv8
$ sudo systemctl start srv1cv83
$ sudo systemctl restart srv1cv8-ras.service
$ time xvfb-run /opt/1C/v8.3/x86_64/./1cv8 CREATEINFOBASE Srvr='"u1804";Ref="demo_beta";DBMS="PostgreSQL";DBSrvr="u1804 port=5433";DB="demo";DBUID="postgres";DBPwd="pass";CrSQLDB="Y";SchJobDn="Y";' /Out "/home/user/log.txt"
$ cat /home/user/log.txt >> /home/user/log.log
$ rm -rf /home/user/log.txt
$ time xvfb-run /opt/1C/v8.3/x86_64/./1cv8 DESIGNER /S"u1804\demo_beta" /N"ЛяшоваЛП" /P"12345" /IBcheckAndRepair -LogAndRefsIntegrity /Out"/home/user/log.txt"
$ cat /home/user/log.txt >> /home/user/log.log
$ sudo nano /root/test1c_all.sh
#!/bin/sh -e
#/backup
#должна быть папка:
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 10 beta
sudo pg_createcluster --locale ru_RU.UTF-8 10 beta -- --data-checksums
sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/beta/*"
sudo -u postgres pg_probackup-10 restore -B /backup --instance main -D \
/var/lib/postgresql/10/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 10 beta start
#fi
sudo systemctl stop srv1cv83.service
sudo rm -rf /home/usr1cv8/.1cv8
sudo systemctl start srv1cv83
sudo systemctl restart srv1cv8-ras.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=\"'u1804';Ref=$DB_NAME;\
DBMS='PostgreSQL';DBSrvr='u1804 port=5433';DB=$DB_NAME;DBUID='postgres';DBPwd='pass';\
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'u1804\'$DB_NAME /N'ЛяшоваЛП'\
/P'12345' /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 srv1cv8-ras.service
sudo systemctl stop srv1cv83
sudo pg_ctlcluster 10 beta stop
#============================================
вторник, 22 октября 2019 г.
Восстановление pg_probackup на другом компьютере
$ sudo pg_dropcluster --stop 10 main
$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main -- --data-checksums
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"
$ time sudo -u postgres pg_probackup-10 restore -B /backup --instance main -D /var/lib/postgresql/10/main -i PZRLHZ -j4
$ sudo pg_ctlcluster 10 main start
$ sudo apt install postgresql-10-amcheck
Для каждой базы:
postgres=# CREATE EXTENSION amcheck;
или
postgres=# CREATE EXTENSION amcheck_next;
Grigory Smolkin: для PG =<10 рекомендую ( Grigory Smolkin) использовать amcheck_next
Для каждой базы, например demo:
$ sudo -u postgres psql -c "\l"
user@u1804:~$ sudo -u postgres psql -d Cis_Bgu -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Cis_Zik -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Cis_Zik_Old -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Sobr_Bgu -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Sobr_Bgu_1941 -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Sobr_Zik -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Sobr_Zik_1941 -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d demo -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d obraz_bgu1 -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
$ sudo -u postgres psql -d template1 -c "DROP EXTENSION amcheck_next"
DROP EXTENSION
$ sudo nano /root/amcheck_next.sh
#!/bin/sh -e
DB_BASE=`sudo /bin/su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'| \
cut -d'|' -f1 | /bin/grep -v template"`
echo $DB_BASE
for DB_NAME in $DB_BASE
do
#echo $DB_NAME
sudo /bin/su postgres -c "/usr/bin/psql -c 'CREATE EXTENSION IF NOT EXISTS amcheck_next'\
-d $DB_NAME"
done
$ time sudo -u postgres pg_probackup-10 checkdb -B /backup --instance main --amcheck
ERROR: Some databases were not amchecked.
user@u1804:~$ sudo -u postgres psql -d postgres -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
$ time sudo -u postgres pg_probackup-10 checkdb -B /backup --instance main --amcheck
INFO: All databases were amchecked.
$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main -- --data-checksums
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"
$ time sudo -u postgres pg_probackup-10 restore -B /backup --instance main -D /var/lib/postgresql/10/main -i PZRLHZ -j4
$ sudo pg_ctlcluster 10 main start
$ sudo apt install postgresql-10-amcheck
Для каждой базы:
postgres=# CREATE EXTENSION amcheck;
или
postgres=# CREATE EXTENSION amcheck_next;
Grigory Smolkin: для PG =<10 рекомендую ( Grigory Smolkin) использовать amcheck_next
Для каждой базы, например demo:
$ sudo -u postgres psql -c "\l"
user@u1804:~$ sudo -u postgres psql -d Cis_Bgu -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Cis_Zik -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Cis_Zik_Old -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Sobr_Bgu -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Sobr_Bgu_1941 -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Sobr_Zik -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d Sobr_Zik_1941 -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d demo -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
user@u1804:~$ sudo -u postgres psql -d obraz_bgu1 -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
$ sudo -u postgres psql -d template1 -c "DROP EXTENSION amcheck_next"
DROP EXTENSION
$ sudo nano /root/amcheck_next.sh
#!/bin/sh -e
DB_BASE=`sudo /bin/su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'| \
cut -d'|' -f1 | /bin/grep -v template"`
echo $DB_BASE
for DB_NAME in $DB_BASE
do
#echo $DB_NAME
sudo /bin/su postgres -c "/usr/bin/psql -c 'CREATE EXTENSION IF NOT EXISTS amcheck_next'\
-d $DB_NAME"
done
$ time sudo -u postgres pg_probackup-10 checkdb -B /backup --instance main --amcheck
ERROR: Some databases were not amchecked.
user@u1804:~$ sudo -u postgres psql -d postgres -c "CREATE EXTENSION amcheck_next"
CREATE EXTENSION
$ time sudo -u postgres pg_probackup-10 checkdb -B /backup --instance main --amcheck
INFO: All databases were amchecked.
воскресенье, 20 октября 2019 г.
Настройка systemd для запуска PostgreSQL 10 от 1С
Настройка systemd для запуска PostgreSQL от 1С
$ 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_ctlcluster 10 main stop
$ sudo su - postgres
$ /usr/lib/postgresql/10/bin/initdb --locale=ru_RU.utf8 /var/lib/postgresql/10/data
$ exit
$ sudo nano /etc/systemd/system/postgres.service
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres
Environment=PGROOT=/var/lib/postgresql/10
SyslogIdentifier=postgres
PIDFile=${PGROOT}/data/postmaster.pid
RuntimeDirectory=postgresql
RuntimeDirectoryMode=755
ExecStartPre= /usr/lib/postgresql/10/bin/pg_controldata ${PGROOT}/data
ExecStart= /usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop= /usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast
# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200
# Additional security-related features
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
Сохранить.
$ sudo systemctl start postgres.service
После проверики
Удалить кластер main (займет порт 5432) Удалит с Вашими данными!!!
$ sudo pg_dropcluster --stop 10 main
$ sudo systemctl enable postgres.service
Команды:
$ sudo systemctl daemon-reload # запускать после изменений файла
$ sudo systemctl start postgres.service
$ sudo systemctl stop postgres.service
$ sudo systemctl restart postgres.service
$ sudo systemctl status postgres.service
$ 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_ctlcluster 10 main stop
$ sudo su - postgres
$ /usr/lib/postgresql/10/bin/initdb --locale=ru_RU.utf8 /var/lib/postgresql/10/data
$ exit
$ sudo nano /etc/systemd/system/postgres.service
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres
Environment=PGROOT=/var/lib/postgresql/10
SyslogIdentifier=postgres
PIDFile=${PGROOT}/data/postmaster.pid
RuntimeDirectory=postgresql
RuntimeDirectoryMode=755
ExecStartPre= /usr/lib/postgresql/10/bin/pg_controldata ${PGROOT}/data
ExecStart= /usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop= /usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast
# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200
# Additional security-related features
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
Сохранить.
$ sudo systemctl start postgres.service
После проверики
Удалить кластер main (займет порт 5432) Удалит с Вашими данными!!!
$ sudo pg_dropcluster --stop 10 main
$ sudo systemctl enable postgres.service
Команды:
$ sudo systemctl daemon-reload # запускать после изменений файла
$ sudo systemctl start postgres.service
$ sudo systemctl stop postgres.service
$ sudo systemctl restart postgres.service
$ sudo systemctl status postgres.service
суббота, 19 октября 2019 г.
Как проверить архивирование
postgres=# select * from pg_stat_archiver;
$ sudo -u postgres psql -c " select * from pg_stat_archiver;"
$ sudo -u postgres psql -c " select last_archived_time, stats_reset from pg_stat_archiver;" \
| mutt -s "archived_time" root
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "sudo -u postgres psql -c \"select last_archived_time, stats_reset from pg_stat_archiver;\""\
>> sysinfo.txt
echo "-------------------------------+-------------------------------" >> sysinfo.txt
sudo -u postgres psql -c "select last_archived_time, stats_reset from pg_stat_archiver;" \
>> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
$ sudo -u postgres psql -c " select * from pg_stat_archiver;"
$ sudo -u postgres psql -c " select last_archived_time, stats_reset from pg_stat_archiver;" \
| mutt -s "archived_time" root
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "sudo -u postgres psql -c \"select last_archived_time, stats_reset from pg_stat_archiver;\""\
>> sysinfo.txt
echo "-------------------------------+-------------------------------" >> sysinfo.txt
sudo -u postgres psql -c "select last_archived_time, stats_reset from pg_stat_archiver;" \
>> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
среда, 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
Резервное копирование системы
Сделаем холодный 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
Upgrade pg_probackup
$ sudo dpkg --get-selections | grep hold
libicu55:amd64 hold
libpq5:amd64 hold
pg-probackup-10 hold
postgresql-10 hold
postgresql-client-10 hold
postgresql-client-common hold
postgresql-common hold
$ sudo apt-mark unhold pg-probackup-10
Отмена фиксации для pg-probackup-10.
$ sudo apt update
$ sudo -u postgres pg_probackup-10 version
pg_probackup-10 2.2.3 (PostgreSQL 10.10)
$ sudo -u postgres pg_probackup-10 show -B /backup
$ sudo -u postgres pg_probackup-10 validate -B /backup
$ time sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres pg_probackup-10 show -B /backup
$ sudo -u postgres pg_probackup-10 validate -B /backup
.
libicu55:amd64 hold
libpq5:amd64 hold
pg-probackup-10 hold
postgresql-10 hold
postgresql-client-10 hold
postgresql-client-common hold
postgresql-common hold
$ sudo apt-mark unhold pg-probackup-10
Отмена фиксации для pg-probackup-10.
$ sudo apt update
$ sudo -u postgres pg_probackup-10 version
pg_probackup-10 2.2.3 (PostgreSQL 10.10)
$ sudo -u postgres pg_probackup-10 show -B /backup
$ sudo -u postgres pg_probackup-10 validate -B /backup
$ time sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired -j4
$ sudo -u postgres pg_probackup-10 show -B /backup
$ sudo -u postgres pg_probackup-10 validate -B /backup
.
вторник, 15 октября 2019 г.
LVM HOWTO
LVM HOWTO
Setup Flexible Disk Storage with Logical Volume Management (LVM) in Linux – PART 1
How to Extend/Reduce LVM’s (Logical Volume Management) in Linux – Part II
How to Take ‘Snapshot of Logical Volume and Restore’ in LVM – Part III
Создание lvm snapshot и восстановление из него
13.4. Taking a Backup Using Snapshots
Создание lvm снапшота и восстановление из него.
Стенд pg 9.6.15 pg_probackup
$ sudo su postgres -c "createdb --username postgres -T template0 demo"
$ time sudo su postgres -c "pg_restore -d demo -j 4 /home/user/demo.dump"
$ df -h
$ sudo pg_ctlcluster 9.6 main stop
$ sudo lvs
$ sudo lvcreate --size 500G --snapshot --name lv_snap /dev/vg/lv
$ sudo pg_ctlcluster 9.6 main start
$ sudo lvs
$ sudo mkdir /lv_snap
$ sudo lvscan
ACTIVE Original '/dev/vg/lv' [953,67 GiB] inherit
ACTIVE Snapshot '/dev/vg/lv_snap' [500,00 GiB] inherit
$ sudo mount /dev/vg/lv_snap /lv_snap
$ sudo mkdir -p /backup/main
$ sudo chown -R postgres:postgres /backup/main
$ sudo su postgres -c "cd /lv_snap/9.6/main ; cp -r * /backup/main"
$ sudo umount /lv_snap
$ sudo lvremove /dev/vg/lv_snap
Do you really want to remove and DISCARD active logical volume vg/lv_snap? [y/n]: y
Logical volume "lv_snap" successfully removed
Setup Flexible Disk Storage with Logical Volume Management (LVM) in Linux – PART 1
How to Extend/Reduce LVM’s (Logical Volume Management) in Linux – Part II
How to Take ‘Snapshot of Logical Volume and Restore’ in LVM – Part III
Создание lvm snapshot и восстановление из него
13.4. Taking a Backup Using Snapshots
Создание lvm снапшота и восстановление из него.
Стенд pg 9.6.15 pg_probackup
$ sudo su postgres -c "createdb --username postgres -T template0 demo"
$ time sudo su postgres -c "pg_restore -d demo -j 4 /home/user/demo.dump"
$ df -h
$ sudo pg_ctlcluster 9.6 main stop
$ sudo lvs
$ sudo lvcreate --size 500G --snapshot --name lv_snap /dev/vg/lv
$ sudo pg_ctlcluster 9.6 main start
$ sudo lvs
$ sudo mkdir /lv_snap
$ sudo lvscan
ACTIVE Original '/dev/vg/lv' [953,67 GiB] inherit
ACTIVE Snapshot '/dev/vg/lv_snap' [500,00 GiB] inherit
$ sudo mount /dev/vg/lv_snap /lv_snap
$ sudo mkdir -p /backup/main
$ sudo chown -R postgres:postgres /backup/main
$ sudo su postgres -c "cd /lv_snap/9.6/main ; cp -r * /backup/main"
$ sudo umount /lv_snap
$ sudo lvremove /dev/vg/lv_snap
Do you really want to remove and DISCARD active logical volume vg/lv_snap? [y/n]: y
Logical volume "lv_snap" successfully removed