Pull to refresh

Резервное копирование mysql-базы. мой путь =)

Reading time 2 min
Views 2K
Задача стояла такая – часто бэкапить базу + экономить место на харде.
Прочитав одну статейку по созданию инкрементального бэкапа для дампов через diff понял что это всё бредятина какая-то.
Промелькнула мысль – а почему бы не заливать дамп базы в git? Ведь можно будет и откатиться на нужный коммит, и склонировать репозиторий для экспериментов, и вкушать все прелести данной системы. =)
Сразу определися – я делал всё под FreeBSD. Следовательно под Linux нужно будет подпилить напильничком.
Ну, начинёмс! Сначала ставим гит (если нет в системе)!
Предварительно обновив порты пишем cd /usr/ports/devel/git && make install clean
Git поставился. Выбираем место для папки с бэкапом базы и создаём папку mkdir /backup/bases/test
Далее cd /backup/bases/test и инициализируем там репозиторий командой git init
Я написал скрипт который дампит базу потаблично, добавляет файлы в репозиторий и создаёт коммит с датой бэкапа

#!/usr/local/bin/bash
backupurl=”/backup/bases/test”
for i in `/usr/local/bin/mysql -e “use test;show tables;” -uUSER -pPASS|tr -d “|”|grep -v “Tables_in_”`;do /usr/local/bin/mysqldump –quick –skip-extended-insert –dump-date=false –compact=true -uUSER -pPASS test $i >$backupurl/$i.sql;done
/usr/local/bin/mysqldump -uUSER -pPASS –no-data test > $backupurl/structure.sql #отдельно бэкапим структуру базы
cd $backupurl
/usr/local/bin/git add . #добавляем файлы
sleep 2
/usr/local/bin/git commit -am “backup `date +%d.%m.%y.%H.%M`” #коммит с чилом и временем


Запечатываем данный скрипт в файл, делаем его исполняемым и плюхаем в крон.
Далее после нескольких бэкапов заходим в папку с бэкапом базы и пишем git log – вам выведется история наших бэкапов.
Напоследок:

  • Читайте документацию по гиту
  • Поставьте в крон (в зависимости от объёмов базы… лично у меня раз в сутки) команду cd /backup/bases/test && git gc – это серьёзно сжимает репозиторий
  • Для отката желательно склонить репозиторий и сделать откат через git reset HEAD^^
  • Опция –skip-extended-insert ОБЯЗАТЕЛЬНА. она запрещает расширеные инсерты которые сводят на нет всю мою затею с гитом
Tags:
Hubs:
+3
Comments 13
Comments Comments 13

Articles