Задача, которая стояла передо мной: Есть сервер с mysql под управлением windows server 2008 R2, на котором помимо всего прочего работает mysql с несколькими десятками баз данных, количество и состав которых периодически меняется.
Необходимо организовать ежедневное резервное копирование этих баз без остановки сервера mysql и таким образом, чтобы каждая база попадала в отдельный архив.
Эта, казалось бы, самая простая задача (возможно, так оно и есть) оказалась для меня довольно сложной.
Что нам говорит Google? Насчет того, что есть mysqlhotcopy и mysqldump. Первый работает напрямую с файлами базы данных, второй делает дампы с помощью запросов.
Мне не удалось заставить работать mysqlhotcopy даже с самыми простыми параметрами, и погуглив, я пришел к выводу (поправьте меня, если я ошибаюсь), что этот скрипт не подходит для Windows. Я начал с mysqlhotcopy, потому что работать напрямую с файлами в моем случае проще — просто втыкаешь файлы в мускул и работай.
Дамп хоть и весит меньше из-за отсутствия индексов, но все равно нужно импортировать.
Но есть другой способ без остановки MySQL Не нашел, сделаем дампы.
Здесь Я нашел отличное руководство по ключам сценариев.
Так, он может сделать общий дамп всех баз в один файл (крайне неудобно), либо сделать дампы перечисленных баз.
Поскольку количество и названия наших баз меняются, писать список не вариант — мы будем каждый раз замучаться его редактировать.
Это означает, что нам нужен скрипт, который будет вставлять каждую базу данных в mysqldump одну за другой.
Я реализовал это так — батник смотрит, какие папки находятся в каталоге данных mysql и в цикле подставляет имя каждой из них (которое является именем базы данных) в строку параметра mysqldump.
Полученный дамп немедленно архивируется с помощью 7-молния в формате gzip (чтобы полученный файл можно было скормить мускулу не распаковывая).SET SOURCEDIR=E:\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 "E:\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
Ну а утилитаeachfile удалит устаревшие резервные копии.
Гугля, я тоже наткнулся на программу Инструмент резервного копирования MySQL что, однако, я не осмелился проверить.
Теги: #резервное копирование #MySQL #Windows #Разработка веб-сайтов
-
Мэнский Язык
19 Oct, 24 -
Jsfiddle — Что За Зверь?
19 Oct, 24 -
Как Оценить Пульсацию Светодиодных Ламп
19 Oct, 24 -
Поисковик Scroogle Вынужден Закрыться
19 Oct, 24