Резервное копирование базы 1С 8.3 и других версий. Настройка бэкапа 1С. Как сделать резервное копирование 1С?

резервное копирование 1cКак сделать резервное копирование 1С? Ответ на этот вопрос не так прост, поскольку 1С использует различные базы данных SQL для хранения информации. Сложности при бэкапе базы 1С также возникают по причине различных версий 1С и их совместимости. Ниже мы рассмотрим автоматический бэкап 1С на основе ПО для резервного копирования и восстановления 1С Bacula. Bacula имеет open source и enterprise-версии, что позволит сделать выбор между бесплатной и корпоративной версией резервного копирования 1С. В этом документе Вы найдете описания различных SQL БД для 1С, скрипт-пример для бесплатного резервного копирования 1С с любой БД на основе Bacula Community, а также некоторое описание преимуществ бэкапа 1С с Bacula Enterprise.

1С может функционировать в разных БД: SQL Server, PostgreSQL, Oracle, DB2 и др. Резервирование копирование баз данных на основе MySQL, PostgreSQL и других БД с помощью Bacula возможно выполнять с помощью включенной функциональности выполнения некоторых скриптов на стороне сервера или клиента до и после задачи резервного копирования базы 1С.

Для выполнения резервного копирования 1С необходим скрипт, который производит дамп базы данных SQL на клиенте в запланированную директорию. Далее полученный файл базы 1С бэкапится, а после завершения задачи резервного копирования 1С необходимо просто удалить временный дамп базы данных из директории. Среди минусов такого бэкапа 1С присутствует то, что производится бэкап всей базы 1С (полный бэкап 1С), который является объемным и требует множество пространства на storage, если резервное копирование 1С происходит часто.

Для резервного копирования 1С на базе MySQL бэкап и восстановление данных обычно производится тулзами создания дампа, например, входящей в состав ПО для сервера MySQL утилитой mysqldump. Это наиболее общий способ, подходящий для всех поддерживаемых типов таблиц в MySQL. Необходимо оперировать от имени пользователя, который имеет право блокировать таблицы на сервере 1С для исключения внесения изменений в таблицы во время резервного копирования 1С.

Создаём пользователя MySQL, обладающего достаточными привелегиями SELECT, RELOAD, LOCK TABLES. В консоли MySQL от имени суперпользователя СУБД отдаем команды:

#mysql> CREATE USER ‘bacula’@’localhost’ IDENTIFIED BY ‘STRONGBACULAPASSWORD’;
#mysql> GRANT SELECT, RELOAD, LOCK TABLES ON *.* TO ‘bacula’@’localhost’ IDENTIFIED BY ‘STRONGBACULAPASSWORD’;

Настройка резервного копирования 1С:

# mkdir -p /etc/bacula/sbin
# touch /etc/bacula/sbin/bacula-dump-mysql.sh
# chmod ugo+x /etc/bacula/sbin/bacula-dump-mysql.sh
# cat /etc/bacula/sbin/bacula-dump-mysql.sh
#!/bin/bash

# Pull in sysconfig settings
if [ -f /etc/sysconfig/tarantool-backup ] ;
then
. /etc/sysconfig/bacula-dump-mysql-settings
else
echo «No /etc/sysconfig/bacula-dump-mysql-settings»
exit -1
fi
mysqldump —verbose —force —complete-insert —host=${HOST} ${LIST} —result-file=»${RESULT}» —user=${USER} —password=${PASSWORD} 2>> ${LOG}
exit 0

Создаем файл с настройками скрипта бэкапа 1С:

# touch /etc/sysconfig/bacula-dump-mysql-settings
# chmod 700 /etc/sysconfig/bacula-dump-mysql-settings
# chown bacula:bacula /etc/sysconfig/bacula-dump-mysql-settings

# cat /etc/sysconfig/bacula-dump-mysql-settings
DATE=`date +»%Y-%m-%d %H:%M:%S»`
LIST=»—all-databases»
HOST=»localhost»
USER=»bacula»
PASSWORD=»STRONGBACULAPASSWORD»
RESULT=»/tmp/mysqldump.tmp.sql»
LOG=»/var/log/mysqldump.log»

Где опции mysqldump:

«—verbose» — включает более детализированный вывод;
«—force» — указывает продолжать создание дампа несмотря на случившиеся ошибки в процессе;
«—complete-insert» — применяем режим создания «дампа» с командой insert на каждую строку вместо более компактного режима по умолчанию с одним insert на всю таблицу.

Необходимо осознавать, что резервное копирование баз 1С 8.3 с помощью тулзов последовательного чтения и вывода информации в дамп не гарантирует непротиворечивого состояния данных с завершением всей процедуры в целом. Дело в том, что после того как будет скопирована строка в начале таблицы, она может быть изменена вместе с другими строками, до которых чтение ещё не дошло. В этой связи существует вероятность получить нефункционирующую логику базы данных 1С после бэкапа, в которой строки в её начале конфликтуют со строками в конце. Самое легкое решение для задач резервного копирования 1С, которые могут быть приостановлены — блокировка таблиц. Для этого в наборе ключей утилиты mysqldump имеется парочка соответствующих ключей:

«—first-slave» — блокируем все таблицы для записи (обеспечение единого непотиворечивого состояния данных в таблицах);
«—add-locks» — блокирование от записи каждой таблицы по отдельности во время исполнения «дампа»;

Теперь, после того, как мы убедимся в работоспособности скрипта бэкапа 1С на стороне клиента, применим его со стороны сервера Bacula. В конфигурационном файле при бэкапе 1С «/etc/bacula/bacula-dir.conf» в конфигурации задания («Job») соответствующего клиента добавим указания на запуск скрипта предварительного создания «дампа» баз данных 1С и команды удаления временного файла «дампа» после исполнения резервного копирования базы 1С:

 

# cat /etc/bacula/bacula-dir.conf
….
Job {
  Name = «job-backup-mysql»
  Type = Backup
  ….
  ClientRunBeforeJob = «/etc/bacula/sbin/bacula-dump-mysql.sh»
  ClientRunAfterJob = «/bin/rm -rf /tmp/mysqldump.tmp.sql»
  ….

В описании области резервирования указываем файл «дампа»:
 
# cat /etc/bacula/bacula-dir.conf
….
FileSet {
  Name = «fileset-backup-mysql»
  Include {
….
    File = «/etc»
    File = «/home»
    File = «/tmp/mysqldump.tmp.sql»
….— 

Стоит понимать все недостатки версии Bacula Community для резервного копирования 1С:

  • Вы не сможете делать инкрементальный и дифференциальный бэкапы базы 1С, что приведет к постоянному увеличению массива хранения данных
  • Нельзя откатить базу к определенному моменту времени (point in time восстановление для 1С недоступно)
  • Используя Bacula Community для резервного копирования сервера 1С, Вы несете исключительно все риски, т.к. у Вас нет квалифицированной технической поддержки для Вашей СРК

Для предприятий среднего и крупного бизнеса, мы рекомендуем использовать резервное копирование баз 1С с помощью Bacula Enterprise Edition.