Резервные копии SQL с помощью планировщика виндовс и скрипта

Публикация № 1209244

Администрирование - Администрирование данных 1С - Архивирование (backup)

батник скрипт бэкап

Всем привет! Сильно не судите, в основном я создаю эту статью для себя, чтобы не забыть об этом, сразу скажу, что я не программист, но по долгу работы приходится решать вопросы. В данной статье я покажу код батника, с помощью которого я делаю резервное копирование баз данных 1С посредством SQL.

Для начала лучше иметь несколько дисков, в одном из которых нужно назначить права доступа только для одного пользователя с хорошим паролем (защита от шифровальщиков). Далее необходимо иметь дополнительный компьютер для БЭКАП, который находится в той же локальной сети, но без доступа к интернету, можно даже на Linux куда тоже будет скидываться БЭКАП, у меня в данной статье пока нет дополнительного компа, поэтому копии архивов я переношу на внешнее устройство, но скоро будет и я внесу изменения в эту статью. 

Вот текст самого батника:

 

@echo off

if exist D:\BACKUP\ZUP\ZUP_1mon.bak del D:\arhiv\ZUP\ZUP_1mon.bak
if exist D:\BACKUP\TORG\TORG_1mon.bak del D:\arhiv\TORG\TORG_1mon.bak
if exist D:\BACKUP\BUH\BUH_1mon.bak del D:\arhiv\BUH\BUH_1mon.bak

SQLCMD -S ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ -E -Q "BACKUP DATABASE [ZUP] TO DISK = 'D:\arhiv\ZUP\ZUP_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"
SQLCMD -S ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ -E -Q "BACKUP DATABASE [TORG] TO DISK = 'D:\arhiv\TORG\TORG_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"
SQLCMD -S ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ -E -Q "BACKUP DATABASE [BUH] TO DISK = 'D:\arhiv\BUH\BUH_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"

"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\ZUP\ZUP_1mon.vidi D:\arhiv\ZUP\ZUP_1mon.bak
"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\TORG\TORG_1mon.vidi D:\arhiv\TORG\TORG_1mon.bak
"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\BUH\BUH_1mon.vidi D:\arhiv\BUH\BUH3_1mon.bak

if exist D:\arhiv\ZUP\ZUP_1mon.bak del D:\arhiv\ZUP\ZUP_1mon.bak
if exist D:\arhiv\TORG\TORG_1mon.bak del D:\arhiv\TORG\TORG_1mon.bak
if exist D:\arhiv\BUH\BUH3_1mon.bak del D:\arhiv\BUH\BUH3_1mon.bak
 

exit

Имя этого батника bac_1mon.bat, т.е. это батник первого дня недели понедельника, разумеется у меня их 5 на каждый день.

Как видно из кода, у меня 3 базы, ZUP, TORG, BUH, зарплата и управление, управление торговлей, бухгалтерия предприятия, соответственно.

if exist D:\BACKUP\ZUP\ZUP_1mon.bak del D:\arhiv\ZUP\ZUP_1mon.bak
if exist D:\BACKUP\TORG\TORG_1mon.bak del D:\arhiv\TORG\TORG_1mon.bak
if exist D:\BACKUP\BUH\BUH_1mon.bak del D:\arhiv\BUH\BUH_1mon.bak

