#!/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