diff options
Diffstat (limited to 'apps/db_assembler/includes/functions.sh')
-rw-r--r-- | apps/db_assembler/includes/functions.sh | 411 |
1 files changed, 0 insertions, 411 deletions
diff --git a/apps/db_assembler/includes/functions.sh b/apps/db_assembler/includes/functions.sh deleted file mode 100644 index cedea417cf..0000000000 --- a/apps/db_assembler/includes/functions.sh +++ /dev/null @@ -1,411 +0,0 @@ -# globals -PROMPT_USER="" -PROMPT_PASS="" - -function dbasm_waitMysqlConn() { - DBHOST="$1" - DBPORT="$2" - COUNT=0 - while ! mysqladmin ping -h"$DBHOST" --port="$DBPORT" --silent; do - ((COUNT++)) - if [ $COUNT -gt $DBASM_WAIT_RETRIES ]; then - echo "DBASM Timeout: Cannot ping mysql!" 1>&2 - exit 64 - fi - echo "Cannot ping mysql on $DBHOST:$DBPORT, retry in $DBASM_WAIT_TIMEOUT seconds (remaining: $COUNT/$DBASM_WAIT_RETRIES)..." - sleep $DBASM_WAIT_TIMEOUT - done -} - -# use in a subshell -function dbasm_resetExitCode() { - exit 0 -} - -function dbasm_mysqlExec() { - confs=$1 - command=$2 - options=$3 - - # MYSQL_PORT needs to be reseted as the next eval might not overwite the current value causing the commands to use wrong port - MYSQL_PORT=3306 - eval $confs - - if [[ ! -z "${PROMPT_USER// }" ]]; then - MYSQL_USER=$PROMPT_USER - MYSQL_PASS=$PROMPT_PASS - fi - - dbasm_waitMysqlConn $MYSQL_HOST $MYSQL_PORT - - export MYSQL_PWD=$MYSQL_PASS - - retval=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" -P "$MYSQL_PORT" $options -e "$command") - if [[ $? -ne 0 ]]; then - err=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" -P "$MYSQL_PORT" $options -e "$command" 2>&1 ) - if [[ "$err" == *"Access denied"* ]]; then - read -p "Insert mysql user:" PROMPT_USER - read -p "Insert mysql pass:" -s PROMPT_PASS - export MYSQL_PWD=$PROMPT_PASS - - retval=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" -P "$MYSQL_PORT" $options -e "$command") - if [[ $? -ne 0 ]]; then - err=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" -P "$MYSQL_PORT" $options -e "$command" 2>&1 ) - # it happens on new mysql 5.7 installations - # since mysql_native_password is explicit now - if [[ "$err" == *"Access denied"* ]]; then - echo "Setting mysql_native_password and for $PROMPT_USER ..." - sudo -h "$MYSQL_HOST" "$DB_MYSQL_EXEC" -P "$MYSQL_PORT" -e "UPDATE mysql.user SET authentication_string=PASSWORD('${PROMPT_PASS}'), plugin='mysql_native_password' WHERE User='${PROMPT_USER}'; FLUSH PRIVILEGES;" - fi - fi - - # create configured account if not exists - "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" $options -P "$MYSQL_PORT" -e "CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'${MYSQL_HOST}' IDENTIFIED BY '${MYSQL_PASS}' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;" - "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" $options -P "$MYSQL_PORT" -e "GRANT CREATE ON *.* TO '${MYSQL_USER}'@'${MYSQL_HOST}' WITH GRANT OPTION;" - for db in ${DATABASES[@]} - do - local _uc=${db^^} - local _name="DB_"$_uc"_CONF" - local _confs=${!_name} - - local _name="DB_"$_uc"_NAME" - local _dbname=${!_name} - - eval $_confs - echo "Grant permissions for ${MYSQL_USER}'@'${MYSQL_HOST} to ${_dbname}" - "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" $options -P "$MYSQL_PORT" -e "GRANT ALL PRIVILEGES ON ${_dbname}.* TO '${MYSQL_USER}'@'${MYSQL_HOST}' WITH GRANT OPTION; FLUSH PRIVILEGES;" - done - else - exit - fi - fi -} - -function dbasm_isNotEmpty() { - dbname=$1 - conf=$2 - - dbasm_mysqlExec "$conf" "SELECT COUNT(DISTINCT table_name) FROM information_schema.columns WHERE table_schema = '${dbname}'" "--skip-column-names" - if (( $retval > 0 )); then - true - else - false - fi -} - -function dbasm_dbExists() { - dbname=$1 - conf=$2 - - dbasm_mysqlExec "$conf" "SHOW DATABASES LIKE '${dbname}'" "--skip-column-names" - if [ "$retval" == "${dbname}" ]; then - true - else - false - fi -} - -function dbasm_createDB() { - database=${1,,} - - uc=${database^^} - - name="DB_"$uc"_CONF" - confs=${!name} - - name="DB_"$uc"_NAME" - dbname=${!name} - - eval $confs - - CONF_USER=$MYSQL_USER - CONF_PASS=$MYSQL_PASS - - if dbasm_dbExists $dbname "$confs"; then - echo "$dbname database exists" - else - echo "Creating DB ${dbname} ..." - dbasm_mysqlExec "$confs" "CREATE DATABASE \`${dbname}\`;" "" - echo "Creating User ${CONF_USER}@${MYSQL_HOST} identified by ${CONF_PASS}..." - dbasm_mysqlExec "$confs" "CREATE USER IF NOT EXISTS '${CONF_USER}'@'${MYSQL_HOST}' IDENTIFIED BY '${CONF_PASS}';" - echo "Granting user privileges on: ${dbname} ..." - dbasm_mysqlExec "$confs" "GRANT ALL PRIVILEGES ON \`${dbname}\`.* TO '${CONF_USER}'@'${MYSQL_HOST}'" - echo "Flush privileges" - dbasm_mysqlExec "$confs" "FLUSH PRIVILEGES;" - fi -} - -function dbasm_assemble() { - # to lowercase - database=${1,,} - start_sql=$2 - with_base=$3 - with_updates=$4 - with_custom=$5 - - uc=${database^^} - - name="DB_"$uc"_PATHS" - v="$name[@]" - base=("${!v}") - - name="DB_"$uc"_UPDATES_PATHS" - v="$name[@]" - updates=("${!v}") - - name='DB_'$uc'_CUSTOM_PATHS' - v="$name[@]" - custom=("${!v}") - - - suffix_base="_base" - suffix_upd="_updates" - suffix_custom="_custom" - - curTime=`date +%Y_%m_%d_%H_%M_%S` - - # ALLOW FOR RECURSION WITH "**" - shopt -s globstar - - if [ $with_base = true ]; then - echo "" > "$OUTPUT_FOLDER$database$suffix_base.sql" - - - if [ ! ${#base[@]} -eq 0 ]; then - echo "Generating $OUTPUT_FOLDER$database$suffix_base ..." - - for d in "${base[@]}" - do - echo "Searching on $d ..." - if [ ! -z "$d" ]; then - for entry in "$d"/**/*.sql - do - if [[ -e $entry ]]; then - cat "$entry" >> "$OUTPUT_FOLDER$database$suffix_base.sql" - fi - done - fi - done - fi - fi - - if [ $with_updates = true ]; then - updFile="$OUTPUT_FOLDER$database$suffix_upd.sql" - - echo "" > "$updFile" - - if [ ! ${#updates[@]} -eq 0 ]; then - echo "Generating $OUTPUT_FOLDER$database$suffix_upd ..." - - for d in "${updates[@]}" - do - echo "Searching on $d ..." - if [ ! -z "$d" ]; then - for entry in "$d"/**/*.sql - do - if [[ ! -e $entry ]]; then - continue - fi - - echo "-- $file" >> "$updFile" - cat "$entry" >> "$updFile" - done - fi - done - fi - fi - - if [ $with_custom = true ]; then - custFile="$OUTPUT_FOLDER$database$suffix_custom.sql" - - echo "" > "$custFile" - - if [ ! ${#custom[@]} -eq 0 ]; then - echo "Generating $OUTPUT_FOLDER$database$suffix_custom ..." - - for d in "${custom[@]}" - do - echo "Searching on $d ..." - if [ ! -z "$d" ]; then - for entry in "$d"/**/*.sql - do - if [[ ! -e $entry ]]; then - continue - fi - - echo "-- $file" >> "$custFile" - cat "$entry" >> "$custFile" - done - fi - done - fi - fi -} - -function dbasm_run() { - echo "===== STARTING ASSEMBLY PROCESS =====" - - mkdir -p "$OUTPUT_FOLDER" - - for db in ${DATABASES[@]} - do - dbasm_assemble "$db" $version".sql" $1 $2 $3 - done - - echo "===== DONE =====" -} - -function dbasm_db_backup() { - echo "backing up $1" - - database=${1,,} - - uc=${database^^} - - name="DB_"$uc"_CONF" - confs=${!name} - - name="DB_"$uc"_NAME" - dbname=${!name} - - # MYSQL_PORT needs to be reseted as the next eval might not overwite the current value causing the commands to use wrong port - MYSQL_PORT=3306 - eval $confs; - - if [[ ! -z "${PROMPT_USER// }" ]]; then - MYSQL_USER=$PROMPT_USER - MYSQL_PASS=$PROMPT_PASS - fi - - - export MYSQL_PWD=$MYSQL_PASS - - now=`date +%s` - - "$DB_MYSQL_DUMP_EXEC" --opt --user="$MYSQL_USER" --host="$MYSQL_HOST" --port="$MYSQL_PORT" "$dbname" > "${BACKUP_FOLDER}${database}_backup_${now}.sql" && echo "done" - if [[ $? -ne 0 ]]; then - err=$("$DB_MYSQL_DUMP_EXEC" --opt --user="$MYSQL_USER" --host="$MYSQL_HOST" --port="$MYSQL_PORT" "$dbname" 2>&1 ) - if [[ "$err" == *"Access denied"* ]]; then - read -p "Insert mysql user:" PROMPT_USER - read -p "Insert mysql pass:" -s PROMPT_PASS - export MYSQL_PWD=$PROMPT_PASS - - "$DB_MYSQL_DUMP_EXEC" --opt --user="$PROMPT_USER" --host="$MYSQL_HOST" --port="$MYSQL_PORT" "$dbname" > "${BACKUP_FOLDER}${database}_backup_${now}.sql" && echo "done" - else - exit - fi - fi -} - -function dbasm_db_import() { - database=${1,,} - type=$2 - - uc=${database^^} - - name="DB_"$uc"_CONF" - confs=${!name} - - name="DB_"$uc"_NAME" - dbname=${!name} - - if [[ $type = "base" && $DB_SKIP_BASE_IMPORT_IF_EXISTS = true ]]; then - if dbasm_isNotEmpty $dbname "$confs"; then - echo "$dbname is not empty, base importing skipped" - return - else - echo "$dbname seems empty" - fi - fi - - echo "importing $1 - $2 ..." - - # MYSQL_PORT needs to be reseted as the next eval might not overwite the current value causing the commands to use wrong port - MYSQL_PORT=3306 - eval $confs; - - if [[ ! -z "${PROMPT_USER// }" ]]; then - MYSQL_USER=$PROMPT_USER - MYSQL_PASS=$PROMPT_PASS - fi - - dbasm_waitMysqlConn $MYSQL_HOST $MYSQL_PORT - - export MYSQL_PWD=$MYSQL_PASS - - - # TODO: remove this line after we squash our DB updates - "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" --port="$MYSQL_PORT" -e "SET GLOBAL max_allowed_packet=128*1024*1024;" - - "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" --port="$MYSQL_PORT" --default-character-set=utf8 "$dbname" < "${OUTPUT_FOLDER}${database}_${type}.sql" - - if [[ $? -ne 0 ]]; then - err=$("$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" -P "$MYSQL_PORT" "$dbname" 2>&1 ) - if [[ "$err" == *"Access denied"* ]]; then - read -p "Insert mysql user:" PROMPT_USER - read -p "Insert mysql pass:" -s PROMPT_PASS - export MYSQL_PWD=$PROMPT_PASS - - "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$PROMPT_USER" -P "$MYSQL_PORT" "$dbname" < "${OUTPUT_FOLDER}${database}_${type}.sql" - else - exit - fi - fi -} - -function dbasm_import() { - dbasm_run $1 $2 $3 - - with_base=$1 - with_updates=$2 - with_custom=$3 - - echo "===== CHECKING DBs =====" - for db in ${DATABASES[@]} - do - dbasm_createDB "$db" - done - echo "===== DONE =====" - - # - # BACKUP - # - - if [ $BACKUP_ENABLE = true ]; then - echo "===== STARTING BACKUP PROCESS =====" - mkdir -p "$BACKUP_FOLDER" - - for db in ${DATABASES[@]} - do - dbasm_db_backup "$db" - done - echo "===== DONE =====" - fi - - echo "===== STARTING IMPORTING PROCESS =====" - # - # IMPORT - # - if [ $with_base = true ]; then - for db in ${DATABASES[@]} - do - dbasm_db_import "$db" "base" - done - fi - - if [ $with_updates = true ]; then - for db in ${DATABASES[@]} - do - dbasm_db_import "$db" "updates" - done - fi - - if [ $with_custom = true ]; then - for db in ${DATABASES[@]} - do - dbasm_db_import "$db" "custom" - done - fi - - echo "===== DONE =====" -} |