Скрипт бекапа баз данных MySQL

Долго я искал нормальный скрипт для резервного копирования баз данных MySQL и ничего подходящего для себя не нашел.

Чего мне не хватало:

  1. Пакетный бекап баз.
  2. Разные каталоги для бекапов.
  3. Ротация резервных копий.

Пришлось мне писать свой скрипт для этого дела. В общем на Ваш суд:

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).

Вы можете оставить комментарий, или поставить трэкбек со своего сайта.

12 комментариев(я)

  • 04.05.2008 16:49, rtm сказал:

    ещё 1 замечание
    хотелось бы иметь возможность забэкапить 2 БД одного пользователя,
    например перечислив их через запятую в секции
    ‘db’

    • 05.05.2008 07:20, Silver Ghost сказал:

      rtm, сделайте две секции в конфиге. Я специально так сделал, чтоб базы можно было хранить в разных местах.

      Инклуд исправил. Спасибо.

      OpenID просьба проверить. Должно уже работать.

      • 05.05.2008 09:16, rtm сказал:

        Формы для OpenID теперь вообще нет ))))
        а за скрипт — спасибо, допилю потом под себя

        • 05.05.2008 09:46, rtm сказал:

          ЖЖ works

          • 05.05.2008 09:50, rtm сказал:

            наврал
            жж непашет

            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

            • 05.05.2008 09:55, Silver Ghost сказал:

              rtm, еще раз проверь, плз.

              • 20.05.2008 11:19, MSW сказал:

                а как можно сделать чтоб резервная копия сохранялась не в указанный день недели — по умолчанию воскресенье, а например каждый день?

                • 21.05.2008 21:18, Silver Ghost сказал:

                  MSW, сделаю в следующей версии параметром. :)

                  • 26.05.2008 01:31, MySQLDBBackup v.1.0 | Записки старого сисадмина сказал:

                    […] Сегодня переписал и доработал скрипт бекапа баз данных MySQL. […]

                    • 03.02.2009 12:31, freeman сказал:

                      Как насчет блокировки таблиц MyISAM перед непосредственно дампом?

                      • 1 старых комментариев не отображается. Нажмите, чтобы отобразить все.
                      (Обязательно)
                      (Обязательно, не публикуется)

                      Надпись "Выполнено на 99%" радует только первые три часа....
                      Яндекс.Метрика beget