Skip to content
Snippets Groups Projects
Commit c34f97b7 authored by Hahn Axel (hahn)'s avatar Hahn Axel (hahn)
Browse files

Merge branch 'update-localdump-to-classlike-functions' into 'master'

Update localdump to classlike functions

See merge request !43
parents 27e66532 cb793457
No related branches found
No related tags found
1 merge request!43Update localdump to classlike functions
# ======================================================================
#
# shared bash functions
#
# ======================================================================
# ----------------------------------------------------------------------
# returncodes
......@@ -49,6 +53,15 @@ function fetchrc(){
fi
}
# echo a colored text and reset color
# param string keyword to set a color - see function color() above
# param string text to show
function cecho(){
color $1
shift
echo $*
color reset
}
function showPrompt(){
color input
......
......@@ -13,9 +13,17 @@
# 2018-02-09 ..... fix: restore-selection of target uses default on return only
# 2021-05-18 ..... move supported backup types to plugins/localdump/[service].sh
# 2021-07-13 ..... remove leading ./ in localdump.sh restore
# 2022-02-18 ..... WIP: use class like functions
# ======================================================================
# --- variables:
# BACKUP_BASEDIR {string} base directory for db dumps
# BACKUP_DATE {string} string with current timestamp; will be part of filename for backups
# BACKUP_KEEP_DAYS {int} count of days how long to keep db dumps below $BACKUP_BASEDIR
# BACKUP_PLUGINDIR {string} scripts for supported databases; [APP]/plugins/localdump
# BACKUP_SCRIPT {string} script name of db service
# BACKUP_TARGETDIR {string} target directory db dumps of current service
# SERVICENAME {string} name of db service (one of mysql|pgsql|...)
# ----------------------------------------------------------------------
# CONFIG VARS
......@@ -24,9 +32,9 @@
. `dirname $0`/jobhelper.sh
. `dirname $0`/inc_bash.sh
if [ -r ~/.backup.conf ]; then
. ~/.backup.conf
fi
# if [ -r ~/.backup.conf ]; then
# . ~/.backup.conf
# fi
if [ ! -r "${JOBFILE}" ]; then
color error
......@@ -35,30 +43,65 @@
exit 1
fi
BACKUP_BASEDIR=`_j_getvar ${JOBFILE} "dir-localdumps"`
BACKUP_PLUGINDIR=`dirname $0`/plugins/localdump
LOCALDUMP_LOADED=1
# check
if [ -z "$BACKUP_BASEDIR" ]; then
color error
echo ERROR: missing config for backup target.
echo There must be an entry dir-localdumps in ${JOBFILE}
color reset
exit 1
fi
BACKUP_BASEDIR=
BACKUP_PLUGINDIR=
# CLEANUP AFTER N DAYS...
typeset -i BACKUP_KEEP_DAYS=`_j_getvar ${JOBFILE} "keep-days"`
# Cleanup local dumps older N days
typeset -i BACKUP_KEEP_DAYS=0
if [ $BACKUP_KEEP_DAYS -eq 0 ]; then
BACKUP_KEEP_DAYS = 7
fi
BACKUP_DATE=
# ----------------------------------------------------------------------
# FUNCTIONS 4 DB-WRAPPER
# ----------------------------------------------------------------------
function db.init(){
BACKUP_BASEDIR=`_j_getvar ${JOBFILE} "dir-localdumps"`
# ----- additional vars
# check
if [ -z "$BACKUP_BASEDIR" ]; then
color error
echo ERROR: missing config for backup target.
echo There must be an entry dir-localdumps in ${JOBFILE}
color reset
exit 1
fi
BACKUP_PLUGINDIR=`dirname $0`/plugins/localdump
BACKUP_KEEP_DAYS=`_j_getvar ${JOBFILE} "keep-days"`
BACKUP_DATE=$(/bin/date +%Y%m%d-%H%M)
if [ $BACKUP_KEEP_DAYS -eq 0 ]; then
BACKUP_KEEP_DAYS=7
fi
BACKUP_DATE=$(/bin/date +%Y%m%d-%H%M)
}
# helpfer function for SERVICENAME.backup
# it is called after the service specific dump was done.
# param {string} filename of created dump file
function db._compressDumpfile(){
local _outfile=$1
# $myrc is last returncode - set in fetchrc
if [ $myrc -eq 0 ]; then
echo -n "gzip ... "
# compress_file "$_outfile"
echo -n "compressing $1 ... "
gzip -9 -f "${1}"
fetchrc >/dev/null
if [ $myrc -eq 0 ]; then
cecho ok "OK"
else
cecho error "FAILED"
fi
else
cecho error "ERROR occured while dumping - no gzip"
fi
ls -l "$_outfile"*
echo
}
# ----------------------------------------------------------------------
# FUNCTIONS 4 BACKUP
......@@ -179,9 +222,9 @@
echo You can try to restore dumps:
echo "1) Restore dump files from a backup set"
echo " `dirname $0`/restore.sh $BACKUP_BASEDIR"
echo "2) Move restored dumps into $BACKUP_TARGETDIR"
echo "2) Copy restored dumps into $BACKUP_TARGETDIR"
echo "3) Start database restore again"
echo " `dirname $0`/localdump.sh restore"
echo " `dirname $0`/localdump.sh restore [service]"
echo
exit 1
......@@ -241,6 +284,8 @@
# INIT
# ----------------------------------------------------------------------
db.init
# ----- checks
# . /usr/local/bin/inc_cronfunctions.sh
......@@ -387,18 +432,38 @@
fi
;;
# ------------------------------------------------------------
# shell)
# . $BACKUP_SCRIPT $mode
# myshell=$( grep "^$USER" /etc/passwd | cut -f 7 -d ":" )
# echo "TYPE EXIT ... to leave $myshell"
# $myshell -i
# echo "Subshell was closed."
# ;;
shell)
export BACKUP_TARGETDIR
. $BACKUP_SCRIPT
(
mycmd=
echo
echo "Starting interactive shell..."
echo
echo "STATUS: STILL ALPHA as long existing db plugins are not rewritten."
echo
echo "INFO: Try ${SERVICENAME}.help to see database specific commands."
echo "INFO: Type exit and return to leave the shell."
echo
while [ ! "$mycmd" = "exit" ]; do
echo -n "[${SERVICENAME}]"
color input
echo -n " $( pwd )"
color reset
echo -n " % "
read -r mycmd
if [ ! "$mycmd" = "exit" ];then
color cmd
eval $mycmd
color reset
fi
done
)
;;
esac
echo _______________________________________________________________________________
echo STATUS $0 exit with final returncode rc=$rc
exit $rc
......
#!/bin/bash
# ================================================================================
#
# LOCALDUMP :: MYSQL / MARIADB
......@@ -12,10 +11,11 @@
# 2017-03-28 ..... v1.0 added restore
# 2022-01-20 ah v1.1 fixes with shellcheck
# 2022-02-14 ah v2.0 rewrite with class like functions
# 2022-02-18 ah v2.1 WIP: added counters
# ================================================================================
if [ -z "$BACKUP_TARGETDIR" ]; then
echo "ERROR: you cannot start $(basename $0) directly"
if [ -z "$LOCALDUMP_LOADED" ]; then
echo "ERROR: you cannot start $(basename $0) directly. Start localdump.sh instead."
rc+=1
exit 1
fi
......@@ -24,7 +24,15 @@ fi
# CONFIG
# --------------------------------------------------------------------------------
# flag: service was foound locally? One of 0|1
mysql_FOUND=0
# counters
mysql_COUNT_CREATE=0
mysql_COUNT_DUMPS=0
mysql_COUNT_DB=0
mysql_COUNT_ERRORS=0
SOURCE_DIR=/var/lib/mysql
......@@ -47,6 +55,7 @@ function mysql._check(){
# set flag and reset return code
test $rc -eq 0 && mysql_FOUND=1
test $rc -eq 0 || mysql_COUNT_ERRORS+=1
rc=0
}
......@@ -59,6 +68,9 @@ function mysql._check(){
function mysql.db.create(){
local _dbname=$1
echo "CREATE DATABASE IF NOT EXISTS ${_dbname};" | mysql
fetchrc >/dev/null
test $myrc -eq 0 && mysql_COUNT_CREATE+=1
test $rc -eq 0 || mysql_COUNT_ERRORS+=1
}
# dump [database] --> [file]
......@@ -67,17 +79,19 @@ function mysql.db.create(){
# param string name of output file
function mysql.db.dump(){
local _dbname=$1
local _dumpfile=$2
mysqldump --opt \
--default-character-set=utf8 \
--flush-logs \
--single-transaction \
--no-autocommit \
--result-file="$_dumpfile" \
"$_dbname"
local _dbname=$1
local _dumpfile=$2
mysqldump --opt \
--default-character-set=utf8 \
--flush-logs \
--single-transaction \
--no-autocommit \
--result-file="$_dumpfile" \
"$_dbname"
fetchrc >/dev/null
test $myrc -eq 0 && mysql_COUNT_DUMPS+=1
test $rc -eq 0 || mysql_COUNT_ERRORS+=1
}
# import [file] --> [database]
......@@ -88,11 +102,19 @@ function mysql.db.import(){
local _dumpfile=$1
local _dbname=$2
zcat "$_dumpfile" | mysql "${_dbname}"
fetchrc >/dev/null
test $myrc -eq 0 && mysql_COUNT_IMPORT+=1
test $rc -eq 0 || mysql_COUNT_ERRORS+=1
}
# show a list of existing databases
function mysql.db.list(){
mysql -Ee "show databases ;" | grep "^Database:" | awk '{ print $2 }'
# mysql -Ee "show databases ;" | grep "^Database:" | awk '{ print $2 }'
local _result=$( mysql -Ee "show databases ;" )
fetchrc >/dev/null
test $myrc -eq 0 && mysql_COUNT_DB=$( echo "$_result" | grep -c "^Database:" )
test $myrc -eq 0 && echo "$_result" | grep "^Database:" | awk '{ print $2 }'
test $rc -eq 0 || mysql_COUNT_ERRORS+=1
}
# --------------------------------------------------------------------------------
......@@ -139,19 +161,8 @@ function mysql.backup(){
_outfile="${BACKUP_TARGETDIR}/$(get_outfile ${_dbname}).sql"
mysql.db.dump "$_dbname" "$_outfile"
fetchrc
# $myrc is last returncode - set in fetchrc
if [ $myrc -eq 0 ]; then
echo -n "gzip ... "
compress_file "$_outfile"
else
color error
echo "ERROR occured - no gzip"
color reset
fi
ls -l "$_outfile"*
echo
db._compressDumpfile "$_outfile"
done
}
......@@ -169,13 +180,14 @@ function mysql.help(){
# fi
# done
cat <<EOHELP
help for MYSQL-DOT functions
Help for MYSQL-DOT functions
(1) high level functions
mysql.check [0|1] check if mysql is available
mysql.available silent; exitcode is 0 if mysql is available
mysql.check [0|1] check if mysql is available; shows missing checks
mysql.backup backup all databases
mysql.restore FILE DBNAME restore database
mysql.restore [FILE [DBNAME]] restore database
(2) functions on database level
......@@ -226,8 +238,21 @@ function mysql.restore(){
}
function mysql.shell(){
echo "hi"
# WIP: show status
function mysql.status(){
h2 "WIP: Status"
h3 "Databases (max. 15)"
mysql.db.list | head -15
h3 "Counters"
cat <<EOSTATUS
found Dbs: $mysql_COUNT_DB
created : $mysql_COUNT_CREATE
dumped : $mysql_COUNT_DUMPS
ERRORS : $mysql_COUNT_ERRORS
EOSTATUS
}
# --------------------------------------------------------------------------------
# MAIN
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment