-
-
Save akunzai/8a2a283d86382846739c23fc506d37b3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
################################################################################ | |
# FUNCTIONS | |
################################################################################ | |
# 1. Check required system tools | |
_check_installed_tools() { | |
local missed="" | |
until [ -z "$1" ]; do | |
type -t $1 >/dev/null 2>/dev/null | |
if (( $? != 0 )); then | |
missed="$missed $1" | |
fi | |
shift | |
done | |
echo $missed | |
} | |
# 2. Selftest for checking tools which will used | |
checkTools() { | |
REQUIRED_UTILS='nice sed mysqldump head gzip getopt lsof' | |
MISSED_REQUIRED_TOOLS=`_check_installed_tools $REQUIRED_UTILS` | |
if (( `echo $MISSED_REQUIRED_TOOLS | wc -w` > 0 )); | |
then | |
echo -e "Unable to create backup due to missing required bash tools: $MISSED_REQUIRED_TOOLS" | |
exit 1 | |
fi | |
} | |
# 4. Create DB dump function | |
createDbDump() { | |
# Set path of local.xml | |
LOCALXMLPATH=${MAGENTOROOT}app/etc/local.xml | |
# Get mysql credentials from local.xml | |
getLocalValue() { | |
PARAMVALUE=`sed -n "/<resources>/,/<\/resources>/p" $LOCALXMLPATH | sed -n -e "s/.*<$PARAMNAME><!\[CDATA\[\(.*\)\]\]><\/$PARAMNAME>.*/\1/p" | head -n 1` | |
} | |
# Connection parameters | |
DBHOST= | |
DBUSER= | |
DBNAME= | |
DBPASSWORD= | |
TBLPRF= | |
# Include DB logs option | |
SKIPLOGS=1 | |
# Ignored table names | |
IGNOREDTABLES=" | |
core_cache | |
core_cache_option | |
core_cache_tag | |
core_session | |
log_customer | |
log_quote | |
log_summary | |
log_summary_type | |
log_url | |
log_url_info | |
log_visitor | |
log_visitor_info | |
log_visitor_online | |
index_event | |
index_process_event | |
report_event | |
report_viewed_product_index | |
dataflow_batch_export | |
dataflow_batch_import" | |
# Get DB HOST from local.xml | |
if [ -z "$DBHOST" ]; then | |
PARAMNAME=host | |
getLocalValue | |
DBHOST=$PARAMVALUE | |
fi | |
# Get DB USER from local.xml | |
if [ -z "$DBUSER" ]; then | |
PARAMNAME=username | |
getLocalValue | |
DBUSER=$PARAMVALUE | |
fi | |
# Get DB PASSWORD from local.xml | |
if [ -z "$DBPASSWORD" ]; then | |
PARAMNAME=password | |
getLocalValue | |
DBPASSWORD=${PARAMVALUE//\"/\\\"} | |
fi | |
# Get DB NAME from local.xml | |
if [ -z "$DBNAME" ]; then | |
PARAMNAME=dbname | |
getLocalValue | |
DBNAME=$PARAMVALUE | |
fi | |
# Get DB TABLE PREFIX from local.xml | |
if [ -z "$TBLPRF" ]; then | |
PARAMNAME=table_prefix | |
getLocalValue | |
TBLPRF=$PARAMVALUE | |
fi | |
# Check DB credentials for existsing | |
if [ -z "$DBHOST" -o -z "$DBUSER" -o -z "$DBNAME" ]; then | |
echo "Skip DB dumping due lack of parameters host=$DBHOST; username=$DBUSER; dbname=$DBNAME;"; | |
exit 0 | |
fi | |
# Set connection params | |
if [ -n "$DBPASSWORD" ]; then | |
CONNECTIONPARAMS=" -u$DBUSER -h$DBHOST -p\"$DBPASSWORD\" $DBNAME --force --triggers --single-transaction --opt --skip-lock-tables" | |
else | |
CONNECTIONPARAMS=" -u$DBUSER -h$DBHOST $DBNAME --force --triggers --single-transaction --opt --skip-lock-tables" | |
fi | |
# Create DB dump | |
IGN_SCH= | |
IGN_IGN= | |
SAN_CMD= | |
if [ -n "$SKIPLOGS" ] ; then | |
for TABLENAME in $IGNOREDTABLES; do | |
IGN_SCH="$IGN_SCH $TBLPRF$TABLENAME" | |
IGN_IGN="$IGN_IGN --ignore-table='$DBNAME'.'$TBLPRF$TABLENAME'" | |
done | |
IGN_SCH="nice -n 15 mysqldump --no-data $CONNECTIONPARAMS $IGN_SCH ;" | |
fi | |
IGN_IGN="nice -n 15 mysqldump $CONNECTIONPARAMS $IGN_IGN" | |
DBDUMPCMD="( $SAN_CMD $IGN_SCH $IGN_IGN) | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | gzip > $DBFILENAME" | |
echo ${DBDUMPCMD//"p\"$DBPASSWORD\""/p[******]} | |
eval "$DBDUMPCMD" | |
} | |
################################################################################ | |
# CODE | |
################################################################################ | |
# Selftest | |
checkTools | |
# Magento folder | |
MAGENTOROOT=./ | |
# Output path | |
OUTPUTPATH= | |
# Input parameters | |
NAME= | |
OPTS=`getopt -o n:o:r: -l mode:,name:,outputpath:,root: -- "$@"` | |
if [ $? != 0 ] | |
then | |
exit 1 | |
fi | |
eval set -- "$OPTS" | |
while true ; do | |
case "$1" in | |
-n|--name) NAME=$2; shift 2;; | |
-o|--outputpath) OUTPUTPATH=$2; shift 2;; | |
-r|--root) MAGENTOROOT=$2; shift 2;; | |
--) shift; break;; | |
esac | |
done | |
if [ -z "$OUTPUTPATH" ]; then | |
OUTPUTPATH=$MAGENTOROOT | |
fi | |
if [ -n "$NAME" ]; then | |
DBFILENAME="$OUTPUTPATH$NAME.gz" | |
else | |
# Get random file name - some secret link for downloading from magento instance :) | |
MD5=`echo \`date\` $RANDOM | md5sum | cut -d ' ' -f 1` | |
DATETIME=`date -u +"%Y%m%d%H%M"` | |
DBFILENAME="$OUTPUTPATH$MD5.$DATETIME.gz" | |
fi | |
createDbDump | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment