- PVSM.RU - https://www.pvsm.ru -
Задача, которая стояла передо мной:
Есть сервер с mysql под управлением windows server 2008 R2, на котором, в числе прочего, крутится mysql с несколькими десятками баз данных, число и состав которых периодически меняется. Нужно организовать ежедневный бекап этих баз без остановки mysql сервера, причем таким образом, чтобы каждая база попадала в отдельных архив. Эта, на первый взгляд простейшая задача (возможно, так оно и есть) для меня оказалась достаточно сложной.
Что нам говорит гугл?
О том, что есть mysqlhotcopy и mysqldump. Первый работает прямо с файлами баз данных, второй — делает дампы с помощью запросов.
Заставить работать mysqlhotcopy даже с простейшими параметрами я не смог, и погуглив, пришел к выводу (поправьте меня если ошибаюсь) что для windows данный скрипт не приспособлен.
Начинал я именно с mysqlhotcopy, потому что работать непосредственно с файлами в моем случае проще — просто подсунул файлы мускулю и работай. Дамп же, хоть и весит меньше за счет отсутствия индексов, еще нужно импортировать. Но, раз другого способа без остановки mysql я не нашел, будем делать дампы.
Здесь [1] я нашел отличное руководство по ключам скрипта. Итак, он может сделать общий дамп всех баз в один файл (крайне неудобно), или сделать дампы перечисленных баз. Так как число и имена баз у нас меняются, то писать список не вариант — каждый раз править его замучаемся. Значит нужен скрипт, который будет подставлять в mysqldump каждую базу поочередно.
Реализовал я это так — батник смотрит какие папки лежат в директории данных mysql и в цикле подставляет имя каждой из них (которое и является именем базы данных) в строку параметров mysqldump.
SET SOURCEDIR=E:xamppmysqldata
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 "E:xamppmysqlbinmysqldump.exe" -usourcegame -hlocalhost -pNTS_vector! -c -n %%~ni | "c:Program Files7-Zip7z.exe" a -tgzip -si"%%~ni_%DATE%_%HHMMSS%.sql" "D:backupsdata%DATE%_%HHMMSS%%%~ni.sql.gzip"
eachfile.exe -purge -r -w -e -d 13 -l 0 -dir D:backupsdata
exit
Полученный дамп сразу же архивируется при помощи 7-zip [2] в формат gzip (чтобы полученный файл можно было без распаковки скормить мускулю). Ну а утилитка eachfile удалит устаревшие бекапы.
В процессе гугления также наткнулся на программу MySQL Backup Tool [3] тестировать которую, однако, не решился.
Автор: Matysh
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/mysql/50694
Ссылки в тексте:
[1] Здесь: http://adw0rd.com/2009/6/7/mysqldump-and-cheat-sheet/#.UqrMKrT_NI1
[2] 7-zip: http://7-zip.org.ua/ru/
[3] MySQL Backup Tool: http://sourceforge.net/projects/mysqlbutool/
[4] Источник: http://habrahabr.ru/post/205964/
Нажмите здесь для печати.