- BAT скрипт для резервного копирования папки
- Ссылки
- Функции
- Пример настройки расписания
- BAT скрипт для резервного копирования папки
- Ссылки
- Функции
- Пример настройки расписания
- Резервные копии SQL с помощью планировщика виндовс и скрипта
- Элементарный Bash скрипт для резервного копирования данных
- Что должен выполнять наш скрипт?
BAT скрипт для резервного копирования папки
Набросал ещё один маленький BAT скрипт для резервного копирование папки. Внесите свои данные и через scheduler настройте расписание резервного копирования.
Ссылки
Функции
- С помощью xcopy делает резервные копии папки.
- Каждый бэкап сохраняется в отдельную подпапку вида DD.MM.YYYY_hhmmmss.
- С помощью 7-Zip архивирует резервные копии.
- Удаляет старые резервные копии.
- DirName — название папки
- SourceDir — что бэкапим
- BackupDir — куда бэкапим
- NumFolders — сколько подпапок с бэкапами хранить
- a7z — путь к 7z.exe
Пример настройки расписания
В Task Scheduler настраиваем новое задание.
Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.
В триггерах настраиваем расписание. У меня резервное копирование происходит раз в сутки.
Указываем ссылку на наш BAT файл.
Проверяем настройки. OK.
Теперь папка будет резервироваться раз в день. С настройкой NumFolders=10 в BAT файле мы будем хранить данные за последние 10 дней.
Если хотите хранить ежедневные и ежемесячные резервные копии — сделайте два BAT файла и два расписания резервного копирования в разные папки.
BAT скрипт для резервного копирования папки
Набросал ещё один маленький BAT скрипт для резервного копирование папки. Внесите свои данные и через scheduler настройте расписание резервного копирования.
Ссылки
Функции
- С помощью xcopy делает резервные копии папки.
- Каждый бэкап сохраняется в отдельную подпапку вида DD.MM.YYYY_hhmmmss.
- С помощью 7-Zip архивирует резервные копии.
- Удаляет старые резервные копии.
@echo off
SetLocal EnableDelayedExpansion
set DirName=my_folder
set SourceDir=C:\%DirName%
set BackupDir=B:\%DirName%\daily\
set NumFolders=10
0,2%
set h=%h: =0%
set FullBackupDir=%BackupDir%%date%_%h%%time:
xcopy %SourceDir% %FullBackupDir%%DirName%\ /E /F /H /R /K /Y /D 2>nul >nul
«%a7z%» a -tzip -bb0 -bd -sdel «%FullBackupDir%%DirName%.zip» «%FullBackupDir%» 2>nul >nul
for /f «tokens=* delims=» %%D in (‘dir %BackupDir% /ad /b /o-d’) do (
if not %%D==»» (
if not !NumFolders!==0 (
set /a NumFolders-=1
) else (
rd /s /q %BackupDir%%%D 2>nul >nul
)
)
)
- DirName — название папки
- SourceDir — что бэкапим
- BackupDir — куда бэкапим
- NumFolders — сколько подпапок с бэкапами хранить
- a7z — путь к 7z.exe
Пример настройки расписания
В Task Scheduler настраиваем новое задание.
Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.
В триггерах настраиваем расписание. У меня резервное копирование происходит раз в сутки.
Указываем ссылку на наш BAT файл.
Проверяем настройки. OK.
Теперь папка будет резервироваться раз в день. С настройкой NumFolders=10 в BAT файле мы будем хранить данные за последние 10 дней.
Если хотите хранить ежедневные и ежемесячные резервные копии — сделайте два BAT файла и два расписания резервного копирования в разные папки.
Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.
Резервные копии SQL с помощью планировщика виндовс и скрипта
Для начала лучше иметь несколько дисков, в одном из которых нужно назначить права доступа только для одного пользователя с хорошим паролем (защита от шифровальщиков). Далее необходимо иметь дополнительный компьютер для БЭКАП, который находится в той же локальной сети, но без доступа к интернету, можно даже на Linux куда тоже будет скидываться БЭКАП, у меня в данной статье пока нет дополнительного компа, поэтому копии архивов я переношу на внешнее устройство, но скоро будет и я внесу изменения в эту статью.
Вот текст самого батника:
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
Имя этого батника 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 с сервера на другой компьютер, затем также архивирует их под другим расширением. Разумеется все батники удаляют старые бэкапы.
Элементарный Bash скрипт для резервного копирования данных
Привет хабралюди, сейчас я расскажу как можно немного автоматизировать рутиную работу по подготовке бэкапов.
В данном случае, мы не будем использовать мощные программы, или даже целые системы для резервного копирования данных, ограничимся самым доступным что у нас есть. А именно — Bash скриптом.
Что должен выполнять наш скрипт?
Бэкапить веб проект, а именно:
— Делать резервную копию базы MySQL.
— Делать резервную копию файлов.
— Структурировать это.
И так, вот наш скрипт:
#!/bin/bash
PROJNAME= #Имя проекта
CHARSET= #Кодировка базы данных (utf8)
DBNAME= #Имя базы данных для резервного копирования
DBFILENAME= #Имя дампа базы данных
ARFILENAME= #Имя архива с файлами
HOST= #Хост MySQL
USER= #Имя пользователя базы данных
PASSWD= #Пароль от базы данных
DATADIR= #Путь к каталогу где будут храниться резервные копии
SRCFILES= #Путь к каталогу файлов для архивирования
PREFIX=`date +%F` #Префикс по дате для структурирования резервных копий
#start backup
echo «[———————————[`date +%F—%H-%M`]———————————]»
echo «[———-][`date +%F—%H-%M`] Run the backup script. »
mkdir $DATADIR/$PREFIX 2> /dev/null
echo «[++———][`date +%F—%H-%M`] Generate a database backup. »
#MySQL dump
mysqldump —user=$USER —host=$HOST —password=$PASSWD —default-character-set=$CHARSET $DBNAME > $DATADIR/$PREFIX/$DBFILENAME-`date +%F—%H-%M`.sql
if [[ $? -gt 0 ]];then
echo «[++———][`date +%F—%H-%M`] Aborted. Generate database backup failed.»
exit 1
fi
echo «[++++——][`date +%F—%H-%M`] Backup database [$DBNAME] — successfull.»
echo «[++++++—-][`date +%F—%H-%M`] Copy the source code project [$PROJNAME]. »
#Src dump
tar -czpf $DATADIR/$PREFIX/$ARFILENAME-`date +%F—%H-%M`.tar.gz $SRCFILES 2> /dev/null
if [[ $? -gt 0 ]];then
echo «[++++++—-][`date +%F—%H-%M`] Aborted. Copying the source code failed.»
exit 1
fi
echo «[++++++++—][`date +%F—%H-%M`] Copy the source code project [$PROJNAME] successfull.»
echo «[+++++++++-][`date +%F—%H-%M`] Stat datadir space (USED): `du -h $DATADIR | tail -n1`»
echo «[+++++++++-][`date +%F—%H-%M`] Free HDD space: `df -h /home|tail -n1|awk ‘
echo «[++++++++++][`date +%F—%H-%M`] All operations completed successfully!»
exit 0
Запускать можно парой способов:
— Простой запуск: ./backup.sh
— Запуск + запись в лог: ./backup.sh | tee backup.log
— а еще его можно в cron запихать: 00 20 * * 7 root sh /home/bond/backup.sh | tee /home/bond/backup/backup.log
После успешного завершения скрипта, мы увидим следующее:
$ sudo sh backup.sh
[———————————[2009-02-14—12-28]———————————]
[———-][2009-02-14—12-28] Run the backup script.
[++———][2009-02-14—12-28] Generate a database backup.
[++++——][2009-02-14—12-29] Backup database [images] — successfull.
[++++++—-][2009-02-14—12-29] Copy the source code project [itmages].
[++++++++—][2009-02-14—12-29] Copy the source code project [itmages] — successfull.
[+++++++++-][2009-02-14—12-29] Stat datadir space (USED): 1,3G /home/bond/backup
[+++++++++-][2009-02-14—12-29] Free HDD space: 49G
[++++++++++][2009-02-14—12-29] All operations completed successfully!
bond@serv:
В итоге наши бэкапы складываются в каталог который вы указали, + резервные копии лежат в каталогах именованых по дате.