данная часть кода выполняет проверку на наличие имеющегося бэкапа в папке на диске Д такого ZUP_1mon.bak файла, в случае если он будет (а он будет через неделю, то он будет удаляться.

SQLCMD -S ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ -E -Q "BACKUP DATABASE [ZUP] TO DISK = 'D:\arhiv\ZUP\ZUP_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"

Эта часть кода уже непосредственно обращение к SQL вместо ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ - вам нужно написать име того компьютера на котором установлен сервер SQL например SERVER и через слеш имя Вашего SQL соединения по умолчанию SQLEXPRESS, таким образом код примет следующий вид:

SQLCMD -S SERVER\SQLEXPRESS -E -Q "BACKUP DATABASE [ZUP] TO DISK = 'D:\arhiv\ZUP\ZUP_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"

В квадратных скобках имя Вашей базы, а это 'D:\arhiv\ZUP\ZUP_1mon.bak' путь куда делать резервную копию

"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\ZUP\ZUP_1mon.vidi D:\arhiv\ZUP\ZUP_1mon.bak
"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\TORG\TORG_1mon.vidi D:\arhiv\TORG\TORG_1mon.bak
"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\BUH\BUH_1mon.vidi D:\arhiv\BUH\BUH3_1mon.bak

Эта часть кода отвечает за архивацию баз данных и архивирует базу в другую папку, как я уже говорил, лучше на другой диск, но у меня тот же. 

C:\Program Files\WinRAR\Rar.exe - это обращение к программе архиватора, если у Вас другая программа, то соответственно и путь будет другой, D:\BACKUP\BUH\BUH_1mon.vidi - это куда и как нужно сохранить архив, кстати я изменил расширение с zip на vidi, можете на любое другое, но большинство шифровальщиков работает по принципу шифрования всех наиболее знакомых форматов (zip, doc, xlm, jpg и др.) может это и не спасет, но я все же сделал так. D:\arhiv\BUH\BUH3_1mon.bak - это путь туда, откуда нужно взять файл и заархивировать его. 

if exist D:\arhiv\ZUP\ZUP_1mon.bak del D:\arhiv\ZUP\ZUP_1mon.bak
if exist D:\arhiv\TORG\TORG_1mon.bak del D:\arhiv\TORG\TORG_1mon.bak
if exist D:\arhiv\BUH\BUH3_1mon.bak del D:\arhiv\BUH\BUH3_1mon.bak

Это уже упомянутая выше часть кода, которая проверяет папку куда SQL делал бэкап и удаляет эти бэкапы, потому-что точно такие же бэкапы у нас заархивированы в другой папке, к чему тогда тратить место на диске.

Как настрою вторую машину в локалке, допишу код, как c помощью команды XCOPY сделать копию на другой компьютер в локальной сети.

ДОБАВЛЕННОЕ К СТАТЬЕ!

И снова здравствуйте, сделал наконец то вторую машину, теперь самое время настроить копирование на нее бэкапов SQL с сервера.

Первым делом на сервере SQL создаем пользователя с сложным паролем, чтобы не одна собака не могла отгадать, причем я сделал его еще и сменяемым, т.е. через определенный промежуток времени у меня это 2 месяца, винда просит сменить пароль создаем новый. У меня пользователь так и называется BACKUP, далее расшариваем тот диск и ту папку в которой у Вас хранятся резервные копии. Причем полные права делаем только для службы SQL и того самого пользователя со сложным паролем (BACKUP), для этого правой кнопкой жмем на тот диск где хранятся бэкапы и нажимаем ПКМ на этот диск, далее вкладка Доступ - Расширенная настройка, ставим галочку открыть общий доступ к этой папке и во вкалдке Разрешения, удаляем всех и добавляем нашего (BACKUP), жмем ок, папка расшарена, тоже делаем и с папкой допустим Arhiv, которая находится внутри этого диска. Далее проходим во вкладку Безопасность и добавляем туда нашего (BACKUP), а также службу SQL, остальных удалите или порежьте права, уберите возможность изменения. Все на сервере все сделано, переходим на второй комп, куда будут копироваться БЭКАПЫ.

Подключаем ту папку которую мы расшарили, для этого правой кнопкой мыши (ПКМ), кликаем на Мой компьютер - нажимаем на Подключить сетевой диск, далее два слэша \\имя Вашего сервера\имя той папки в которой хранятся архивы SQL, ставим галочку "Использовать другие учетные данные" нажимаем подключить и вводим имя (BACKUP или какой там у Вас), а пароль, тот самый, который очень сложный, у Вас появиться диск и Ваши папки которые на сервере, далее подгоняете под себя батник который прикреплен к статье  и настраиваете планировщик, только время создания копий, должно быть позднее чем то которое у Вас на сервере, а то будете копировать старый бэкап. Иногда вместо имени компьютера, нужно прописать IP адрес этого компьютера (сервера).

Планировщик, открываем:

Создаем папку 1С например

Далее ПКМ на эту папку и создаем задачу:

В открывшемся окне пишем название например "Копия бэкап понедельник" и так на все пять дней, вторник, среда ...

Снизу выбираете свою винду, далее создаете триггер, там указываете еженедельно, указываете время например на сервере у Вас создается копия в 22:00, то здесь в 24 или 02:00., как все заполнили нажимаете создать.

Далее в действие выбираете свои батники, которых у Вас пять (как у меня если конечно) понедельник, вторник и т.д. и на каждый день выбираете свой батник, если сейчас мы создаем пятницу например, то и батник  пятничный.

Условия и параметры можете как у меня на скринах

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

Эти же батники, копирую тот бэкап который создает SQL с сервера на другой компьютер, затем также архивирует их под другим расширением. Разумеется все батники удаляют старые бэкапы.

Не судите. Всем хорошего настроения. 

Скачать файлы

Наименование Файл Версия Размер
Резервные копии SQL с помощью планировщика виндовс и скрипта:

.bat 0,91Kb
0
.bat 0,91Kb Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Zebar 64 16.03.20 08:22 Сейчас в теме
В SQL есть свой агент, зачем делать средствами операционной системы и писать батник?
Не хочу заниматься саморекламой, но как раз именно о таком я рассказывал ранее:
https://infostart.ru/public/554112/
2. VID1234 68 16.03.20 08:30 Сейчас в теме
8. segatron 26.07.20 18:43 Сейчас в теме
(1), Агент SQL Server создает только бэкап sql-базы. А если вам надо положить в бэкап что то еще или/и залочить бэкап, т.е. выполнить дополнительные действия?

У меня например для 1С8 выполняется bat-файл, который
1. Создает временную папочку с именем базы и датой (например Accounting05_backup_2020_07_15_223800)
2. В эту папку сохраняет архив базы, а так же лог операции архивирования (мало ли чего с базой может быть, или с сервером ...)
3. Папочка с этими файлами архивируется с паролем с помощью 7-zip.
4. Папочка удаляется.

А для 1С 7.7 в эту папочку помимо sql-бэкапа (это ведь только данные) еще копируется весь каталог с базой (конфигурация, словарь, обработки, ...)
3. user613549_scratch_sv 17.03.20 12:00 Сейчас в теме
И зачем 5 батников? По дням недели?
Сделайте один, и пускайте ему цифру параметром. Или вообще, брать цифирку из даты (например %date:~1,1%)
segatron; +1 Ответить
4. VID1234 68 17.03.20 12:03 Сейчас в теме
(3) Логично, спасибо попробую.
9. segatron 26.07.20 18:49 Сейчас в теме
(4) Обязательно попробуйте
Прикрепленные файлы:
5. maxf 18.03.20 18:16 Сейчас в теме
Напишите уже кто-нибудь статью как средствами SQL бэкапить на другой компьютер. Сходу не решается - прав каких-то не хватает. Извращался по-всякому, запускал SQL агента от разных юзеров - не помогает. Только если доступ на бэкапник открыть всем - тогда работает, но это не вариант.
Либо, что еще лучше, посоветуйте скрипты/программы по синхронизации локального каталога с бэкапами на SQL сервере и сетевого, с удалением старых копий.
6. VID1234 68 19.03.20 10:31 Сейчас в теме
(5) Здравствуйте. Работаю над этим, как только сделаю, сразу напишу.
7. VID1234 68 08.05.20 09:02 Сейчас в теме
(5) Здравствуйте. Сделал, можете почитать, не знаю устроит Вас такой вариант или нет.
10. segatron 26.07.20 19:06 Сейчас в теме
(5)
Не стоит бэкапить средствами SQL напрямую на другой компьютер.
Кладите бэкапы в локальную папку (на том сервере где SQL), а затем копируйте/переносите из нее туда куда надобно.

Например вы можете раз в сутки запускать bat-файл с командой
robocopy <источник> <назначение> параметры

Почему robocopy?
Это встроенная команда ОС и нет необходимости что то ставит дополнительно.

Почему robocopy, а не move?
Потому что robocopy функциональнее. Она может копировать файлы по маске, правам, дате, старше/младше n-дней, делать r попыток, копировать папки рекурсивно, создавать папки в приемнике и т.п. И конечно же удалять файлы после завершения копирования (см ключ /MOV).

Создайте bat-файл в котором будут "создание sql-бэкапов всех необходимых баз" и "вызов(ы) robocopy после".
Создайте задание в планировщике и укадите учетную запись, под которой он будет запускаться.

Полезный совет:
Если вы на разных серверах создадите пользователя с одинаковым именем и паролем, то для копирования бэкапов с одного сервера на другой не будет препятствий (запускайте bat-файл от имени этого пользователя). Главное чтобы у такого пользователя был доступ и к папке-источнику, и к папке-приемнику.
11. user1499836 27.11.20 13:43 Сейчас в теме
Добрый День!
есть батник
F:
cd "F:\Backup zup"
md "%DATE%"
cd "%DATE%"
xcopy "D:\Base zup\Zup" /i /y /s

каждый день в 1 ночи делает ежедневную копию
как сделать чтобы он удалял старые которые более 3 месяцев

сильно не ругайте))
12. Online-Plus 02.02.21 22:40 Сейчас в теме
(8) Здравствуйте, здравое решение. Подробности будут ? (сам bat файл)
13. segatron 16.02.21 10:00 Сейчас в теме
(12) Подробности в файле
Прикрепленные файлы:
dbbackup1.bat_
14. Online-Plus 17.02.21 14:24 Сейчас в теме
(13)
Спасибо за bat.
Для sqlcmd есть параметр COMPRESSION, тогда 7zip не нужен.
Оставьте свое сообщение

