Итак, вы подняли и настроили XWiki, вся компания счастлива. Теперь, как любой грамотный сисадмин, вы должны настроить резервное копирование этого чуда.
Бэкапить будем:
- Базу данных
- Файлы данных
- Файлы конфигурации — не бэкаплю, вы можете свои скопировать куда-нибудь, их не имеет смысла постоянно автоматически бэкапить, достаточно одного раза вручную.
База данных у меня Postgresql.
Процесс резервного копирования прост:
- Останавливаем XWiki.
- Бэкапим БД.
- Бэкапим файлы.
- Запускаем 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
Я удаляю из архивной копии более несуществующие файлы.