ElixirVault/development/database/bin/dump_structure.sh

69 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Configure mysql for further usage
credentialsFile="/opt/bin/mysql-credentials.cnf"
default_db_name="elixir_vault_lv"
# Set passed arguments
for i in "$@"; do
case $i in
-db=*|--db_name=*) default_db_name="${i#*=}" ;;
*) echo "Unknown parameter passed: $i"; exit 1 ;;
esac
done
# Show progress bar
function ProgressBar {
# Process data
let _progress=(${1}*100/${2}*100)/100
let _done=(${_progress}*4)/10
let _left=40-$_done
# Build progressbar string lengths
_fill=$(printf "%${_done}s")
_empty=$(printf "%${_left}s")
printf "\rProgress : ${_fill// /█}${_empty// / } | ${_progress}%%"
if [ $_progress -eq 100 ]; then
echo -e
fi
}
# Create folders
if [ ! -d "/opt/structure/$default_db_name/tables" ]; then
mkdir -p "/opt/structure/$default_db_name/tables";
fi
if [ ! -d "/opt/structure/$default_db_name/views" ]; then
mkdir -p "/opt/structure/$default_db_name/views";
fi
if [ ! -d "/opt/structure/$default_db_name/procedures" ]; then
mkdir -p "/opt/structure/$default_db_name/procedures";
fi
# Setup progressbar
dumped_tables=0
total_tables="$(mysql --defaults-extra-file=$credentialsFile $default_db_name -Bse \
"SELECT count(*) AS TOTAL_COUNT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '$default_db_name';")"
# Get all tables to dump
TABLE_NAMES="$(mysql --defaults-extra-file=$credentialsFile $default_db_name -Bse 'show tables;')"
# Dump each procedure
mysqldump --defaults-extra-file=$credentialsFile --routines --no-create-info --no-data --no-create-db --skip-opt $default_db_name > "/opt/structure/$default_db_name/procedures/routines.sql"
# Dump each table
for TABLE_NAME in ${TABLE_NAMES[@]}; do
mysqldump --defaults-extra-file=$credentialsFile --no-data --tab="/opt/structure/$default_db_name" $default_db_name $TABLE_NAME
let dumped_tables++
ProgressBar ${dumped_tables} ${total_tables}
file="/opt/structure/$default_db_name/$TABLE_NAME.sql"
# Separate views from tables
if [[ $(cat $file | grep -ci 'CREATE TABLE') -gt 0 ]]; then
mv $file "/opt/structure/$default_db_name/tables"
continue
fi
if [[ $(cat $file | grep -ci 'Final view structure for view') -gt 0 ]]; then
mv $file "/opt/structure/$default_db_name/views"
fi
done