#!/bin/bash

if [ "$1" == "" ]; then
  echo "Использование: `basename $0` database"
  echo " database - путь к базе данных, относительно каталога data, например mydb/mydb"
  exit 1
fi
          
cd `dirname $0`
if [ -f dbparams ]; then
  source ./dbparams
else
  startfolder=/home/db
  IBPATH=/opt/firebird
  IBUSER=sysdba
  IBPASS=masterkey
fi

dbname=$1
folderdb=`dirname $dbname`
filedb=`basename $dbname`
copydir=$startfolder/copy/$folderdb/`date +%d-%m-%y`
copyfile=$copydir/$filedb
dbname=$startfolder/data/$dbname

ssh_cmd="ssh -p $backup_port"
scp_cmd="scp -P $backup_port"

dateformatstr='%d-%m-%Y %H:%M:%S'
echo_message () {
# Echo message with datetime
  echo "`date +\"$dateformatstr\"` $1"
}

mkdir -p $copydir
# --- Start logging --- #
LOG=$copydir/copy.log
echo "logging into $LOG"
exec 6>&1   # Link file descriptor #6 with stdout
exec > $LOG # Replace stdout with file $LOG

echo_message "copy started: $dbname"

# Блокировать базу данных с помощью параметра -L (Lock): 
echo_message "Блокировка базы данных $dbname"
$IBPATH/bin/nbackup -L $dbname -U $IBUSER -P $IBPASS

# Создать копию базы данных
echo_message "Копирование базы данных"
cp $dbname $copyfile    

# Разблокировать базу данных с помощью параметра -N (uNlock):
echo_message "Снятие блокировки с базы данных"
$IBPATH/bin/nbackup -N $dbname -U $IBUSER -P $IBPASS

# Разблокировать копию базы данных с помощью параметра -F:
echo_message "Снятие блокировки с копии базы данных"
$IBPATH/bin/nbackup -F $copyfile

minutes=`date +%M`
copy_hour=$copydir/../`date +%H`_`expr $minutes / 15`_$filedb
echo "Создание ежечасовой копии $copy_hour"
cp $copyfile $copy_hour

cd $startfolder
rm_old_files=$startfolder/rm_old_files.sh
perl $dbscriptsfolder/trim.pl $startfolder/copy/$folderdb $days
if [ -f $rm_old_files ]; then
  echo_message "Удаление старых архивов"
  $rm_old_files;
  if [ $? -ne 0 ]; then
    echo_message "Не удалось удалить старые архивы"
  fi
  rm $rm_old_files -f
fi

current_user=`whoami`
if [ ! "$current_user" = "dbadmin" ] ; then
  sudo_dbadmin='sudo -u dbadmin'
fi
	
res=`$sudo_dbadmin $ssh_cmd $backup_user@$backup_host mkdir -p $copy_folder 2>&1`
if [ $? -ne 0 ] ; then
  echo_message " Не удалось создать папку $copy_folder на сервере $backup_host $res" 1
fi
	  
echo ""
# получение списка ip адресов для всех интерфейсов, и перенаправление данного списка в файл лога
/sbin/ifconfig | grep "inet addr" 2>&1
res=`$sudo_dbadmin $scp_cmd $LOG $backup_user@$backup_host:~/$copy_folder/copy.log 2>&1`
if [ $? -ne 0 ] ; then
  echo_message " $res"
fi

echo_message "Done"
exec 1>&6 6>&- # Restore stdout and close file descriptor #6.

