diff --git a/bin/db_assembler/.gitignore b/bin/db_assembler/.gitignore index 0d5bd649d..0c63e20d7 100644 --- a/bin/db_assembler/.gitignore +++ b/bin/db_assembler/.gitignore @@ -1,2 +1,3 @@ /output/ +/backup/ config.sh diff --git a/bin/db_assembler/README.md b/bin/db_assembler/README.md new file mode 100644 index 000000000..2d8f4a0ea --- /dev/null +++ b/bin/db_assembler/README.md @@ -0,0 +1,16 @@ +## How to use: + +First of all, if you need some custom configuration you have to copy and rename +/conf/config.sh.dist in /conf/config.sh and configure it + +db_assembler.sh script contains an interactive menu to assemble and import sql files. +Just run it to display the options. + + +Note: You can even use actions directly by command lines specifying the option. +Ex: + ./db_assembler.sh 1 + +It will start the assemble process of all sql files. + + diff --git a/bin/db_assembler/db_assembler.sh b/bin/db_assembler/db_assembler.sh index 8e4addaec..4b4c23e5b 100755 --- a/bin/db_assembler/db_assembler.sh +++ b/bin/db_assembler/db_assembler.sh @@ -19,28 +19,28 @@ options=( function _switch() { case $1 in "Assemble ALL") - run true true true + dbasm_run true true true ;; "Assemble only bases") - run true false false + dbasm_run true false false ;; "Assemble only updates") - run false true false + dbasm_run false true false ;; "Assemble only customs") - run false false true + dbasm_run false false true ;; "Assemble & import ALL") - import true true true + dbasm_import true true true ;; "Assemble & import only bases") - import true false false + dbasm_import true false false ;; "Assemble & import only updates") - import false true false + dbasm_import false true false ;; "Assemble & import only customs") - import false false true + dbasm_import false false true ;; "Quit") echo "Goodbye!" diff --git a/bin/db_assembler/includes/functions.sh b/bin/db_assembler/includes/functions.sh index ea8d146fe..8b4119d01 100644 --- a/bin/db_assembler/includes/functions.sh +++ b/bin/db_assembler/includes/functions.sh @@ -1,4 +1,58 @@ -function assemble() { +function dbasm_isNotEmpty() { + dbname=$1 + conf=$2 + + eval $confs; + export MYSQL_PWD=$MYSQL_PASS + + RESULT=`"$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" --skip-column-names -e "SELECT COUNT(DISTINCT table_name) FROM information_schema.columns WHERE table_schema = '${dbname}'"` + if (( $RESULT > 0 )); then + true + else + false + fi +} + +function dbasm_dbExists() { + dbname=$1 + conf=$2 + + eval $confs; + export MYSQL_PWD=$MYSQL_PASS + + RESULT=`"$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" --skip-column-names -e "SHOW DATABASES LIKE '${dbname}'"` + if [ "$RESULT" == "${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; + + export MYSQL_PWD=$MYSQL_PASS + + if dbasm_dbExists $dbname "$confs"; then + echo "$dbname database exists" + else + "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" -e "GRANT USAGE ON * . * TO 'acore'@'${MYSQL_HOST}' IDENTIFIED BY 'acore' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;" + "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" -e "CREATE DATABASE \`${dbname}\`" + "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" -e "GRANT ALL PRIVILEGES ON \`${dbname}\` . * TO 'acore'@'${MYSQL_HOST}' WITH GRANT OPTION;" + fi +} + +function dbasm_assemble() { # to lowercase database=${1,,} start_sql=$2 @@ -102,20 +156,20 @@ function assemble() { fi } -function run() { +function dbasm_run() { echo "===== STARTING ASSEMBLY PROCESS =====" mkdir -p "$OUTPUT_FOLDER" for db in ${DATABASES[@]} do - assemble "$db" $version".sql" $1 $2 $3 + dbasm_assemble "$db" $version".sql" $1 $2 $3 done echo "===== DONE =====" } -function db_backup() { +function dbasm_db_backup() { echo "backing up $1" database=${1,,} @@ -137,9 +191,7 @@ function db_backup() { "$DB_MYSQL_DUMP_EXEC" --opt --user="$MYSQL_USER" --host="$MYSQL_HOST" "$dbname" > "${BACKUP_FOLDER}${database}_backup_${now}.sql" && echo "done" } -function db_import() { - echo "importing $1 - $2" - +function dbasm_db_import() { database=${1,,} type=$2 @@ -151,6 +203,15 @@ function db_import() { 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 + fi + fi + + echo "importing $1 - $2 ..." + eval $confs; export MYSQL_PWD=$MYSQL_PASS @@ -158,25 +219,31 @@ function db_import() { "$DB_MYSQL_EXEC" -h "$MYSQL_HOST" -u "$MYSQL_USER" "$dbname" < "${OUTPUT_FOLDER}${database}_${type}.sql" } -function import () { - run $1 $2 $2 - +function dbasm_import() { + dbasm_run $1 $2 $2 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 =====" + echo "===== STARTING BACKUP PROCESS =====" mkdir -p "$BACKUP_FOLDER" for db in ${DATABASES[@]} do - db_backup "$db" + dbasm_db_backup "$db" done echo "===== DONE =====" fi @@ -188,23 +255,23 @@ function import () { if [ $with_base = true ]; then for db in ${DATABASES[@]} do - db_import "$db" "base" + dbasm_db_import "$db" "base" done fi if [ $with_updates = true ]; then for db in ${DATABASES[@]} do - db_import "$db" "update" + dbasm_db_import "$db" "update" done fi if [ $with_custom = true ]; then for db in ${DATABASES[@]} do - db_import "$db" "custom" + dbasm_db_import "$db" "custom" done fi echo "===== DONE =====" -} \ No newline at end of file +} diff --git a/bin/db_assembler/includes/includes.sh b/bin/db_assembler/includes/includes.sh index f74c52757..b4ac55515 100644 --- a/bin/db_assembler/includes/includes.sh +++ b/bin/db_assembler/includes/includes.sh @@ -8,4 +8,4 @@ if [ -f "$AC_PATH_DBASSEMBLER/config.sh" ]; then source "$AC_PATH_DBASSEMBLER/config.sh" # should overwrite previous fi -source "$AC_PATH_DBASSEMBLER/includes/functions.sh" \ No newline at end of file +source "$AC_PATH_DBASSEMBLER/includes/functions.sh" diff --git a/conf/config.sh.dist b/conf/config.sh.dist index 41b767037..ffcc26deb 100644 --- a/conf/config.sh.dist +++ b/conf/config.sh.dist @@ -112,6 +112,12 @@ DB_WORLD_CUSTOM_PATHS=( # ############################################## +# +# Skip import of base sql files to avoid +# table dropping +# +DB_SKIP_BASE_IMPORT_IF_EXISTS=true + # # Example: # "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe" @@ -139,8 +145,8 @@ DB_WORLD_CONF="MYSQL_USER='root'; \ " -DB_CHARACTERS_NAME="characters" +DB_CHARACTERS_NAME="acore_characters" -DB_AUTH_NAME="auth" +DB_AUTH_NAME="acore_auth" -DB_WORLD_NAME="world" +DB_WORLD_NAME="acore_world"