Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
6d48acf
backup: general script
bourasom Mar 4, 2019
a0f93a2
Stop eXo and ES
bourasom Mar 4, 2019
756d64e
Mongo and db start/stop
bourasom Mar 4, 2019
9a4b334
backup database
bourasom Mar 6, 2019
d84faae
backup data and mongodb
bourasom Mar 6, 2019
1a687ae
Update srv/exo/bin/_dumpDatabase.sh
vsellier Mar 7, 2019
c83409f
Update srv/exo/bin/_dumpDatabase.sh
vsellier Mar 7, 2019
cf95125
Update srv/exo/bin/_dumpDatabase.sh
vsellier Mar 7, 2019
30521b1
Update srv/exo/bin/_dumpData.sh
vsellier Mar 7, 2019
8b95d5d
Update backup PR
bourasom Mar 7, 2019
14b0243
Abort platform startup when errors in logs
bourasom Mar 8, 2019
f40222c
Add rsync option and es backup
bourasom Mar 8, 2019
ecd6561
update backup scripts
bourasom Apr 9, 2019
ca9af65
generic systemd cmd function
bourasom Apr 11, 2019
8f488d7
local rsync in case of no backup download
bourasom Apr 11, 2019
05b1ce9
code format
Apr 11, 2019
0841b01
Improve start stop commamds
Apr 11, 2019
892d338
Don't stop eXo if an ERROR log appears on the startup logs
Apr 11, 2019
f68ec31
Improve exo backup
Apr 11, 2019
dae2792
Improve elasticsearch backup
Apr 11, 2019
34e114f
Rename chat database parameter
Apr 11, 2019
b77e583
Mysql backup changes
Apr 11, 2019
de93172
translate start/stop script names
Apr 11, 2019
7e13cc2
Use the same date for all the archives
Apr 11, 2019
84c2aaf
Add drop database instruction in the dump
bourasom Apr 12, 2019
00b0da4
Add restore scripts
bourasom Apr 12, 2019
0c04bb4
update retore_plateform script
bourasom Apr 12, 2019
594a516
Some cleanup in restore
bourasom Apr 12, 2019
7d09ad3
Fix typo on script names
Apr 12, 2019
925d6d1
change from drop-database to drop-table in db dump option
bourasom Apr 12, 2019
4b711cc
one more typo
Apr 12, 2019
4ca6363
Set executable permission
Apr 13, 2019
3bad63d
Fix eXo startup detection
Apr 13, 2019
b6f443e
Fix one mor typo
Apr 13, 2019
54122b7
utility script to install/synchonize all the servers
Apr 13, 2019
2922e33
Elasticsearch restore
Apr 13, 2019
50acacd
Fix remote and local backup sync
Apr 13, 2019
abfd954
rename _setenv-template.sh
Apr 13, 2019
8898d52
improve mongo restoration
Apr 13, 2019
475838e
mysql restore
Apr 13, 2019
915a0c3
exo data restore
Apr 13, 2019
35afbe9
allow is-active action on sudoers
Apr 13, 2019
1402d67
Add a backup retention delay
Apr 14, 2019
3c07762
Automatically retrieve ssh server fingerprint
Apr 14, 2019
4c1c6bb
Fix eXo startup when it's the first start of a day
Apr 14, 2019
f9074ba
fix frenglish typo
Apr 14, 2019
64ed00f
fix archive transfer during the restore
Apr 14, 2019
b32116a
use more convenient directory
Apr 15, 2019
d59a964
ITOP-4405: change cmnd_alias for sudoers in case of same server
bourasom Jan 14, 2020
0982376
don't expect the exo data to be in a directory named data
Apr 14, 2020
5ad95d3
allow to backup locally without ssh usage
Apr 14, 2020
a6693b4
allow to restore locally without using ssh
Apr 14, 2020
d333483
TASK-23980 #6 Warmup the server after a restart (#7)
May 4, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions srv/exo/bin/_cleanBackups.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/bash -eu

# #############################################################################
# Initialize
# #############################################################################
SCRIPT_NAME="${0##*/}"
SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load env settings
source ${SCRIPT_DIR}/setenv.sh
# Load common functions
source ${SCRIPT_DIR}/_functions.sh


echo "[INFO] ======================================="
echo "[INFO] = Remove old backups and keep only the ${BACKUP_RETENTION} newest ones ..."
echo "[INFO] ======================================="

pushd ${BACKUP_DIR} &>/dev/null

NB_FILES_PER_BACKUP=4

