Skip to content
Snippets Groups Projects

Db Profiles

Merged Hahn Axel (hahn) requested to merge db-detector into master
1 file
+ 58
202
Compare changes
  • Side-by-side
  • Inline
+ 58
202
@@ -35,6 +35,8 @@
. $(dirname $0)/jobhelper.sh
. $(dirname $0)/inc_bash.sh
. $(dirname $0)/vendor/ini.class.sh
. $(dirname $0)/includes/dbdetect.class.sh
# if [ -r ~/.backup.conf ]; then
# . ~/.backup.conf
# fi
@@ -51,8 +53,6 @@
BACKUP_BASEDIR=
BACKUP_PLUGINDIR=
DBD_BASEDIR=plugins/localdump/profiles
declare -A DBD_PARAMS
DBD_DEBUG=0
# Cleanup local dumps older N days
@@ -60,175 +60,6 @@
BACKUP_DATE=
# --------------------------------------------------------------------
#
# --------------------------------------------------------------------
# ---------- GETTER
# write debug output if DBD_DEBUG is enabled
# param string text to show
function dbdetect._wd(){
test "$DBD_DEBUG" -eq "1" && echo "DEBUG: $*" >&2
}
# get a list of all config files
# param string full path of ini file
function dbdetect.getConfigs(){
find ${DBD_BASEDIR} -type f -name "*.ini"
}
# get type from given ini file
# param string full path of ini file
function dbdetect.getType(){
basename "$1" | cut -d "_" -f 1 | sed "s,\.ini$,,"
}
# get profile from given ini file
# param string full path of ini file
function dbdetect.getProfile(){
basename "$1" | cut -d "_" -f 1- | sed "s,\.ini$,,"
}
# check if the requirements for a database match
# param string full path of ini file to check
function dbdetect.exists(){
local _config="$1"
DBD_PARAMS=
local _found=0
# set file and inisection we read values from
ini.set "$_config" "detect"
# --- check tcp
local tcpport; tcpport=$( ini.value "tcp" )
if [ -n "$tcpport" ]; then
local tcptarget; tcptarget=$( ini.value "tcp-target" )
tcptarget=${tcptarget:-localhost}
if { ! >/dev/tcp/$tcptarget/$tcpport; } > /dev/null 2>&1; then
# echo "No port tcp $tcpport available"
dbdetect._wd "... No port tcp $tcpport available on $tcptarget"
return 1
fi
dbdetect._wd "... Found tcp $tcpport on $tcptarget."
fi
# --- check tcp process
local tcpprocess; tcpprocess=$( ini.value "tcp-process" )
if [ -n "$tcpprocess" ]; then
if ! netstat -tulpen 2>/dev/null | grep "^tcp.*:${tcpport} .*/${tcpprocess}" >/dev/null; then
# echo "No port tcp $tcpport available"
dbdetect._wd "... $tcpprocess not found for tcp ${tcpport}"
return 1
fi
dbdetect._wd "... tcp $tcpport is used by $tcpprocess."
fi
# --- check binaries
local binary; binary=$( ini.value "binary" )
if [ -n "${binary}" ]; then
for mybinary in $( echo "${binary}" | tr "," " " ); do
if ! j_requireBinary "$mybinary" 1 >/dev/null 2>&1; then
dbdetect._wd "... Missing binary: ${mybinary}"
return 1
fi
dbdetect._wd "... Binary: ${mybinary} was found"
done
fi
# --- check process
local process; process=$( ini.value "process" )
if [ -n "${process}" ]; then
if ! j_requireProcess "${process}" 1 >/dev/null; then
dbdetect._wd "... Missing process: ${process}"
return 1
fi
# if ! ps -eo command | grep -E "${process}" >/dev/null 2>&1; then
# dbdetect._wd "... Process ${process} was not found"
# return 1
# fi
dbdetect._wd "... Process ${process} was found"
fi
# --- check db files
local filetype; filetype=$( ini.value "type" )
if [ -n "${filetype}" ]; then
local myfiles; declare -a myfiles
for myfile in $( ini.value "file[]" )
do
if ! file -b "${myfile}" | grep -i "$filetype" >/dev/null; then
dbdetect._wd "... File ${myfile} is no type $filetype"
return 1
fi
dbdetect._wd "... File ${myfile} is type $filetype"
myfiles+="${myfile}|"
done
fi
# --- OK, everything was found ... we initialize it
dbdetect._wd "OK, match: $_config"
ini.set "$_config" "set"
local value
local dbuser=$( ini.value "dbuser" )
local dbpassword=$( ini.value "dbpassword" )
for mykey in su env params
do
value="$( ini.value "$mykey" )"
value="${value//\{\{tcp\}\}/$tcpport}"
value="${value//\{\{tcp-target\}\}/$tcptarget}"
value="${value//\{\{dbuser\}\}/$dbuser}"
value="${value//\{\{dbpassword\}\}/$dbpassword}"
value="${value//\{\{file\[\]\}\}/$myfiles}"
DBD_PARAMS[$mykey]="$value"
dbdetect._wd ">>> $mykey = $value"
done
dbdetect._wd ">>> files = $myfiles"
DBD_PARAMS[files]="$myfiles"
return 0
}
# set a profile name
function dbdetect.setProfile(){
dbdetect.exists "${DBD_BASEDIR}/${PROFILENAME}.ini"
}
function dbdetect.getParams(){
echo "${DBD_PARAMS['params']}"
}
# for backup scripts: get checked files from [detect] -> file[]
#
function dbdetect.getFiles(){
echo "${DBD_PARAMS['files']}" | tr "|" "\n"
}
# set variables in [set] -> env = ...
# USAGE:
# eval $( dbdetect.setenv )
function dbdetect.setenv(){
echo "${DBD_PARAMS['env']}"
}
# unset variables from [set] -> env = ...
# USAGE:
# eval $( dbdetect.unsetenv )
function dbdetect.unssetenv(){
echo "${DBD_PARAMS['env']}" | grep -o '[a-z0-9]*=' | tr -d '=' | sed "s,^,unset ,"
}
function dbdetect.runas(){
echo "${DBD_PARAMS['su']}"
}
# ----------------------------------------------------------------------
# FUNCTIONS 4 DB-WRAPPER
# ----------------------------------------------------------------------
@@ -444,21 +275,33 @@ function dbdetect.runas(){
function showhelp(){
local _self
_self=$( basename "$0" )
echo "SYNTAX: "
echo "$_self [[operation]] [Name_of_service] [[more services]]"
echo
echo "LOCALDUMP detects existing local databases and dumps them locally."
echo "It is included in the backup.sh to dump all before a file backup will store them."
echo
echo "It can be started seperately for manual database backups or for restore"
echo
echo "SYNTAX:"
echo " $_self [OPTIONS] <operation> <profile [more_profiles]>"
echo
echo "OPTIONS:"
echo " -h|--help show this help"
echo
echo "PARAMETERS:"
echo " operation - one of check|backup|restore; optional parameter; default is"
echo " 'backup'."
echo " backup dump all databases/ schemes of a given service"
echo " check show info only if the service is available"
echo " restore import a dump into same or new database"
echo " Without a filename it starts an interactive mode"
echo " profile - name of database profiles"
echo " You get a list of all available services without parameter"
echo " Use ALL for bulk command"
echo " file - filename of db dump to restore to origin database scheme"
echo
echo "EXAMPLES:"
echo "$_self backup [Name_of_service]"
echo "$_self restore [Name_of_service] [[file-to-restore]]"
echo
echo " operation - one of check|backup|restore; optional parameter; default is backup"
echo " check WIP: show info only if the service is available"
echo " backup dump all databases/ schemes of a given service"
echo " restore import a dump into same or new database"
echo " Without a filename it starts an interactive mode"
echo " Name_of_service - name of database service"
echo " You get a list of all available services without parameter"
echo " Use ALL for bulk command"
echo " file - filename of db dump to restore to origin database scheme"
}
@@ -466,6 +309,37 @@ function dbdetect.runas(){
# INIT
# ----------------------------------------------------------------------
while [[ "$#" -gt 0 ]]; do case $1 in
-h|--help) showhelp; exit 0;;
*) if grep "^-" <<< "$1" >/dev/null ; then
echo; echo "ERROR: Unknown parameter: $1"; echo; showhelp; exit 2
fi
break;
;;
esac; done
mode="backup"
case "$1" in
backup|check|restore|shell)
mode=$1
shift 1
;;
esac
if [ -z "$mode" ]; then
color error
echo "ERROR: missing parameter."
color reset
echo
showhelp
echo
echo "On this machine working profiles (see ${BACKUP_PLUGINDIR}):"
get_services | sed "s#^# #g"
echo
exit 1
fi
# ----- db init
BACKUP_BASEDIR=$(_j_getvar ${JOBFILE} "dir-localdumps")
@@ -494,25 +368,7 @@ function dbdetect.runas(){
h1 $(date) IML BACKUP :: LOCALDUMP :: $*
if [ $# -eq 0 ]; then
color error
echo "ERROR: missing parameter."
color reset
echo
showhelp
echo
echo "Known services (see ${BACKUP_PLUGINDIR}):"
get_services
exit 1
fi
mode="backup"
case "$1" in
backup|check|restore|shell)
mode=$1
shift 1
;;
esac
echo "mode = $mode"
export SERVICENAME=$1
BACKUP_TARGETDIR=${BACKUP_BASEDIR}/${SERVICENAME}
Loading