См. также

Циклический бэкап по дням недели Промо

Архивирование (backup) v7.7 v8 1cv8.cf 1cv7.md Россия Абонемент ($m)

В интернете часто можно встретить статьи о том, как написать скрипты для автоматического архивирования баз MSSQL. Методика, в них предлагаемая создает новый архив каждый новый день. Более подробно об этом можно почитать в http://outcoldman.ru/ru/blog/show/127 Я предлагаю незначительное усовершенствование скриптов и генерацию архивов по дням недели с циклической их перезаписью. Скрипт тоже не полностью мой, а скомпонован из различных примеров, найденных в интернете, но, надеюсь, именно представленный вариант будет полезен не только мне.

1 стартмани

15.06.2010    39598    milkers    15    

Архивирование базы данных 1С средствами сервера

Архивирование (backup) v8 1cv8.cf Россия Абонемент ($m)

Практическое описание технологии архивирования файловой базы 1С средствами Windows Server 2008 R2.

1 стартмани

12.10.2020    673    zemskov    10    

Резервное копирование и восстановление БД 1С 8.3 на PostgreSQL 11.5

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Резервное копирование баз данных 1С является обязательным, чтобы в случае непредвиденной проблемы всегда была возможность все восстановить. В статье мы рассмотрим, как произвести резервное копирование и восстановление из копии базы 1 8.3, работающей на PostgreSQL 11.5.

1 стартмани

30.01.2020    23243    ClickUp    46    

Исполняемый .bat файл для резервного копирования 1С

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Простейшее решение для выгрузки .dt, доступное любому пользователю 1С.

1 стартмани

14.05.2018    26626    SergPetr    32