Skip to content

Instantly share code, notes, and snippets.

@koutoftimer
Last active October 7, 2016 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koutoftimer/b14608d5b7b369b68b082c512811ddf1 to your computer and use it in GitHub Desktop.
Save koutoftimer/b14608d5b7b369b68b082c512811ddf1 to your computer and use it in GitHub Desktop.
Template for contab job about dumping mysql database for django applications
#!/usr/bin/env bash
# -*- encoding: utf-8 -*-
echo "[$(date -I)] dumping db"
PROJECT_ROOT=<project_root>
DOT_ENV=$PROJECT_ROOT/<project_name>/.env
#: Ensure in existance of file with db connection settings
if [ -f $DOT_ENV ]; then
echo "[+] '.env' exists"
else
echo "[-] '.env' exists"
exit 1
fi
#: Extract database connection infromation from '.env' file
DB_NAME=$( awk -F '=' '/DB_NAME/ {print $2}' $DOT_ENV | sed -e "s/'//g" )
DB_USER=$( awk -F '=' '/DB_USER/ {print $2}' $DOT_ENV | sed -e "s/'//g" )
DB_HOST=$( awk -F '=' '/DB_HOST/ {print $2}' $DOT_ENV | sed -e "s/'//g" )
DB_PASSWORD=$( awk -F '=' '/DB_PASSWORD/ {print $2}' $DOT_ENV | sed -e "s/'//g" )
if $( mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST -e"quit" 2>/dev/null ); then
echo "[+] db connection established with following credentials:
name: $DB_NAME
user: $DB_USER
pswd: $DB_PASSWORD
host: $DB_HOST"
else
echo "[-] db connection established. Verify credentials."
exit 1
fi
#: Ensure db existence
#: Make array from whitespace delimeted string of databases
DATABASES_LIST=(
$( mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST -e"SHOW DATABASES" 2>/dev/null )
)
#echo "${DATABASES_LIST[@]}"
#: Perform chech
if [[ " ${DATABASES_LIST[@]} " =~ " ${DB_NAME} " ]] ; then
echo "[+] db '$DB_NAME' exists"
else
echo "[-] db '$DB_NAME' exists"
exit 1
fi
#: Create directory for dump files
DUMP_ROOT=<dump_root>
if $( mkdir -p $DUMP_ROOT 2>/dev/null ); then
echo "[+] '$DUMP_ROOT' exists"
else
echo "[-] '$DUMP_ROOT' exists"
exit 1
fi
#: Make database dump
DUMP_SQL_PATH=$DUMP_ROOT/dump-$(date -I).sql
dump_result=$(
mysqldump -u $DB_USER -p$DB_PASSWORD -h $DB_HOST $DB_NAME > $DUMP_SQL_PATH \
2>/dev/null
)
if $dump_result; then
echo "[+] '$DUMP_SQL_PATH' created"
else
echo "[-] '$DUMP_SQL_PATH' created"
exit 1
fi
#: Create test database
DB_NAME_TEST="${DB_NAME}_dump_test"
create_test_db_result=$(
mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST -e"CREATE DATABASE $DB_NAME_TEST" 2>/dev/null
)
if $create_test_db_result; then
echo "[+] db '$DB_NAME_TEST' created"
else
echo "[-] db '$DB_NAME_TEST' created"
exit 1
fi
#: Load dump to test database
dump_loading_result=$(
mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST $DB_NAME_TEST < $DUMP_SQL_PATH \
2>/dev/null
)
if $dump_loading_result; then
echo "[+] '$DUMP_SQL_PATH' loaded to '$DB_NAME_TEST'"
else
echo "[-] '$DUMP_SQL_PATH' loaded to '$DB_NAME_TEST'"
exit 1
fi
#: Retrieve and compare tables list from both databases
#: Get an array from mysql ouput
DB_TABLES_SOURCE=($(
mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST $DB_NAME -e"SHOW TABLES;" \
2>/dev/null
))
#: Slice first element as it just hello string describing commmand
DB_TABLES_SOURCE=("${DB_TABLES_SOURCE[@]:1}")
#: Convert array back to string for string comparision
DB_TABLES_SOURCE="${DB_TABLES_SOURCE[@]}"
DB_TABLES_TEST=($(
mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST $DB_NAME_TEST -e"SHOW TABLES;" \
2>/dev/null
))
DB_TABLES_TEST=("${DB_TABLES_TEST[@]:1}")
DB_TABLES_TEST="${DB_TABLES_TEST[@]}"
if [ "$DB_TABLES_SOURCE" == "$DB_TABLES_TEST" ]; then
echo "[+] dump file verified"
else
echo "[-] dump file corrupted"
fi
#: Drop test database
drop_test_db_result=$(
mysql -u $DB_USER -p$DB_PASSWORD -h $DB_HOST -e"DROP DATABASE $DB_NAME_TEST;" 2>/dev/null
)
if $drop_test_db_result; then
echo "[+] db '$DB_NAME_TEST' deleted"
else
echo "[-] db '$DB_NAME_TEST' deleted"
exit 1
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment