понедельник, 20 августа 2018 г.

Бэкап и восстановление базы 1С в бд postgresql, обслуживание базы, чистка логов PostgreSQL

Бэкап и восстановление базы 1С в бд postgresql, обслуживание базы
Опыт обслуживания базы 1С в PostgreSQL
Резервное копирование баз данных PostgreSQL
24.1. Дамп SQL

Может возникнуть ситуация при которой файл .dt будет выгружаться средствами 1с,
но при обратной загрузке или загрузке в файловую базу, загружаться не будет (при ошибках в базе).
Файл .dt может считаться бэкапом только при условии проверки загрузки!
Поэтому необходимо организовать бэкап средствами базы данных.
/home/user/test/ - папка с доступом по ftp (test test) (ранее подготовлена)

Подготовка:
$ sudo mkdir /home/user/test/backup
$ sudo chmod -R 777 /home/user/test/backup
$ sudo apt-get -y install pigz


Бэкап с архивированием:
$ sudo su - postgres
$ pg_dump demo | pigz > /home/user/test/backup/demo.sql.gz

Разархивирование с сохранением архива
$ sudo su - postgres
$ unpigz -c /home/user/test/backup/demo.sql.gz > /home/user/test/backup/demo.sql


Создадим базу demotest (если еще не создана)
$ sudo su - postgres
$ createdb --username postgres -T template0 demotest

Восстановим в базу demotest:
$ psql -l
$ unpigz -c /home/user/test/backup/demo.sql.gz > /home/user/test/backup/demo.sql
$ psql demotest < /home/user/test/backup/demo.sql

Подключимся к базе средствами 1С:



Базу demotest можно оставить для регулярного тестирования бэкапов.

Убьем базу demotest:
sudo su - postgres
$ dropdb demotest
$ psql -l

-----------------------------------------------------------------------------------------------------------------
Для автоматического создания бекапов:
Зададим папку, если не делали раньше,
см. начало статьи!

Папка с бэкапами будет доступна по ftp (test test)
Подготовка:
$ sudo mkdir /home/user/test/backup
$ sudo chmod -R 777 /home/user/test/backup
$ sudo apt-get -y install pigz
$ sudo su - postgres
$ nano /home/user/test/backup/backup-sql.sh

Вставить:

#!/bin/sh
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
echo "`date +"%Y-%m-%d_%H-%M-%S"` Size database file: " >> /home/user/test/backup/backup.log
du -h -s /var/lib/postgresql/9.6/main/base  >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup demo" >> /home/user/test/backup/backup.log

# Бэкапим базу данных demo и сразу сжимаем
/usr/bin/pg_dump demo | pigz > /home/user/test/backup/$DATA-demo.sql.gz

echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup demo" >> /home/user/test/backup/backup.log

sleep 2

echo "-------------------------------------------" >> /home/user/test/backup/backup.log

# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start vacuumdb demo" >> /home/user/test/backup/backup.log

vacuumdb --verbose --analyze --full --quiet --dbname=demo

echo "`date +"%Y-%m-%d_%H-%M-%S"` End vacuumdb demo" >> /home/user/test/backup/backup.log

echo "-------------------------------------------" >> /home/user/test/backup/backup.log
echo "`date +"%Y-%m-%d_%H-%M-%S"` Size database file: " >> /home/user/test/backup/backup.log
du -h -s /var/lib/postgresql/9.6/main/base  >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log

Сохранить.

Тестовый запуск:
#$ cd /home/user/test/backup/
$ sudo su - postgres 
$ sh /home/user/test/backup/backup-sql.sh

$ sudo su - postgres
$ crontab -e
Добавить в конец (сработает в 2:01):

#01 22 * * * vacuumdb --analyze --full --quiet --dbname=demo
01 02 * * * sh /home/user/test/backup/backup-sql.sh 
Сохранить
 
Смотреть задания:
$ crontab -l

Регулярно восстанавливайте и проверяйте Бекапы средствами 1С!

Смотреть лог:
$ sudo su - postgres
$ nano /home/user/test/backup/backup.log


