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

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

В принципе, задача имеет множества вариантов решения, но мне больше всего понравился такой вариант - создать .bat-файл и забить его в штатный планировщик Windows. После активного поиска в интернете был найден такой код:

SET SOURCEDIR=D:\xampp\mysql\data\ set hour=%TIME:~0,2% set minute=%TIME:~3,2% set second=%TIME:~6,2% set HHMMSS=%hour%-%minute% for /d %%i in (%SOURCEDIR%\*) do "D:\xampp\mysql\bin\mysqldump.exe" -uusername -hlocalhost -ppassword -c -n %%~ni | "c:\Program Files\7-Zip\7z.exe" a -tgzip -si"%%~ni_%DATE%_%HHMMSS%.sql" "D:\backups\data\%DATE%_%HHMMSS%\%%~ni.sql.gzip" eachfile.exe -purge -r -w -e -d 13 -l 0 -dir D:\backups\data\ exit

Принцип работы следующий:

  • в первой строке задаем путь к каталогу, в котором хранятся файлы базы данных MySQL
  • дальше идут строки (set ...),  в которых формируется имя архива - оно состоит из даты и времени создания архива
  • цикл for перебирает все файлы в каталоге и для каждого из них запускает процедуру создания дампа базы данных. Для этого нужно ввести данные -uusername, -hlocalhost, -ppassword.  Именно так, без пробелов. Дампы упаковываются архиватором 7-zip (должен быть установлен на ПК). Каждый дамп пишется в отдельный архив.
  • eachfile.exe - это бесплатная программа, позволяющая удалять устаревшие файлы в каталоге. В предпоследней строчке выполнение программы настроено таким образом, что она удаляет файлы старже 13 дней.

После этого заходим в планировщик заданий и настраиваем выполнение этого скрипта каждый день в удобное для нас время.