Бэкап базы данных

Для того, чтобы выполнить бэкап базы данных, нужно выполнить следующие действия: Подготовка:

Убедитесь, что:

  • на жёстком диске достаточно свободного места.

df -h
  • Имеется установленная и работоспособная версия postgresql, в данный момент она запущена.

sudo service postgresql status

Проведение бэкапа

Выполните команду

sudo staffcop info

Если версия staffcop выше 3.0.233, выполните команду

sudo staffcop backup_db

Ваш бэкап будет размещен в папке /var/lib/staffcop/staffcop_backup

Для переноса на другой компьютер скопируйте эту папку по сети либо на переносной носитель.

В случае, если ваша версия стаффкоп - 2.х либо младше 3.0.233 - выполните команду

wget -P /tmp/ -N http://dist.staffcop.ru/utils/script/backup/bp_install.sh && sudo bash /tmp/bp_install.sh

Она выкачает и установит необходимые программные компоненты. После ее выполнения нужно повторить

sudo staffcop backup_db

Восстановление бэкапа

Для восстановления бэкапа нужно выполнить команду:

sudo staffcop restore_db

В случае, если файл бэкапа находится не в /var/lib/staffcop/staffcop_backup путь к нему нужно указать явно, например:

sudo staffcop restore_db /home/support/backup

Примечание

Путь к папке должен быть указан полностью!

Исходные коды скриптов:

  • Скрипт инсталлятора - bp_install.sh

#!/bin/bash -e
cd ~
wget -O ~/backup_db http://dist.staffcop.ru/utils/script/backup/backup_db
cp ~/backup_db /usr/share/staffcop/bin/
chmod +x /usr/share/staffcop/bin/backup_db

wget -O ~/restore_db http://dist.staffcop.ru/utils/script/backup/restore_db \
cp ~/restore_db /usr/share/staffcop/bin/restore_db \
chmod +x /usr/share/staffcop/bin/restore_db
  • Скрипт создания бэкапа - backup_db.sh

#!/bin/bash -e
echo "Backup StaffCop"

if ! [ -f /bin/tar ]; then
echo "No app tar. Please install 'sudo apt-get install tar'"
exit 3
fi

if ! [ -f /usr/bin/pg_dump ]; then
echo "No app pg_dump. Exit"
exit 3
fi
#---------------------------
bname=${DBNAME}-db.dump
sname=${DBNAME}-setting.tar
cname=${DBNAME}-sert.tar
def_folder="staffcop_backup"
def_patch="/var/lib/staffcop"
#--------------------------

if [ $1 ] ;  then
patch=$1
else
patch=${def_patch}
fi

if ! [ -f /usr/bin/realpath ]; then
echo "Warning. No app realpatch. Please install 'sudo apt-get install realpath'
else
patch=$(realpath $patch)
fi

patch=${patch}/${def_folder} \
echo "Backup patch $patch"

#Create backup patch \
echo "Create backup patch" \
mkdir -p $patch \
chmod 777 -R $patch

if ! [ -d  "$patch" ] ; then \
echo "directory does not exist. exit" \
exit 1 \
fi \
echo "Remove old backup files" \
rm $patch/* || true

#File name \
full_patch=${patch}/${bname} \
sfull_patch=${patch}/${sname} \
cfull_patch=${patch}/${cname}

echo "Backup patch $full_patch" \
echo "Setting patch $sfull_patch" \
echo "CA patch $cfull_patch" \
echo "------------------------------------------" \
echo "Backup config" \
tar --absolute-names --create --verbose --file $sfull_patch /etc/staffcop

echo "Backup CA" \
tar --absolute-names --create --verbose --file $cfull_patch /var/lib/staffcop/CA

echo "Backup DB" \
sudo -u postgres pg_dump --host=$DBHOST_OPTION --port=$DBPORT_OPTION  --verbose                                                                                         --compress=7 --clean --create --blobs --format=c --file=$full_patch --dbname=$DB                                                                                        NAME

echo "------------------------------------------" \
echo "Backup patch"

if ! [ -f $full_patch ]; then \
echo 'No file db. Error' \
exit 1 \
else \
echo "File DB: $(du -h $full_patch)" \
fi

if ! [ -f $sfull_patch ]; then \
echo 'No file setting. Error' \
exit 1 \
else \
echo "File seting: $(du -h $sfull_patch)" \
fi

if ! [ -f $sfull_patch ]; then \
echo 'No file CA. Error' \
exit 1 \
else \
echo "File CA: $(du -h $sfull_patch)" \
fi
  • Скрипт восстановления базы данных - restore_db.sh:

#!/bin/bash
#---------------------------
bname=${DBNAME}-db.dump
sname=${DBNAME}-setting.tar
cname=${DBNAME}-sert.tar
def_folder="staffcop_backup"
def_patch="/var/lib/staffcop/${def_folder}"
#--------------------------

if [ $1 ] ;  then
        patch=$1
else
        patch=${def_patch}
fi

if ! [ -f /usr/bin/realpath ] ; then
 echo "Warning. No app realpatch. Please install 'sudo apt-get install realpath'"
else
 patch=$(realpath $patch)
fi

if ! [ -d  "$patch" ] ; then
        echo "directory does not exist. exit"
        exit 1
fi

echo "Restore patch $patch"

full_patch=${patch}/${bname}
cfull_patch=${patch}/${cname}

if ! [ -f $full_patch ]; then
        echo "No backup db"
else
        echo "Restore backup staffcop DB ${DBNAME}"
        echo "Stop service staffcop"
        service staffcop stop
        echo "Restart PG"
        service postgresql restart
        echo "Start restore ${DBNAME}"

        sudo -u postgres pg_restore  --host=$DBHOST_OPTION --port=$DBPORT_OPTION  --verbose --clean --create  --format=c $full_patch -d postgres
        echo "Analyse ${DBNAME}"
        echo "analyze;" | sudo -u postgres psql ${DBNAME}
        echo "Vacuum"
        echo "vacuum full analyze;" | sudo -u postgres psql ${DBNAME}
        echo "Reindex"
        echo "reindex database ${DBNAME};" | sudo -u postgres psql ${DBNAME}
        staffcop init
        echo "Sessions reset"
        staffcop sessions_reset full
        echo "Finish restore  ${DBNAME}"
        staffcop info
fi

echo "Certificate"
if ! [ -f $cfull_patch ]; then
        echo "No backup sert"
else
        service staffcop stop
        service nginx stop
        rm /var/lib/staffcop/CA/*
        tar --absolute-names --extract --verbose --file $cfull_patch
        chown -R staffcop:staffcop /var/lib/staffcop/CA/
        chmod 775 -R /var/lib/staffcop/CA/
        service staffcop start
        service nginx start
fi
service staffcop start