Если мы хотим тот же скрипт выполнить от root
модернизируем его предварительно отключив от postgres

$ sudo su - postgres
$ crontab -e
Закомментировать:
#01 22 * * * vacuumdb --analyze --full --quiet --dbname=demo
#01 02 * * * sh /home/user/test/backup/backup-sql.sh 
Сохранить
Выйти.
 
$ exit

Теперь заменим скрипт на следующий:
$ nano /home/user/test/backup/backup-sql.sh

Вставить:

#!/bin/sh
set -e
# останавливаем сервер 1С
systemctl stop  srv1cv83.service
systemctl status  srv1cv83.service >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
echo "`date +"%Y-%m-%d_%H-%M-%S"` Size database file: " >> /home/user/test/backup/backup.log
du -h -s /var/lib/postgresql/9.6/main/base  >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup demo" >> /home/user/test/backup/backup.log

# Бэкапим базу данных demo и сразу сжимаем
cd /home/user/test/backup/
/bin/su postgres -c "/usr/bin/pg_dump demo | pigz > /home/user/test/backup/$DATA-demo.sql.gz"
echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup demo" >> /home/user/test/backup/backup.log
sleep 2
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start vacuumdb demo" >> /home/user/test/backup/backup.log
/bin/su postgres -c "/usr/bin/vacuumdb --verbose --analyze --full --quiet --username postgres --dbname=demo"
echo "`date +"%Y-%m-%d_%H-%M-%S"` End vacuumdb demo" >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
echo "`date +"%Y-%m-%d_%H-%M-%S"` Size database file: " >> /home/user/test/backup/backup.log
du -h -s /var/lib/postgresql/9.6/main/base  >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
# запускаем сервер 1Сsystemctl start  srv1cv83.service
systemctl status  srv1cv83.service >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log


Сохранить.

$ sudo -i
# crontab -e
Добавить в конец (сработает в 2:01):

01 02 * * * sh /home/user/test/backup/backup-sql.sh 
Сохранить
 
Смотреть задания:
# crontab -l

$ nano backup-sql.sh

#!/bin/sh
set -e
# останавливаем сервер 1С
echo "останавливаем сервер 1С"
systemctl stop  srv1cv83.service
#systemctl status  srv1cv83.service >> /home/user/test/backup/backup.log
echo "состояние сервера 1С"  >> /home/user/test/backup/backup.log
systemctl status  srv1cv83.service | grep 'Active:' >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
echo "`date +"%Y-%m-%d_%H-%M-%S"` Size database file: " >> /home/user/test/backup/backup.log
du -h -s /var/lib/postgresql/9.6/main/base  >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup demo" >> /home/user/test/backup/backup.log
# Бэкапим базу данных demo и сразу сжимаем
echo "бэкапим базу данных demo"
cd /home/user/test/backup/
/bin/su postgres -c "/usr/bin/pg_dump demo | pigz > /home/user/test/backup/$DATA-demo.sql.gz"
echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup demo" >> /home/user/test/backup/backup.log
sleep 2
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start vacuumdb demo" >> /home/user/test/backup/backup.log
echo "запускаем vacuum full"
/bin/su postgres -c "/usr/bin/vacuumdb --verbose --analyze --full --quiet --username postgres --dbname=demo"
echo "`date +"%Y-%m-%d_%H-%M-%S"` End vacuumdb demo" >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
echo "`date +"%Y-%m-%d_%H-%M-%S"` Size database file: " >> /home/user/test/backup/backup.log
du -h -s /var/lib/postgresql/9.6/main/base  >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
sleep 2
# запускаем сервер 1С
echo "запускаем сервер 1С"
systemctl start  srv1cv83.service
#systemctl status  srv1cv83.service >> /home/user/test/backup/backup.log
echo "состояние сервера 1С"  >> /home/user/test/backup/backup.log
systemctl status  srv1cv83.service | grep 'Active:' >> /home/user/test/backup/backup.log
echo "-------------------------------------------" >> /home/user/test/backup/backup.log
echo "закончено"


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

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