Скрипт бекапа баз данных MySQL
Долго я искал нормальный скрипт для резервного копирования баз данных MySQL и ничего подходящего для себя не нашел.
Чего мне не хватало:
- Пакетный бекап баз.
- Разные каталоги для бекапов.
- Ротация резервных копий.
Пришлось мне писать свой скрипт для этого дела. В общем на Ваш суд:
MySQL DB Backup умеет хранить резервные копии баз данных в отдельных каталогах для каждой базы, что позволяет разнести базы по каталогам пользователей; позволяет управлять резервированием баз данных из одного места, что гораздо удобнее, чем ручное копирование; проводить ротацию файлов копий, ограничив количество этих копий; автоматически менять владельца и группу файла для корректного доступа пользователей к файлам резервных копий.
[ ... ИНСТРУКЦИЯ ПО УСТАНОВКЕ ... ]
1. Внесите в массив параметры баз данных и путей к каталогам резервных копий, настройте остальные параметры конфигурации в файле mysqldbbackup.ini.
Один из разделов конфигурации обязательно должен называться Options. В нем находятся настройки
хранения, ротации, доступа к базе данных. Для примера:
[Options]
removedays = 1,4,6
nob = 10
compress = 9
dbuser = root
dbpass = Mega$uperPa$sword
- removedays отвечает за настройку дня недели, в которые будет проводиться удаление
старых файлов резервных копий. Дни недели указываются через запятую (0 – воскресенье). Можно
указать “*”, что означает каждый день;
- nob (number of backups) отвечает за количество хранимых бекапов;
- compress – коэффициент сжатия (0 – 9);
- dbuser – имя суперполльзователя (обычно root);
- dbpass – пароль для указанного пользователя.
Далее идут разделы для копируемых баз данных:
[DataBase]
db = dbname
archpath = /path/to/backup
owner = user:group
- DataBase – идентификатор базы данных;
- db – имя базы данных;
- owner – имя пользователя и группа, выставляемые на файл бекапа после его создания.
2. Измените путь к файлу конфига в файле mysqldbbackup.php.
3. Установите права запуска на скрипт 700, владельца и группу root.
4. Внесите в crontab запуск скрипта по расписанию:
0 1 * * * root php /path/to/mysqldbbackup.php
5. Все. Скрипт находится в рабочем состоянии.
[ ... TO DO ... ]
1. Количество хранимых копий для каждой базы отдельно
2. Автосоздание последнего в пути каталога для бекапа.
3. Загрузка файлов на удаленный сервер.
[ ... HISTORY ... ]
ver. 1.0
+ Создан конфиг в виде стандартного ini-файла;
+ Добавлена проверка наличия замыкающего слеша;
* Переписана схема ротации;
* Увеличена информативность выводимого отчета.
[ ... REGARDS ... ]
1. Спасибо за помощь в отлове багов Lice (TSRh Team).






Забыли инклуд конфига
OpenID неработает
Warning: mkdir() [function.mkdir]: Permission denied in /home/silver/htdocs/wp-content/plugins/openid/openid-classes.php on line 101
Warning: opendir(./tmp/) [function.opendir]: failed to open dir: No such file or directory in /home/silver/htdocs/wp-content/plugins/openid/openid-classes.php on line 401
Warning: Cannot modify header information – headers already sent by (output started at /home/silver/htdocs/wp-content/plugins/openid/openid-classes.php:101) in /home/silver/htdocs/wp-content/plugins/openid/openid-classes.php on line 360
ещё 1 замечание
хотелось бы иметь возможность забэкапить 2 БД одного пользователя,
например перечислив их через запятую в секции
‘db’
rtm, сделайте две секции в конфиге. Я специально так сделал, чтоб базы можно было хранить в разных местах.
Инклуд исправил. Спасибо.
OpenID просьба проверить. Должно уже работать.
Формы для OpenID теперь вообще нет ))))
а за скрипт – спасибо, допилю потом под себя
ЖЖ works
наврал
жж непашет
Warning: mkdir() [function.mkdir]: Permission denied in /home/silver/htdocs/wp-content/plugins/openid/openid-classes.php on line 101
Warning: opendir(./tmp/) [function.opendir]: failed to open dir: No such file or directory in /home/silver/htdocs/wp-content/plugins/openid/openid-classes.php on line 401
Warning: Cannot modify header information – headers already sent by (output started at /home/silver/htdocs/wp-content/plugins/openid/openid-classes.php:101) in /home/silver/htdocs/wp-content/plugins/openid/openid-classes.php on line 360
rtm, еще раз проверь, плз.
а как можно сделать чтоб резервная копия сохранялась не в указанный день недели – по умолчанию воскресенье, а например каждый день?
MSW, сделаю в следующей версии параметром. :)
[...] Сегодня переписал и доработал скрипт бекапа баз данных MySQL. [...]
Как насчет блокировки таблиц MyISAM перед непосредственно дампом?
@freeman: можно указать –lock-tables в скрипте…