LINES=$((BACKUP_RETENTION * NB_FILES_PER_BACKUP + 1 ))
rm -rvf $(find . -maxdepth 1 -type f | xargs ls -t | tail -n +${LINES})

echo "[INFO] Done"
popd &>/dev/null
31 changes: 31 additions & 0 deletions srv/exo/bin/_dumpData.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash -eu
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WDYT to name this script dumpExoData.sh ?


# #############################################################################
# Initialize
# #############################################################################
SCRIPT_NAME="${0##*/}"
SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load env settings
source ${SCRIPT_DIR}/setenv.sh
# Load common functions
source ${SCRIPT_DIR}/_functions.sh

BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")}

# Initialize working directory
mkdir -p ${BACKUP_WORKING_DIR}/tmp_data
rm -rf ${BACKUP_WORKING_DIR}/tmp_data/*
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should add the v option to help for a potential need to debug

pushd ${BACKUP_WORKING_DIR}/tmp_data >/dev/null 2>&1

echo "[INFO] ======================================="
echo "[INFO] = Compressing ${PLF_NAME} data into ${BACKUP_WORKING_DIR}/tmp_data/${PLF_NAME}-data-${BACKUP_DATE}.tar.bz2 ..."
echo "[INFO] ======================================="
echo "[INFO] $(display_date)"

pushd ${BACKUP_WORKING_DIR}/tmp_data >/dev/null 2>&1

display_time tar --directory ${EXO_DATA_DIR} --use-compress-prog=pbzip2 -cpf ${BACKUP_WORKING_DIR}/tmp_data/${PLF_NAME}-data-${BACKUP_DATE}.tar.bz2 .

popd >/dev/null 2>&1
echo "[INFO] Done"
31 changes: 31 additions & 0 deletions srv/exo/bin/_dumpElasticsearch.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash -eu

# #############################################################################
# Initialize
# #############################################################################
SCRIPT_NAME="${0##*/}"
SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load env settings
source ${SCRIPT_DIR}/setenv.sh
# Load common functions
source ${SCRIPT_DIR}/_functions.sh

BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")}

# Initialize working directory
mkdir -p ${BACKUP_WORKING_DIR}/tmp_elasticsearch
rm -rf ${BACKUP_WORKING_DIR}/tmp_elasticsearch/*
pushd ${BACKUP_WORKING_DIR}/tmp_elasticsearch >/dev/null 2>&1

echo "[INFO] ======================================="
echo "[INFO] = Compressing ${PLF_NAME} data into ${BACKUP_WORKING_DIR}/tmp_elasticsearch/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 ..."
echo "[INFO] ======================================="
echo "[INFO] $(display_date)"

pushd ${BACKUP_WORKING_DIR}/tmp_elasticsearch >/dev/null 2>&1

display_time tar --directory $(dirname ${ELASTICSEARCH_DATA_DIR}) --use-compress-prog=pbzip2 -cpf ${BACKUP_WORKING_DIR}/tmp_elasticsearch/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 $(basename ${ELASTICSEARCH_DATA_DIR})

popd >/dev/null 2>&1
echo "[INFO] Done"
42 changes: 42 additions & 0 deletions srv/exo/bin/_dumpMongoDb.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/bash -eu

# #############################################################################
# Initialize
# #############################################################################
SCRIPT_NAME="${0##*/}"
SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load env settings
source ${SCRIPT_DIR}/setenv.sh
# Load common functions
source ${SCRIPT_DIR}/_functions.sh

# Initialize working directory
mkdir -p ${BACKUP_WORKING_DIR}/tmp_mongo
rm -rf ${BACKUP_WORKING_DIR}/tmp_mongo/*
pushd ${BACKUP_WORKING_DIR}/tmp_mongo/ >/dev/null 2>&1

BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")}

# settings : http://docs.mongodb.org/manual/single/index.html#document-tutorial/backup-databases-with-binary-database-dumps

echo "[INFO] $(display_date)"
echo "[INFO] ======================================="
echo "[INFO] = Dumping MongoDB ${CHAT_DATABASE} into ${PLF_NAME}-${CHAT_DATABASE}-${BACKUP_DATE}.tar.bz2 ..."
echo "[INFO] ======================================="
echo "[INFO] $(display_date)"

TARGET="${PLF_NAME}-${CHAT_DATABASE}-${BACKUP_DATE}.tar.bz2"

display_time mongodump -o ${BACKUP_WORKING_DIR}/tmp_mongo --db=${CHAT_DATABASE}

echo "[INFO] Compress mongo dump into ${BACKUP_WORKING_DIR}/tmp_mongo/${TARGET}"
display_time tar --directory ${BACKUP_WORKING_DIR}/tmp_mongo --use-compress-prog=pbzip2 -cpf ${BACKUP_WORKING_DIR}/tmp_mongo/${TARGET} ${CHAT_DATABASE}

echo "[INFO] Remove ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}"
display_time rm -rf ${BACKUP_WORKING_DIR}/tmp_mongo/${CHAT_DATABASE}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should create an tar of the backuped data and cleanup the wordking dir after

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

echo "[INFO] Done"
echo "[INFO] $(display_date)"

popd >/dev/null 2>&1
34 changes: 34 additions & 0 deletions srv/exo/bin/_dumpMysqlDatabase.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/bin/bash -eu

# #############################################################################
# Initialize
# #############################################################################
SCRIPT_NAME="${0##*/}"
SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load env settings
source ${SCRIPT_DIR}/setenv.sh
# Load common functions
source ${SCRIPT_DIR}/_functions.sh

