Скрипт для создания резервных копий

Рубрика: Linux -> Tips
Метки: | |
Пятница, 25 июня 2010 г.
Подписаться на комментарии по RSS
Решил поделиться своим скриптом для создания резервных копий файлов и баз mysql.

backups.sh
  1. #!/bin/bash
  2. backupmaindir="/mnt/backup/"
  3. mysqlopts="-u root -ppass"
  4. dirs="/etc /home/*"
  5.  
  6. bdate=`date +%F_%H:%M:%S`
  7. backupdir="$backupmaindir$bdate"
  8. sqldir="$backupdir/sql"
  9.  
  10. echo "Delete old backups..."
  11.  
  12. find $backupmaindir -type d -maxdepth 1 -mindepth 1 -cmin +20160 -exec rm -Rf "{}" \;
  13.  
  14. mkdir -p $backupdir/home
  15. mkdir -p $sqldir
  16. echo  "Dump DB..."
  17. for dbname in `echo show databases| mysql $mysqlopts`; do
  18.     if [ $dbname = 'Database' ]; then
  19.         continue ;
  20.     fi
  21.     echo "Dump $dbname..."
  22.     mysqldump $mysqlopts $dbname|gzip -cf >  "$sqldir/$dbname.sql.gz"
  23. done;
  24.  
  25. echo "Backup $dirs..."
  26. ls -1d $dirs|
  27.     while read dname; do
  28.         echo "Backup $dname..."
  29.         mkdir -p $backupdir$dname
  30.         nice -n15 mksquashfs "$dname" "$backupdir$dname.squashfs"
  31.     done
  32. echo "end"

Настройка:
  • backupmaindir - директория в которую будут сохраняться копии, в ней будут созданы поддиректории вида YYYY-MM-DD_hh:mm:ss.
  • mysqlopts - параметры подключения к mysql (можно указать удаленный хост).
  • dirs - какие директории копировать, если указать /home, то будет создана копия /home одним файлом, а если указать /home/*, то каждая поддиректория будет в отдельном файле.

Строчка
  1. find $backupmaindir -type d -maxdepth 1 -mindepth 1 -cmin +20160  -exec rm -Rf "{}" \;
удаляет резервные копии сделанные более чем 20160 минут назад (14 дней).

Как делаются дампы с помощью mysqldump думаю все знают.
Создание копий файлов:
  1. nice -n15 mksquashfs "$dname" "$backupdir$dname.squashfs"
nice -n15 - уменьшает приоритет процесса до 15 (чтоб не особо нагружал систему)
mksquashfs - создаст "архив" squashfs
Squashfs очень удобна для хранения резервных копий т.к. это файловая система со сжатием, и для доступа к файлам достаточно просто примонтировать файл. burik-nb home # mount -o loop burik.squashfs ./burik PS: для монтирования squashfs в ядре должна быть включена поддержка этой ФС (CONFIG_SQUASHFS)

Если Вы хотите получить tar.bz2 то:
  1. nice -n15 tar -cjpf "$backupdir$dname.tar.bz2" "$dname"


Надеюсь эти копии Вам никогда не понадобятся. ;)

Комментариев: 1

  1. 2011-11-14 в 23:52:43 | Комментатор 2
    ]]>]]> for dbname in `echo show databases| mysql $mysqlopts`; do
    if [ $dbname = 'Database' ]; then
    continue ;
    fi
    echo "Dump $i..."
    mysqldump $mysqlopts $i|gzip -cf > "$sqldir/$i.sql.gz"
    done;

    Ошибка - переменная $i должна быть $dbname

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



Valid XHTML 1.0 Transitional