Создание бэкапа на nic.ru
Внимание! Данный пост был опубликован более года назад и, возможно, уже утратил свою былую актуальность. Но это не точно.

Хреновенький, не очень удобный, но работающий скрипт для создания бэкапа всех сайтов + БД на хостинге, имя которому - nic.ru. Хосинг ущербный, и использовать что-то более и менее адекватное на нем - проблематично. Перейдем к телу:

#!/bin/bash
## @project   Nic.ru backup script
## @copyright 2014 <https://github.com/tarampampam>
## @github    [https://github.com/tarampampam/nic.ru-bascup-script/](https://github.com/tarampampam/nic.ru-bascup-script/)
## @version   0.1.3
##
## @depends   mysqldump, tar

# *****************************************************************************
# ***                               Config                                   **
# *****************************************************************************

## nic.ru hosting id, look in 'cd ~ && pwd', ex.:
## \[%YourID%@web2006 ~\]$ cd ~ && pwd
## /home/%YourID%
HostingID=YourID
## Path to home dir, not need in change
PathToHomeDir=/home/$HostingID
## Path to directory, where backups will stored
PathToBackupsDir=$PathToHomeDir/backups
## Path to directory, where store DataBase dumps (add to backup file, and
##   remove from file system), not need in change
PathToDatabaseDumps=$PathToHomeDir/database-backup
##
## !!! IMPORTANT !!!
## Add your login, password and db_name to 'mysqldump' (line ~84)
## !!! IMPORTANT !!!
##
## Days count for backup files store, not need in change
StoreBackupsDaysCount=20
# Path to link file, set empty value ("") for disable this
linkfile=$PathToHomeDir/yoursite.com/docs/dir-with-password/backup-latest.tar.bz2

# *****************************************************************************
# ***                            END Config                                  **
# *****************************************************************************

## Found here - [http://goo.gl/4Oi5ZK](http://goo.gl/4Oi5ZK)
cRed='e\[1;31m'; cGreen='e\[0;32m'; cNone='e\[0m'; cYel='e\[1;33m';
cBlue='e\[1;34m'; cGray='e\[1;30m'; cWhite='e\[1;37m';

## Helpers Functions ##########################################################

logmessage() {
  ## $1 = (not required) '-n' flag for echo output
  ## $2 = message to output

  flag=''; outtext='';
  if \[ "$1" == "-n" \]; then
    flag="-n "; outtext=$2;
  else
    outtext=$1;
  fi

  echo -e $flag\[$(date +%H:%M:%S)\] "$outtext";
}

## Begin work #################################################################

# Create directory for backups (if not exists)
if \[ ! -d $PathToBackupsDir \]; then
  logmessage -n "Create $PathToBackupsDir.. ";
  mkdir -p $PathToBackupsDir;
  if \[ -d $PathToBackupsDir \]; then
    echo -e "${cGreen}Ok${cNone}";
  else
    echo -e "${cRed}Error${cNone}";
    exit 1;
  fi
fi

# Clean temp dumps $PathToDatabaseDumps + create it (ex: broken last run)
logmessage -n "Clean and prepare $PathToDatabaseDumps.. ";
rm -R -f $PathToDatabaseDumps;
mkdir -p $PathToDatabaseDumps;
if \[ -d $PathToBackupsDir \]; then
  echo -e "${cGreen}Ok${cNone}";
else
  echo -e "${cRed}Error${cNone}";
fi

logmessage -n "Backup DataBase(s) to $PathToDatabaseDumps.. "
mysqldump --force --opt --add-locks --user=UserName1 -pPassword1 --databases DatabaseName1 \> $PathToDatabaseDumps/DatabaseName1.sql
mysqldump --force --opt --add-locks --user=UserName2 -pPassword2 --databases DatabaseName2 \> $PathToDatabaseDumps/DatabaseName2.sql
# Write here all files to check exists
if \[ -f $PathToDatabaseDumps/DatabaseName1.sql \] && \[ -f $PathToDatabaseDumps/DatabaseName2.sql \]; then
  echo -e "${cGreen}Complete${cNone}";
else
  echo -e "${cRed}Error${cNone}";
fi


cd $PathToBackupsDir
thisBackupFileName=backup-$(date +%y-%m-%d--%H-%M)-$HostingID.tar.bz2

logmessage -n "Pack files to $PathToBackupsDir/${cYel}$thisBackupFileName${cNone}.. "
tar -cpPjf $PathToBackupsDir/$thisBackupFileName 
    --exclude=$PathToBackupsDir* 
    --exclude=$PathToHomeDir/dir1/\* 
    --exclude=$PathToHomeDir/dir2/\* 
    --exclude=$PathToHomeDir/tmp/* 
    --exclude=*httpd.core 
    --exclude=$linkfile 
    $PathToHomeDir;
echo -e "${cGreen}Complete${cNone}";

# Make some clean
logmessage -n "Make some clean.. ";
rm -R -f $PathToDatabaseDumps;
echo -e "${cGreen}Complete${cNone}";

# Make link to latest PathToBackupsDir file
if \[ ! "linkfile" == "" \]; then
  logmessage -n "Make link $PathToBackupsDir/$thisBackupFileName ${cYel}<===>${cNone} $linkfile.. ";
  rm -f $linkfile;
  ln $PathToBackupsDir/$thisBackupFileName $linkfile;
  echo -e "${cGreen}Complete${cNone}";
fi

sleep 2s;

## Finish work ################################################################

logmessage -n "Deleting old backups from $PathToBackupsDir.. "
find $PathToBackupsDir -type f -mtime +$StoreBackupsDaysCount -exec rm '{}' ;
for FILE in $(find $PathToBackupsDir -mtime +$StoreBackupsDaysCount -type f); do
  logmessage "${cRed}Deliting${cNone} $FILE as Old";
  rm -f $FILE;
done
echo -e "${cGreen}Complete${cNone}";

И небольшие комментарии к скрипту:

  • Всё, что тебе необходимо подправить под себя - я подчеркнул
  • Формат даты подсмотри хоть тут
  • PathToBackupsDir - это та папка, куда бэкапы будут складываться;
  • Вызовы mysqldump - создание дампов баз (по одному дампу за вызов);
  • Те пути и типы файлов, которые необходимо исключить из бэкапа - прописаны в строках, начинающихся со слова --exclude=

Ссылки