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

Эта запись опубликована в рубрике [ PHP, Ubuntu ]

Долго я искал нормальный скрипт для резервного копирования баз данных 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).

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Post to Twitter Post to Delicious Post to Facebook Post to MySpace Post to Ping.fm

Оценить эту запись:
1 звезда2 звезды3 звезды4 звезды5 звезд
Метки: [ , ]
Вы можете следить за ответами к этой записи через RSS 2.0 feed. Вы можете оставить мнение, или трэкбэк с собственного сайта.

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

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

    Забыли инклуд конфига

    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

    • 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, сделаю в следующей версии параметром. :)

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

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

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

                        • 04.02.2009 10:16, Silver Ghost сказал:

                          @freeman: можно указать –lock-tables в скрипте…

                          (Обязательно)
                          (Обязательно, не публикуется)