Skip to content
Snippets Groups Projects

WIP: Resolve "Restore from legacy backup"

Open Michel Memeteau requested to merge 182-restore-from-legacy-backup into master
Compare and Show latest version
2 files
+ 205
76
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 60
26
#!/bin/bash
#=== Informations ===================================================================#
#- Backup App (Piwigo, prestashop, nextcloud) database and data files
#=== Informations ================================================================#
#- Goal: backup App (Piwigo, prestashop, nextcloud) database and data files
#- Author: B. Mauclaire - bm@ekimia.fr - 2019/11/11
#- Author: M. Memeteau - mm@ekimia.fr - 2020/01/01
#- Licence: GNU Affero General Public License v3.0
#- Usage: vm archive's name will be built with the app's name
#--- Example of connexion parameters:
# HOST_NAME='jaguar.ekimia.fr'
# HOST_USER='root'
# HOST_PORT=622
# DB_NAME='piwigo'
# DB_USER='piwigo'
#- Note: vm archive's name will be built with the app's name.
#- Warning: sshpass package has to be installed.
#-- File where host user's password is stored during script is runnung:
PSWDFILE=".nopasswd"
#=== Functions ===================================================================#
@@ -22,7 +17,7 @@
#--- Print script's help/usage:
function print_help ()
{
echo "Usage: ./backup_app.sh APP_NAME DB_NAME DB_USER DB_PASSWORD [HOST_NAME HOST_PORT HOST_USER]"
echo "Usage: ./backup_app.sh APP_NAME DB_NAME DB_USER DB_PASSWORD HOST_USER_PSWD [HOST_PORT] [HOST_NAME HOST_USER] [DB_ENGINE(mysql/mariadb/pgsql)]"
exit 1
}
@@ -33,18 +28,36 @@ function main_proc ()
echo ""
echo "***** Backup $APP_NAME application *****"
#-- Manage some variable used by the script:
declare -a APP_DIRS
echo "$HOST_USER_PSWD" > $PSWDFILE
SSHNOPASS="sshpass -p `cat $PSWDFILE` ssh -p $HOST_PORT ${HOST_USER}@$HOST_NAME"
#-- Backup:
#testsshnopass
set_host_user_dir
set_app_directories
backup_db
backup_app_data
download_archives
#-- Remove file whith stored password:
rm -f ./$PSWDFILE
echo ""
echo "***** End of $APP_NAME backup *****"
}
#--- Command for testing not asking ssh connexion password:
function testsshnopass ()
{
sshpass -p `cat $PSWDFILE` ssh -p $HOST_PORT ${HOST_USER}@$HOST_NAME "ls"
sudo apt install sshpass -y
}
#--- Set applications' directories to backup:
function set_app_directories ()
{
@@ -52,15 +65,16 @@ function set_app_directories ()
piwigo)
#-- i=photos/_data/i ; upload=photos/upload
APP_DIR="/var/www/photos" ;
APP_DIRS=( "_data/i" "upload" ) ;
APP_DIRS=( "_data/i" "upload" "local/config" ) ;
;;
prestashop)
APP_DIR="/var/www/html" ;
APP_DIRS=( "" ) ;
# See for 1.7 https://devdocs.prestashop.com/1.7/development/architecture/
APP_DIR="/var/www/" ;
APP_DIRS=( "shop" ) ;
;;
nextcloud)
APP_DIR="" ;
APP_DIRS=( "" ) ;
APP_DIR="/var/www/nextcloud" ;
APP_DIRS=( "apps" "custom_apps" "config" "data" ) ;
;;
esac
}
@@ -86,7 +100,7 @@ function backup_app_data ()
for APP_DIRI in ${APP_DIRS[*]} ; do
DIRI_NAME=`echo "$APP_DIRI" | sed -s 's/\//\_/g'`
echo "Build archive of directory: $APP_DIRI"
ssh -p $HOST_PORT ${HOST_USER}@$HOST_NAME "cd ${APP_DIR} ; tar czf ${HOST_USER_DIR}/${APP_NAME}_${DIRI_NAME}.tgz $APP_DIRI"
$SSHNOPASS "cd ${APP_DIR} ; tar czf ${HOST_USER_DIR}/${APP_NAME}_${DIRI_NAME}.tgz $APP_DIRI"
done
echo "*** Archives built! ***"
@@ -99,12 +113,13 @@ function download_archives ()
#-- Download application's data archive:
echo ""
echo "*** Start downloading data archives (be patient)... ***"
scp -P $HOST_PORT ${HOST_USER}@$HOST_NAME:${HOST_USER_DIR}/${APP_NAME}*.tgz .
ssh -p $HOST_PORT ${HOST_USER}@$HOST_NAME "rm -f ${APP_NAME}*.tgz"
sshpass -p `cat $PSWDFILE` scp -P $HOST_PORT ${HOST_USER}@$HOST_NAME:${HOST_USER_DIR}/${APP_NAME}*.tgz .
#TODO : test if transfer was OK
#$SSHNOPASS "rm -f ${HOST_USER_DIR}/${APP_NAME}*.tgz"
echo "*** Archives ${APP_NAME}*.tgz downloaded! ***"
#-- Download application's database dump:
#- db archive download in backup_db function
#- Database's archive downloaded in backup_db function
}
@@ -113,9 +128,20 @@ function backup_db ()
{
echo ""
echo "*** Database backup from $HOST_NAME to local file ${DB_NAME}.sql ***"
ssh -p $HOST_PORT ${HOST_USER}@$HOST_NAME "mysqldump '"$DB_NAME"' -u '"$DB_USER"' -p'"${DB_PWD}"'" > ${DB_NAME}.sql
case $DB_ENGINE in
"mysql" | "mariadb")
$SSHNOPASS "mysqldump '"$DB_NAME"' -u '"$DB_USER"' -p'"${DB_PWD}"'" > ${DB_NAME}.sql
;;
"pgsql")
#- !! TO TEST !!
# $SSHNOPASS "PGPASSWORD='"${DB_PWD}"' pg_dump --format=plain--file --create -U '"$DB_USER"' '"$DB_NAME"'" > ${DB_NAME}.sql
$SSHNOPASS "PGPASSWORD='"${DB_PWD}"' pg_dump -F p -U '"$DB_USER"' '"$DB_NAME"'" > ${DB_NAME}.sql
# pg_dump postgresql://username:password@127.0.0.1:5432/mydatabase
;;
esac
echo "*** Database dump downloaded! ***"
#TODO : Pgsql
}
@@ -123,11 +149,19 @@ function backup_db ()
#=== Main program ===================================================================#
#--- Manage arguments:
case $# in
4) APP_NAME="$1" ; DB_NAME="$2" ; DB_USER="$3" ; DB_PWD="$4"
HOST_NAME='jaguar.ekimia.fr' ; HOST_PORT=622 ; HOST_USER='root' ;
5) APP_NAME="$1" ; DB_NAME="$2" ; DB_USER="$3" ; DB_PWD="$4" ; HOST_USER_PSWD="$5"
HOST_NAME='jaguar.ekimia.fr' ; HOST_PORT=622 ; HOST_USER='root' ; DB_ENGINE="mysql"
main_proc
;;
6) APP_NAME="$1" ; DB_NAME="$2" ; DB_USER="$3" ; DB_PWD="$4" ; HOST_USER_PSWD="$5" ; HOST_PORT="$6"
HOST_NAME='jaguar.ekimia.fr' ; 622 ; HOST_USER='root' ; DB_ENGINE="mysql"
main_proc
;;
8) APP_NAME="$1" ; DB_NAME="$2" ; DB_USER="$3" ; DB_PWD="$4" ; HOST_USER_PSWD="$5" ; HOST_PORT="$6" ; HOST_NAME="$7" ; HOST_USER="$8"
DB_ENGINE="mysql"
main_proc
;;
7) APP_NAME="$1" ; DB_NAME="$2" ; DB_USER="$3" ; DB_PWD="$4" ; HOST_NAME="$5" ; HOST_PORT="$6" ; HOST_USER="$7" ;
9) APP_NAME="$1" ; DB_NAME="$2" ; DB_USER="$3" ; DB_PWD="$4" ; HOST_USER_PSWD="$5" ; HOST_PORT="$6" ; HOST_NAME="$7" ; HOST_USER="$8" ; DB_ENGINE="$9"
main_proc
;;
*) print_help ;
Loading