#!/usr/bin/env bash # Configure mysql for further usage credentialsFile="/opt/bin/mysql-credentials.cnf" dump_file="" progress_msg="" default_db_name="elixir_vault_lv" # Set passed arguments for i in "$@"; do case $i in -db=*|--db_name=*) default_db_name="${i#*=}" ;; -file=*|--dump_file=*) dump_file="${i#*=}" ;; -progress-title=*) progress_msg="${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}%% \t$progress_msg" if [ $_progress -eq 100 ]; then echo -e fi } # Remove the existing schema if it exists and recreate it mysql --defaults-extra-file=$credentialsFile -e "DROP SCHEMA IF EXISTS \`$default_db_name\`" mysql --defaults-extra-file=$credentialsFile -e "CREATE SCHEMA \`$default_db_name\` COLLATE utf8_general_ci" # Check if dump file specified & load it if [[ "$dump_file" ]]; then if [[ -e "/opt/db_dumps/$dump_file" ]]; then mysql --defaults-extra-file=$credentialsFile $default_db_name < "/opt/db_dumps/$dump_file"; ProgressBar 1 1 exit 0 fi else # Loop over the sql files and import each one from the base dir for file in "/opt/structure/$default_db_name/*.sql"; do if [[ -e $file ]]; then mysql --defaults-extra-file=$credentialsFile $default_db_name < $file; fi done fi # Setup progressbar loaded_files=0 total_files=$(find "/opt/structure/$default_db_name" -type f -name "*.sql" -printf x | wc -c) # Loop over the table schema files and import each one if [ -d /opt/structure/$default_db_name/tables ]; then for file in /opt/structure/$default_db_name/tables/*.sql; do if [[ -e $file ]]; then mysql --defaults-extra-file=$credentialsFile $default_db_name < $file; let loaded_files++ ProgressBar ${loaded_files} ${total_files} fi done fi # Loop over the procedure schema files and import each one if [ -d /opt/structure/$default_db_name/procedures ]; then for file in /opt/structure/$default_db_name/procedures/*.sql; do if [[ -e $file ]]; then mysql --defaults-extra-file=$credentialsFile $default_db_name < $file; let loaded_files++ ProgressBar ${loaded_files} ${total_files} fi done fi # Loop over the view schema files and import each one declare -a WRONG_ORDER if [ -d /opt/structure/$default_db_name/views ]; then for file in /opt/structure/$default_db_name/views/*.sql; do if [[ -e $file ]]; then if [[ $(mysql --defaults-extra-file=$credentialsFile $default_db_name < $file 2>&1 >/dev/null | grep -ic "doesn't exist") -gt 0 ]]; then WRONG_ORDER+=($file) else let loaded_files++ ProgressBar ${loaded_files} ${total_files} fi fi done fi attempts=0 while [ ${#WRONG_ORDER[@]} -gt 0 ]; do # Exit if exceed 5 attempts if [[ "$attempts" -gt 4 ]]; then exit 1 fi index=0 for i in "${WRONG_ORDER[@]}"; do if [[ $(mysql --defaults-extra-file=$credentialsFile $default_db_name < $i 2>&1 >/dev/null | grep -ic "doesn't exist") -eq 0 ]]; then unset WRONG_ORDER[index] let loaded_files++ ProgressBar ${loaded_files} ${total_files} fi let index++ done let attempts++ done