пятница, 7 декабря 2018 г.

Backup

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

Бэкап с архивированием:

$ sudo /bin/su postgres -c "pg_dump -Fc demo"  > /home/user/test/backup/demo
$ sudo /bin/su postgres -c "createdb --username postgres -T template0 demotest"
$ sudo /bin/su postgres -c "pg_restore -d demotest /home/user/test/backup/demo"

Вариант для всех баз
$ sudo /bin/su postgres -c "pg_dumpall -c"  > /home/user/test/backup/baseall


$ sudo /bin/su postgres -c "pg_restore -d demotest" /home/user/test/backup/demo
$ sudo /bin/su postgres -c "psql -l"
$ sudo /bin/su postgres -c "dropdb demotest"
Размер базы demo 
$ sudo su -c "psql -d demo -c \"select pg_size_pretty( pg_database_size('demo'))\"" postgres
Размер базы demo
$ sudo su -c "psql -c \"select pg_size_pretty( pg_database_size('demo'))\"" postgres
 
$ nano backup-sql.sh
#!/bin/sh
set -e
echo "====================================================================" >> /home/user/test/backup/backup.log
# останавливаем сервер 1С
echo "останавливаем сервер 1С"
sudo systemctl stop  srv1cv83.service
#systemctl status  srv1cv83.service >> /home/user/test/backup/backup.log
echo "состояние сервера 1С"  >> /home/user/test/backup/backup.log
sudo 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
sudo 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, restore, vacuum  базы demo" >> /home/user/test/backup/backup.log
# Бэкапим базу данных demo и сразу сжимаем
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup, restore, vacuum  базы demo"
#cd /home/user/test/backup/
sudo /bin/su postgres -c "dropdb demotest" >/dev/null 2>/dev/null || true
sudo /bin/su postgres -c "pg_dump -Fc demo"  > /home/user/test/backup/demo_$DATA && \
    sudo /bin/su postgres -c "createdb --username postgres -T template0 demotest" && \
    sudo /bin/su postgres -c "pg_restore -d demotest /home/user/test/backup/demo_$DATA" && \
    sudo /bin/su postgres -c "/usr/bin/vacuumdb --analyze --full --quiet \
    --username postgres --dbname=demo" && \
    sudo /bin/su postgres -c "dropdb demotest"
#echo $?
if [ $? -ne 0 ]
then
     echo "`date +"%Y-%m-%d_%H-%M-%S"` Ошибка завершения для базы demo"
     echo "`date +"%Y-%m-%d_%H-%M-%S"` Ошибка завершения для для базы demo" >> /home/user/test/backup/backup.log
else
     echo "`date +"%Y-%m-%d_%H-%M-%S"` Успешное завершение для базы demo"
     echo "`date +"%Y-%m-%d_%H-%M-%S"` Успешное завершение для базы demo" >> /home/user/test/backup/backup.log
fi
echo "--------------------------------------------------------------------" >> /home/user/test/backup/backup.log
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup, restore, vacuum  базы kamin" >> /home/user/test/backup/backup.log
# Бэкапим базу данных demo и сразу сжимаем
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup, restore, vacuum  базы kamin"
#cd /home/user/test/backup/
sudo /bin/su postgres -c "dropdb kamintest" >/dev/null 2>/dev/null || true
sudo /bin/su postgres -c "pg_dump -Fc kamin"  > /home/user/test/backup/kamin_$DATA && \
    sudo /bin/su postgres -c "createdb --username postgres -T template0 kamintest" && \
    sudo /bin/su postgres -c "pg_restore -d kamintest /home/user/test/backup/kamin_$DATA" && \
    sudo /bin/su postgres -c "/usr/bin/vacuumdb --analyze --full --quiet \
    --username postgres --dbname=kamin" && \
    sudo /bin/su postgres -c "dropdb kamintest"
#echo $?
if [ $? -ne 0 ]
then
     echo "`date +"%Y-%m-%d_%H-%M-%S"` Ошибка завершения для базы kamin"
     echo "`date +"%Y-%m-%d_%H-%M-%S"` Ошибка завершения для для базы kamin" >> /home/user/test/backup/backup.log
else
     echo "`date +"%Y-%m-%d_%H-%M-%S"` Успешное завершение для базы kamin"
     echo "`date +"%Y-%m-%d_%H-%M-%S"` Успешное завершение для базы kamin" >> /home/user/test/backup/backup.log
fi
echo "--------------------------------------------------------------------" >> /home/user/test/backup/backup.log
# запускаем сервер 1С
echo "запускаем сервер 1С"
sudo systemctl start  srv1cv83.service
#systemctl status  srv1cv83.service >> /home/user/test/backup/backup.log
echo "состояние сервера 1С"  >> /home/user/test/backup/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> /home/user/test/backup/backup.log
echo "--------------------------------------------------------------------" >> /home/user/test/backup/backup.log
echo "закончено"

Сохранить.

Однократный запуск:
$ sudo sh backup-sql.sh

Запуск по расписанию:

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

0 18 * * * sh /home/user/backup-sql.sh
Сохранить.

Смотреть задания:
# crontab -l

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

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