DUMP_OPTIONS="--single-transaction --add-drop-table"

# Initialize working directory
mkdir -p ${BACKUP_WORKING_DIR}/tmp_db
rm -rf ${BACKUP_WORKING_DIR}/tmp_db/*
pushd ${BACKUP_WORKING_DIR}/tmp_db >/dev/null 2>&1

BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")}

TARGET_NAME="${PLF_NAME}-db-${BACKUP_DATE}.sql.bz2"

echo "[INFO] ======================================="
echo "[INFO] = Dumping database ${EXO_DATABASE} into ${BACKUP_WORKING_DIR}/tmp_db/${TARGET_NAME} ..."
echo "[INFO] ======================================="
echo "[INFO] $(display_date)"

display_time mysqldump ${DUMP_OPTIONS} ${EXO_DATABASE} | pbzip2 >${BACKUP_WORKING_DIR}/tmp_db/${TARGET_NAME}

echo "[INFO] Done"

popd >/dev/null 2>&1
93 changes: 93 additions & 0 deletions srv/exo/bin/_functions.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/bin/bash -eu

#Activate aliases usage in scripts
shopt -s expand_aliases

# Various command aliases
alias display_time='/usr/bin/time -f "[INFO] Return code : %x\n[INFO] Time report (sec) : \t%e real,\t%U user,\t%S system"'
alias display_date='/bin/date +"%Y-%m-%d %H:%M:%S"'

getSSHCommand() {
if [ $# -ne 2 ]; then
echo ""
echo "[ERROR] No enough parameters for function getSSHCommand"
echo "[ERROR] The target host and the user must be specified"
exit 1
fi
TARGET=$1
USER=$2

if [ "${TARGET}" == "localhost" ] || [ "${TARGET}" == "127.0.0.1" ]; then
echo ""
else
echo "ssh ${USER}@${TARGET}" # space is important here
fi
}

# $1 : Startup time
# $2 : End time
delay() {
if [ $# -lt 2 ]; then
echo ""
echo "[ERROR] No enough parameters for function delay !"
exit 1
fi
local _start=$1
local _end=$2
echo "$(((_end - _start) / 3600)) hour(s) $((((_end - _start) % 3600) / 60)) minute(s) $(((_end - _start) % 60)) second(s)"
}

# $1 : Message
# $2 : Startup time
# $3 : End time
display_delay() {
if [ $# -lt 3 ]; then
echo ""
echo "[ERROR] No enough parameters for function display_delay !"
exit 1
fi
echo "[INFO] $1: $(delay $2 $3) ."
}

# $1 : Action
# $2 : Service
systemd_action() {
if [ $# -lt 2 ]; then
echo ""
echo "[ERROR] No enough parameters for function systemd_action !"
exit 1
fi
local ACTION=$1
local SERVICE=$2

# check is the service is installed
if [ "$(systemctl list-unit-files ${SERVICE}.service --quiet --no-legend | wc -l)" == 0 ]; then
echo "[ERROR] Service ${SERVICE} not found"
exit 1
fi

case ${ACTION} in
start)
sudo systemctl start ${SERVICE}
if $(sudo systemctl -q is-active ${SERVICE}); then
echo "[INFO] Service ${SERVICE} started successfuly"
else
echo "[ERROR] Service ${SERVICE} failed to start"
exit 1
fi
;;
stop)
echo "[INFO] Stop ${SERVICE} service"
sudo systemctl stop ${SERVICE}
;;
status)
sudo systemctl status ${SERVICE}
break
;;
*)
echo "[ERROR] No systemd action defined !"
exit 1
;;
esac

}
61 changes: 61 additions & 0 deletions srv/exo/bin/_restoreData.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/bin/bash -eu

# #############################################################################
# Initialize
# #############################################################################
SCRIPT_NAME="${0##*/}"
SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load env settings
source ${SCRIPT_DIR}/setenv.sh
# Load common functions
source ${SCRIPT_DIR}/_functions.sh

BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")}

# Initialize working directory
pushd ${EXO_DATA_DIR} >/dev/null 2>&1

ARCHIVE="${BACKUP_WORKING_DIR}/tmp_data/${PLF_NAME}-data-${BACKUP_DATE}.tar.bz2"

echo "[INFO] ======================================="
echo "[INFO] Restoring data from ${ARCHIVE}"
echo "[INFO] ======================================="
echo "[INFO] $(display_date)"

if ${BACKUP_ON_RESTORE}; then
echo "[INFO] Saving current data ..."

if [ -e ${EXO_DATA_DIR}/data.beforerestore ]; then
mv -v ${EXO_DATA_DIR}/data.beforerestore ${EXO_DATA_DIR}/data.beforerestore-old
# Can be long process in background
rm -rf ${EXO_DATA_DIR}/data.beforerestore-old &
fi

if [ -e ${EXO_DATA_DIR}/data ]; then
mv -v ${EXO_DATA_DIR}/data ${EXO_DATA_DIR}/data.beforerestore
fi
else
echo "[INFO] Removing current data ..."
if [ -e ${EXO_DATA_DIR}/data ]; then
mv -v ${EXO_DATA_DIR}/data ${EXO_DATA_DIR}/data.beforerestore
# Can be long process in background
rm -rf ${EXO_DATA_DIR}/data.beforerestore &
fi
fi

pushd ${BACKUP_WORKING_DIR}/tmp_data >/dev/null 2>&1

echo "[INFO] = Uncompressing ${ARCHIVE} into ${EXO_DATA_DIR} ..."
display_time tar xf ${ARCHIVE} -C ${EXO_DATA_DIR}
echo "[INFO] $(display_date)"
echo "[INFO] Done"

rm -v ${ARCHIVE}

echo "[INFO] = waiting for cleanup to end ..."
# be sure all the cleanup processes are finished
wait

popd >/dev/null 2>&1
echo "[INFO] Done"
40 changes: 40 additions & 0 deletions srv/exo/bin/_restoreElasticsearch.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/bin/bash -eu

# #############################################################################
# Initialize
# #############################################################################
SCRIPT_NAME="${0##*/}"
SCRIPT_DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load env settings
source ${SCRIPT_DIR}/setenv.sh
# Load common functions
source ${SCRIPT_DIR}/_functions.sh

BACKUP_DATE=${1:-$(date "+%Y-%m-%d-%H%M%S")}

echo "[INFO] ======================================="
echo "[INFO] Restoring Elasticsearch data"
echo "[INFO] ======================================="

pushd ${BACKUP_WORKING_DIR}/tmp_elasticsearch >/dev/null 2>&1

if ${BACKUP_ON_RESTORE} && [ -e "${ELASTICSEARCH_DATA_DIR}/nodes.old" ]; then
echo "[INFO] Removing previous backup save directory (${ELASTICSEARCH_DATA_DIR}/nodes.old)..."
sudo -u elasticsearch rm -rf ${ELASTICSEARCH_DATA_DIR}/nodes.old
fi

if ${BACKUP_ON_RESTORE} && [ -e "${ELASTICSEARCH_DATA_DIR}/nodes" ]; then
echo "[INFO] Keeping current data in (${ELASTICSEARCH_DATA_DIR}/nodes.old) directory ..."
sudo -u elasticsearch mv -f ${ELASTICSEARCH_DATA_DIR}/nodes ${ELASTICSEARCH_DATA_DIR}/nodes.old
else
echo "[INFO] Removing current data on (${ELASTICSEARCH_DATA_DIR}/nodes) directory ..."
sudo -u elasticsearch rm -rf ${ELASTICSEARCH_DATA_DIR}/nodes ${ELASTICSEARCH_DATA_DIR}/nodes
fi

echo "[INFO] = Uncompressing ${BACKUP_WORKING_DIR}/tmp_elasticsearch/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 into ${ELASTICSEARCH_DATA_DIR} ..."
echo "[INFO] $(display_date)"
display_time sudo -u elasticsearch tar xf ${BACKUP_WORKING_DIR}/tmp_elasticsearch/${PLF_NAME}-es-${BACKUP_DATE}.tar.bz2 -C ${ELASTICSEARCH_DATA_DIR}/..

popd >/dev/null 2>&1
echo "[INFO] Done"
Loading