Improved db assembler, now can create DBs

This commit is contained in:
Yehonal
2017-09-21 17:04:08 +02:00
parent 8ad3c15d63
commit afebf1a1ca
6 changed files with 118 additions and 28 deletions

View File

@@ -1,2 +1,3 @@
/output/
/backup/
config.sh

View File

@@ -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.

View File

@@ -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!"

View File

@@ -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 ====="
}
}

View File

@@ -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"
source "$AC_PATH_DBASSEMBLER/includes/functions.sh"

View File

@@ -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"