Бэкап и восстановление базы 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):
$ crontab -l
Регулярно восстанавливайте и проверяйте Бекапы средствами 1С!
Смотреть лог:
$ sudo su - postgres
$ nano /home/user/test/backup/backup.log
Если мы хотим тот же скрипт выполнить от root
модернизируем его предварительно отключив от postgres
$ sudo su - postgres
$ crontab -e
Закомментировать:
Теперь заменим скрипт на следующий:
$ 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):
# 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 "закончено"
Опыт обслуживания базы 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 "закончено"
Комментариев нет:
Отправить комментарий