Перейти к основному содержанию
 

XWiki — резервное копирование

XWiki

Итак, вы подняли и настроили XWiki, вся компания счастлива. Теперь, как любой грамотный сисадмин, вы должны настроить резервное копирование этого чуда.

Бэкапить будем:

  • Базу данных
  • Файлы данных
  • Файлы конфигурации — не бэкаплю, вы можете свои скопировать куда-нибудь, их не имеет смысла постоянно автоматически бэкапить, достаточно одного раза вручную.

База данных у меня Postgresql.

Процесс резервного копирования прост:

  1. Останавливаем XWiki.
  2. Бэкапим БД.
  3. Бэкапим файлы.
  4. Запускаем XWiki.

На время резервного копирования XWiki недоступно пользователям.

Есть альтернативные способы резервирования. Если у вас XWiki находится на виртуальной машине, то имеет смысл рассмотреть резервирование виртуалки целиком. Такой способ не потребует остановки виртуальной машины.

Настройка резервного копирования

Создадим директорию для хранения резервных копий, Я по SMB монтирую шару в /backup. Резервные копии баз данных будут храниться в /backup/xwiki/db/. Резервная копия файлов данных будет храниться в /backup/xwiki/data/.

Бэкапить файлы будем с помощью rsync:

apt-get install rsync

Весь код сосредоточим в файле /opt/cron/wiki_maintenance.sh.

#!/bin/bash

#####
# Uncomment the following line if you rather want to run the script manually.
# Display usage if the script is not run as root user
#        if [[ $USER != "root" ]]; then
#                echo "This script must be run as root user!"
#                exit 1
#        fi
#
# echo "Super User detected!!"
# read -p "Press [ENTER] to start the procedure, this will stop the seafile server!!"
#####

DBUSER="xwiki"
DBPASSWORD="ПАРОЛЬ"
DBHOST="localhost"
DBPORT="5432"
DBNAME="xwiki"
DBBACKUPDIR="/backup/xwiki/db/"
DBARCHDIR="/backup/xwiki/db/archive/"
DATABACKUPDIR="/backup/xwiki/data/"
DATADIR="/var/lib/xwiki/data/"

log(){
   message="$(date +"%y-%m-%d %T") $@"
   echo $message
}

# stop the server
log "------------------------------------------"
log "Starting maintenance procedure for XWiki"
log "Stopping the web server"
systemctl stop tomcat8.service

log "Giving the server some time to shut down properly"
sleep 20

# backup databases
log "Starting databases backup"
rm ${DBARCHDIR}*.bz2
mv ${DBBACKUPDIR}*.bz2 ${DBARCHDIR}

DBDATE=`date +"%Y-%m-%d-%H-%M-%S"`
pg_dump -Fc --dbname=postgresql://${DBUSER}:${DBPASSWORD}@${DBHOST}:${DBPORT}/${DBNAME} > ${DBBACKUPDIR}${DBNAME}.dump.${DBDATE}
bzip2 ${DBBACKUPDIR}${DBNAME}.dump.${DBDATE}

# backup data
log "Starting data backup"
rsync -az --delete ${DATADIR} ${DATABACKUPDIR}

# start the server again
log "Starting the web server"
systemctl start tomcat8.service

log "XWiki maintenance procedure complete!"

Здесь:

  • DBUSER — пользователь БД.
  • DBPASSWORD — пароль пользователя БД.
  • DBHOST — сервер БД, у меня localhost
  • DBPORT — порт БД.
  • DBNAME — имя базы данных
  • DBBACKUPDIR — путь куда бэкапить БД
  • DBARCHDIR — путь куда сохранять предыдущий бэкап БД (на всякий случай)
  • DATABACKUPDIR — путь куда бэкапить файлы.
  • DATADIR — путь откуда бэкапить файлы.

Для резервирования БД используем pg_dump:

pg_dump -Fc --dbname=postgresql://${DBUSER}:${DBPASSWORD}@${DBHOST}:${DBPORT}/${DBNAME} > ${DBBACKUPDIR}${DBNAME}.dump.${DBDATE}

Бэкап сжимаем с помощью bzip:

bzip2 ${DBBACKUPDIR}${DBNAME}.dump.${DBDATE}

Файлы бэкапим с помощью rsync:

rsync -az --delete ${DATADIR} ${DATABACKUPDIR}
  • -a, --archive — archive mode; equals -rlptgoD (no -H,-A,-X)
    
  • -z, --compress — compress file data during the transfer
  • --delete — delete extraneous files from dest dirs

Я удаляю из архивной копии более несуществующие файлы.

Теги