Продолжение, начало:
Тестовый сервер test2 базовая настройка
В папку /test положить файлы:
postgresql_10.5_24.1C_amd64_deb.tar.bz2
postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2
$ 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/ xenial-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
$ sudo apt update -y
$ sudo apt-get install postgresql-common libtcl8.6 -y
$ dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pgdg-keyring помечен как зафиксированный.
#postgresql-client-common помечен как зафиксированный.
#postgresql-common помечен как зафиксированный.
$ dpkg -l | grep libtcl8.6 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libtcl8.6 помечен как зафиксированный.
$ mkdir -p /tmp/post
$ cp /home/user/test/postgresql_10.5_24.1C_amd64_deb.tar.bz2 /tmp/post/
$ cp /home/user/test/postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2 /tmp/post/
$ cd /tmp/post
$ tar -xvf postgresql_10.5_24.1C_amd64_deb.tar.bz2
$ cd postgresql-10.5-24.1C_amd64_deb
$ ls
# список файлов:
#libpq5_10.5-24.1C_amd64.deb postgresql-10_10.5-24.1C_amd64.deb postgresql-client-10_10.5-24.1C_amd64.deb
$ sudo dpkg -i *.deb
# ниже можно не ставить:
$ cd /tmp/post/
$ tar -xvf postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2
$ cd postgresql-10.5-24.1C_amd64_addon_deb
$ sudo dpkg -i *.deb
# конец не ставить
$ dpkg -l | grep 10.5-24.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libecpg-compat3 помечен как зафиксированный.
#libecpg-dev помечен как зафиксированный.
#libecpg6 помечен как зафиксированный.
#libpgtypes3 помечен как зафиксированный.
#libpq-dev помечен как зафиксированный.
#libpq5 помечен как зафиксированный.
#postgresql-10 помечен как зафиксированный.
#postgresql-10-dbg помечен как зафиксированный.
#postgresql-client-10 помечен как зафиксированный.
#postgresql-doc-10 помечен как зафиксированный.
#postgresql-plperl-10 помечен как зафиксированный.
#postgresql-plpython-10 помечен как зафиксированный.
#postgresql-plpython3-10 помечен как зафиксированный.
#postgresql-pltcl-10 помечен как зафиксированный.
#postgresql-server-dev-10 помечен как зафиксированный.
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log
$ sudo pg_dropcluster --stop 10 main
$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main -- --data-checksums
$ sudo pg_ctlcluster 10 main start
$ 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 -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak
#Делаем проверки
$ 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 4914 0.0 0.1 320972 28864 ? S 08:37 0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf
-------------------------------------------------------------------------------------------------------
Добавить в конец:
# DB Version: 10
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd
max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 8GB # 4GB for 1c
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB
default_statistics_target = 100
effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
lc_messages='C'
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'
Сохранить.
$ sudo systemctl restart postgresql.service
-------------------------------------------------------------------------------------------------------
Установка 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-10
$ dpkg -l | grep pg-probackup-10 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pg-probackup-10 помечен как зафиксированный.
Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo mkdir /backup/pg_probackup
$ sudo mkdir /backup/pg_probackup/copy
$ sudo mkdir /backup/pg_probackup/log
$ sudo chown -R postgres:postgres /backup/
#$ sudo chmod -R 777 /backup/pg_probackup
$ sudo -u postgres pg_probackup-10 init -B /backup/pg_probackup
Определение копируемого экземпляра
$ sudo -u postgres pg_probackup-10 add-instance -B /backup/pg_probackup -D /var/lib/postgresql/10/main --instance main
$ sudo nano /etc/postgresql/10/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-10 archive-push -B /backup/pg_probackup --compress --instance main --wal-file-path %p --wal-file-name %f'
Сохранить.
$ sudo systemctl restart postgresql.service
Добавить:
retention-redundancy=5
Сохранить
$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --delete-wal --expired
$ sudo -u postgres pg_probackup-10 show -B /backup/pg_probackup
Проверка backup:
Проверка файлов:
$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main
INFO: Start checking data files
INFO: Data files are valid
Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup
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
-------------------------------------------------------------------------------
Скрипт резервного копирования
Проверка авторизации по паролю
$ PGPASSWORD=pass psql -U postgres -h 127.0.0.1 postgres
$ sudo nano /root/fullbackup.sh
#!/bin/sh -e
#
email=f1@vu.com
#sudo sh /root/terminate.sh
# vacuumdb
#sudo systemctl stop srv1cv83.service
sudo -u postgres vacuumdb -afz > vacuumdb.txt
#sudo systemctl start srv1cv83.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
echo "vacuumdb неудачное завершение" | mutt -s 'vacuumdb '$DATA' - неудачное завершение' $email -a vacuumdb.txt
else
echo "vacuumdb удачное завершение" | mutt -s 'vacuumdb '$DATA' - удачное завершение' $email -a vacuumdb.txt
fi
# /backup/pg_probackup
inst='/backup/pg_probackup'
log=$inst'/log/pg_probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst
PGPASSWORD=password pg_probackup-10 backup -B $inst --instance main -U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal --log-level-file=info
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
msg="$inst неудачное завершение."
else
msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
msg1="Размер экземпляра pg_probackup: $(du -h -s $inst)"
echo "$msg $msg1" | mutt -s "$msg $DATA" $email -a $log
# Сразу архивируем для rsync
COPY_DIR=$inst/copy
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
#rm $inst/copy/*
tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz \
$inst/backups/main/$COPY_ID > /dev/null 2>&1
if [ $? = 0 ]
then
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
else
msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
fi
echo $msg | mutt -s "$msg" $email -a $log
fi
Проверка:
Сохранить.
$ sudo crontab -e
*/5 * * * * sh /root/fullbackup.sh
Сохранить.
Дополнительная информация:
-------------------------------------------------------------------------------------------------------
Настраиваем после установки баз 1С
petergeoghegan/amcheck
$ 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 -d postgres -c "CREATE EXTENSION amcheck_next"
$ sudo -u postgres psql -d demo -c "CREATE EXTENSION amcheck_next"
$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main --amcheck
INFO: Start checking data files
INFO: Data files are valid
INFO: Start amchecking PostgreSQL instance
INFO: Amchecking database 'postgres' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Amchecking database 'demo' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Checkdb --amcheck executed successfully
INFO: Indexes are valid
опция --heapallindexed, с ней amcheck проверяет, что хип, который должен быть проиндексирован, действительно проиндексирован
$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main --amcheck --heapallindexed
INFO: Start checking data files
INFO: Data files are valid
INFO: Start amchecking PostgreSQL instance
INFO: Amchecking database 'postgres' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Amchecking database 'demo' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Checkdb --amcheck executed successfully
INFO: Indexes are valid
-------------------------------------------------------------------------------------------------------
Сделали копию:
$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --expired
Перед восстановлением
Просмотр:
$ sudo -u postgres pg_probackup-10 show -B
Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup/backup1
INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
Можно восстанавливать.
Останавливаем 1с
$ sudo systemctl stop srv1cv83.service
Останавливаем postgresql
$ sudo systemctl stop postgresql.service
Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"
Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup/backup1 --instance main -i PRP29I
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
INFO: Backup PRP29I is valid.
INFO: Restore of backup PRP29I completed.
Запускаем postgresql
$ sudo systemctl start postgresql.service
Запускаем 1с
$ sudo systemctl start srv1cv83.service
$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --delete-wal --expired
$ sudo -u postgres pg_probackup-10 show -B /backup/pg_probackup
Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup
INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
Можно восстанавливать, но проверим непрерывность архивирования:
Войти в 1с создать документ, провести, выйти из 1с.
$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup --instance main -i PRP6Q5 --time='2042-04-16 12:26:00'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
WARNING: Thread [1]: Could not read WAL record at 1/88000000
ERROR: Thread [1]: WAL segment "/backupwal/wal/main/000000010000000100000088" is absent
WARNING: Recovery can be done up to time 2019-05-18 14:36:30+03, xid 0 and LSN 1/2A000198
ERROR: Not enough WAL records to time 2042-04-16 12:26:00+03
Останавливаем 1с
$ sudo systemctl stop srv1cv83.service
Останавливаем postgresql
$ sudo systemctl stop postgresql.service
Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"
Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup/pg_probackup --instance main -i PRP6Q5 --recovery-target='latest'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
INFO: Backup PRP6Q5 is valid.
INFO: Restore of backup PRP6Q5 completed.
Запускаем postgresql
$ sudo systemctl start postgresql.service
Запускаем 1с
$ sudo systemctl start srv1cv83.service
-------------------------------------------------------------------------------------------------------
Примечание 1
wal архивация сразу не заработала, проблема в pg_probackup 2.1.1
странное сообщение в логах - could not find a "pg_probackup" to execute #39
#archive_command = 'pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path %p --wal-file-name %f'
нужно указать полный путь к pg_probackup-10:
archive_command = '/usr/bin/pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path %p --wal-file-name %f'
В логе было:
2019-05-18 12:27:24 MSK [20683]: [68-1] user=,db=,client= LOG: archive command failed with exit code 1
2019-05-18 12:27:24 MSK [20683]: [69-1] user=,db=,client= DETAIL: The failed archive command was: pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path pg_wal/0000000100000000000000F1 --wal-file-name 0000000100000000000000F1
2019-05-18 12:27:24 MSK [20683]: [70-1] user=,db=,client= WARNING: archiving write-ahead log file "0000000100000000000000F1" failed too many times, will try again later
could not find a "pg_probackup-10" to execute
pg_probackup-10: could not find own program executable
Для проверки стандартной wal архивации:
$ sudo mkdir -p /wal
$ sudo chown -R postgres:postgres /wal
$ sudo nano /etc/postgresql/10/main/postgresql.conf
расскоментировать:
archive_command ='test ! -f /wal/%f && cp %p /wal/%f'
Сохранить.
$ sudo systemctl restart postgresql.service
-------------------------------------------------------------------------------------------------------
Тестовый сервер test2 базовая настройка
Установка СУБД PostgreSQL версия 10.5-24.1C
$ mkdir /home/user/testВ папку /test положить файлы:
postgresql_10.5_24.1C_amd64_deb.tar.bz2
postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2
$ 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/ xenial-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
$ sudo apt update -y
$ sudo apt-get install postgresql-common libtcl8.6 -y
$ dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pgdg-keyring помечен как зафиксированный.
#postgresql-client-common помечен как зафиксированный.
#postgresql-common помечен как зафиксированный.
$ dpkg -l | grep libtcl8.6 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libtcl8.6 помечен как зафиксированный.
$ mkdir -p /tmp/post
$ cp /home/user/test/postgresql_10.5_24.1C_amd64_deb.tar.bz2 /tmp/post/
$ cp /home/user/test/postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2 /tmp/post/
$ cd /tmp/post
$ tar -xvf postgresql_10.5_24.1C_amd64_deb.tar.bz2
$ cd postgresql-10.5-24.1C_amd64_deb
$ ls
# список файлов:
#libpq5_10.5-24.1C_amd64.deb postgresql-10_10.5-24.1C_amd64.deb postgresql-client-10_10.5-24.1C_amd64.deb
$ sudo dpkg -i *.deb
# ниже можно не ставить:
$ cd /tmp/post/
$ tar -xvf postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2
$ cd postgresql-10.5-24.1C_amd64_addon_deb
$ sudo dpkg -i *.deb
# конец не ставить
$ dpkg -l | grep 10.5-24.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libecpg-compat3 помечен как зафиксированный.
#libecpg-dev помечен как зафиксированный.
#libecpg6 помечен как зафиксированный.
#libpgtypes3 помечен как зафиксированный.
#libpq-dev помечен как зафиксированный.
#libpq5 помечен как зафиксированный.
#postgresql-10 помечен как зафиксированный.
#postgresql-10-dbg помечен как зафиксированный.
#postgresql-client-10 помечен как зафиксированный.
#postgresql-doc-10 помечен как зафиксированный.
#postgresql-plperl-10 помечен как зафиксированный.
#postgresql-plpython-10 помечен как зафиксированный.
#postgresql-plpython3-10 помечен как зафиксированный.
#postgresql-pltcl-10 помечен как зафиксированный.
#postgresql-server-dev-10 помечен как зафиксированный.
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log
$ sudo pg_dropcluster --stop 10 main
$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main -- --data-checksums
$ sudo pg_ctlcluster 10 main start
$ 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 -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak
#Делаем проверки
$ 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 4914 0.0 0.1 320972 28864 ? S 08:37 0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf
-------------------------------------------------------------------------------------------------------
Настройка postgresql.conf для 1С Total Memory (RAM): 16 GB
sudo nano /etc/postgresql/10/main/postgresql.confДобавить в конец:
# DB Version: 10
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd
max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 8GB # 4GB for 1c
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB
default_statistics_target = 100
effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
lc_messages='C'
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'
Сохранить.
$ sudo systemctl restart postgresql.service
-------------------------------------------------------------------------------------------------------
Установка 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-10
$ dpkg -l | grep pg-probackup-10 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pg-probackup-10 помечен как зафиксированный.
Инициализация каталога резервных копий 1 экземпляр на примонтированом HDD
Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo mkdir /backup/pg_probackup
$ sudo mkdir /backup/pg_probackup/copy
$ sudo mkdir /backup/pg_probackup/log
$ sudo chown -R postgres:postgres /backup/
#$ sudo chmod -R 777 /backup/pg_probackup
$ sudo -u postgres pg_probackup-10 init -B /backup/pg_probackup
Определение копируемого экземпляра
$ sudo -u postgres pg_probackup-10 add-instance -B /backup/pg_probackup -D /var/lib/postgresql/10/main --instance main
$ sudo nano /etc/postgresql/10/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-10 archive-push -B /backup/pg_probackup --compress --instance main --wal-file-path %p --wal-file-name %f'
Сохранить.
$ sudo systemctl restart postgresql.service
Настройка политики сохранения 5 резервных копий
$ sudo -u postgres nano /backup/pg_probackup/backups/main/pg_probackup.confДобавить:
retention-redundancy=5
Сохранить
Создание полной автономной резервной копии:
$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --delete-wal --expired
Просмотр: $ sudo -u postgres pg_probackup-10 show -B /backup/pg_probackup
Проверка backup:
Проверка файлов:
$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main
INFO: Start checking data files
INFO: Data files are valid
Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup
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
-------------------------------------------------------------------------------
Скрипт резервного копирования
Проверка авторизации по паролю
$ PGPASSWORD=pass psql -U postgres -h 127.0.0.1 postgres
$ sudo nano /root/fullbackup.sh
#!/bin/sh -e
#
email=f1@vu.com
#sudo sh /root/terminate.sh
# vacuumdb
#sudo systemctl stop srv1cv83.service
sudo -u postgres vacuumdb -afz > vacuumdb.txt
#sudo systemctl start srv1cv83.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
echo "vacuumdb неудачное завершение" | mutt -s 'vacuumdb '$DATA' - неудачное завершение' $email -a vacuumdb.txt
else
echo "vacuumdb удачное завершение" | mutt -s 'vacuumdb '$DATA' - удачное завершение' $email -a vacuumdb.txt
fi
# /backup/pg_probackup
inst='/backup/pg_probackup'
log=$inst'/log/pg_probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst
PGPASSWORD=password pg_probackup-10 backup -B $inst --instance main -U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal --log-level-file=info
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
msg="$inst неудачное завершение."
else
msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
msg1="Размер экземпляра pg_probackup: $(du -h -s $inst)"
echo "$msg $msg1" | mutt -s "$msg $DATA" $email -a $log
# Сразу архивируем для rsync
COPY_DIR=$inst/copy
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
#rm $inst/copy/*
tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz \
$inst/backups/main/$COPY_ID > /dev/null 2>&1
if [ $? = 0 ]
then
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
else
msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
fi
echo $msg | mutt -s "$msg" $email -a $log
fi
Проверка:
Сохранить.
$ sudo crontab -e
*/5 * * * * sh /root/fullbackup.sh
Сохранить.
Дополнительная информация:
-------------------------------------------------------------------------------------------------------
Настраиваем после установки баз 1С
petergeoghegan/amcheck
$ 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 -d postgres -c "CREATE EXTENSION amcheck_next"
$ sudo -u postgres psql -d demo -c "CREATE EXTENSION amcheck_next"
$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main --amcheck
INFO: Start checking data files
INFO: Data files are valid
INFO: Start amchecking PostgreSQL instance
INFO: Amchecking database 'postgres' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Amchecking database 'demo' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Checkdb --amcheck executed successfully
INFO: Indexes are valid
опция --heapallindexed, с ней amcheck проверяет, что хип, который должен быть проиндексирован, действительно проиндексирован
$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main --amcheck --heapallindexed
INFO: Start checking data files
INFO: Data files are valid
INFO: Start amchecking PostgreSQL instance
INFO: Amchecking database 'postgres' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Amchecking database 'demo' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Checkdb --amcheck executed successfully
INFO: Indexes are valid
-------------------------------------------------------------------------------------------------------
Пример восстановления из полной автономной резервной копии (замена кластера на резервную копию)
Сделали копию:
$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --expired
Перед восстановлением
Просмотр:
$ sudo -u postgres pg_probackup-10 show -B
Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup/backup1
INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
Можно восстанавливать.
Останавливаем 1с
$ sudo systemctl stop srv1cv83.service
Останавливаем postgresql
$ sudo systemctl stop postgresql.service
Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"
Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup/backup1 --instance main -i PRP29I
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
INFO: Backup PRP29I is valid.
INFO: Restore of backup PRP29I completed.
Запускаем postgresql
$ sudo systemctl start postgresql.service
Запускаем 1с
$ sudo systemctl start srv1cv83.service
-------------------------------------------------------------------------------------------------------
Пример восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)
$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --delete-wal --expired
Просмотр: $ sudo -u postgres pg_probackup-10 show -B /backup/pg_probackup
Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup
INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
Можно восстанавливать, но проверим непрерывность архивирования:
Войти в 1с создать документ, провести, выйти из 1с.
$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup --instance main -i PRP6Q5 --time='2042-04-16 12:26:00'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
WARNING: Thread [1]: Could not read WAL record at 1/88000000
ERROR: Thread [1]: WAL segment "/backupwal/wal/main/000000010000000100000088" is absent
WARNING: Recovery can be done up to time 2019-05-18 14:36:30+03, xid 0 and LSN 1/2A000198
ERROR: Not enough WAL records to time 2042-04-16 12:26:00+03
Останавливаем 1с
$ sudo systemctl stop srv1cv83.service
Останавливаем postgresql
$ sudo systemctl stop postgresql.service
Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"
Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup/pg_probackup --instance main -i PRP6Q5 --recovery-target='latest'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
INFO: Backup PRP6Q5 is valid.
INFO: Restore of backup PRP6Q5 completed.
Запускаем postgresql
$ sudo systemctl start postgresql.service
Запускаем 1с
$ sudo systemctl start srv1cv83.service
-------------------------------------------------------------------------------------------------------
Примечание 1
wal архивация сразу не заработала, проблема в pg_probackup 2.1.1
странное сообщение в логах - could not find a "pg_probackup" to execute #39
#archive_command = 'pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path %p --wal-file-name %f'
нужно указать полный путь к pg_probackup-10:
archive_command = '/usr/bin/pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path %p --wal-file-name %f'
В логе было:
2019-05-18 12:27:24 MSK [20683]: [68-1] user=,db=,client= LOG: archive command failed with exit code 1
2019-05-18 12:27:24 MSK [20683]: [69-1] user=,db=,client= DETAIL: The failed archive command was: pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path pg_wal/0000000100000000000000F1 --wal-file-name 0000000100000000000000F1
2019-05-18 12:27:24 MSK [20683]: [70-1] user=,db=,client= WARNING: archiving write-ahead log file "0000000100000000000000F1" failed too many times, will try again later
could not find a "pg_probackup-10" to execute
pg_probackup-10: could not find own program executable
Для проверки стандартной wal архивации:
$ sudo mkdir -p /wal
$ sudo chown -R postgres:postgres /wal
$ sudo nano /etc/postgresql/10/main/postgresql.conf
расскоментировать:
archive_command ='test ! -f /wal/%f && cp %p /wal/%f'
Сохранить.
$ sudo systemctl restart postgresql.service
-------------------------------------------------------------------------------------------------------
Комментариев нет:
Отправить комментарий