114 lines
3.4 KiB
Bash
Executable File
114 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Configure mysql for further usage
|
|
credentialsFile="/opt/bin/mysql-credentials.cnf"
|
|
dump_file=""
|
|
progress_msg=""
|
|
default_db_name="maison_alexandra_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
|