Бэкап базы данных¶
Для того, чтобы выполнить бэкап базы данных, нужно выполнить следующие действия: Подготовка:
Убедитесь, что:
на жёстком диске достаточно свободного места.
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