summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKargatum <dowlandtop@yandex.com>2022-06-09 18:23:38 +0700
committerGitHub <noreply@github.com>2022-06-09 08:23:38 -0300
commit94528cd44df22ff1471cbe85074e180c61579647 (patch)
treea5fbd0c8e0723413a2718ee074bb40e4d896cff9
parentc0ab2ab08e001ffce3c688eaf54301608af109a8 (diff)
feat(Tools/DbImport): implement separated app for importing DB (#11614)
-rw-r--r--.github/workflows/build_dbimport.yml48
-rw-r--r--.github/workflows/core_matrix_build.yml2
-rw-r--r--.github/workflows/core_modules_build.yml2
-rw-r--r--.github/workflows/tools_build.yml46
-rw-r--r--.github/workflows/windows_build.yml4
-rw-r--r--apps/ci/ci-conf-core.sh3
-rw-r--r--apps/ci/ci-conf-db.sh39
-rw-r--r--apps/ci/ci-conf-tools.sh1
-rw-r--r--conf/dist/config.cmake3
-rw-r--r--deps/CMakeLists.txt3
-rw-r--r--modules/CMakeLists.txt4
-rw-r--r--src/cmake/macros/ConfigureTools.cmake6
-rw-r--r--src/server/CMakeLists.txt3
-rw-r--r--src/server/apps/CMakeLists.txt5
-rw-r--r--src/tools/CMakeLists.txt35
-rw-r--r--src/tools/dbimport/Main.cpp151
-rw-r--r--src/tools/dbimport/dbimport.conf.dist286
17 files changed, 606 insertions, 35 deletions
diff --git a/.github/workflows/build_dbimport.yml b/.github/workflows/build_dbimport.yml
new file mode 100644
index 0000000000..c4016339e7
--- /dev/null
+++ b/.github/workflows/build_dbimport.yml
@@ -0,0 +1,48 @@
+name: build-db
+on:
+ push:
+ branches:
+ - 'master' # only default branch
+ pull_request:
+
+concurrency:
+ group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }})
+ cancel-in-progress: true
+
+jobs:
+ build:
+ strategy:
+ fail-fast: false
+ matrix:
+ # the result of the matrix will be the combination of all attributes, so we get os*compiler*modules builds
+ os: [ubuntu-latest]
+ compiler: [clang12]
+ runs-on: ${{ matrix.os }}
+ name: ${{ matrix.compiler }}
+ env:
+ COMPILER: ${{ matrix.compiler }}
+ steps:
+ - uses: actions/checkout@v2
+ - name: Cache
+ uses: actions/cache@v3
+ env:
+ cache-name: cache-db
+ with:
+ path: var/ccache
+ key: ${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ github.ref }}-${{ github.sha }}
+ restore-keys: |
+ ${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ github.ref }}-
+ ${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-
+ ${{ env.cache-name }}-${{ matrix.os }}-
+ - name: Configure OS
+ run: source ./acore.sh install-deps
+ env:
+ CONTINUOUS_INTEGRATION: true
+ - name: Create conf/config.sh
+ run: source ./apps/ci/ci-conf-db.sh
+ - name: Build
+ run: source ./apps/ci/ci-compile.sh
+ - name: Process pending sql
+ run: bash bin/acore-db-pendings
+ - name: Dry run
+ run: source ./apps/ci/ci-dry-run.sh dbimport
diff --git a/.github/workflows/core_matrix_build.yml b/.github/workflows/core_matrix_build.yml
index 5f7f9658f5..95732a4034 100644
--- a/.github/workflows/core_matrix_build.yml
+++ b/.github/workflows/core_matrix_build.yml
@@ -50,6 +50,8 @@ jobs:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-core.sh
+ - name: Process pending sql
+ run: bash bin/acore-db-pendings
- name: Build
run: source ./apps/ci/ci-compile.sh
- name: Dry run
diff --git a/.github/workflows/core_modules_build.yml b/.github/workflows/core_modules_build.yml
index 4b932b04fd..6db57dcfc7 100644
--- a/.github/workflows/core_modules_build.yml
+++ b/.github/workflows/core_modules_build.yml
@@ -43,6 +43,8 @@ jobs:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-core.sh
+ - name: Process pending sql
+ run: bash bin/acore-db-pendings
- name: Build
run: source ./apps/ci/ci-compile.sh
- name: Dry run
diff --git a/.github/workflows/tools_build.yml b/.github/workflows/tools_build.yml
new file mode 100644
index 0000000000..73aecd18b9
--- /dev/null
+++ b/.github/workflows/tools_build.yml
@@ -0,0 +1,46 @@
+name: tools
+on:
+ push:
+ branches:
+ - 'master'
+ pull_request:
+
+concurrency:
+ group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }})
+ cancel-in-progress: true
+
+jobs:
+ build:
+ strategy:
+ fail-fast: false
+ matrix:
+ # the result of the matrix will be the combination of all attributes, so we get os*compiler builds
+ os: [ubuntu-20.04]
+ compiler: [clang]
+ runs-on: ${{ matrix.os }}
+ name: ${{ matrix.os }}-${{ matrix.compiler }}
+ env:
+ COMPILER: ${{ matrix.compiler }}
+ if: github.repository == 'azerothcore/azerothcore-wotlk'
+ steps:
+ - uses: actions/checkout@v2
+ - name: Cache
+ uses: actions/cache@v3
+ env:
+ cache-name: cache-tools
+ with:
+ path: var/ccache
+ key: ${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ github.ref }}-${{ github.sha }}
+ restore-keys: |
+ ${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ github.ref }}-
+ ${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-
+ ${{ env.cache-name }}-${{ matrix.os }}-
+ - name: Configure OS
+ run: source ./acore.sh install-deps
+ env:
+ CONTINUOUS_INTEGRATION: true
+ - name: Create conf/config.sh
+ run: source ./apps/ci/ci-conf-tools.sh
+ - name: Build
+ run: source ./apps/ci/ci-compile.sh
+
diff --git a/.github/workflows/windows_build.yml b/.github/workflows/windows_build.yml
index 44fb899307..43792b7547 100644
--- a/.github/workflows/windows_build.yml
+++ b/.github/workflows/windows_build.yml
@@ -17,7 +17,7 @@ jobs:
matrix:
os: [windows-latest]
runs-on: ${{ matrix.os }}
- name: ${{ matrix.os }}-${{ matrix.compiler }}
+ name: ${{ matrix.os }}
env:
BOOST_ROOT: C:\local\boost_1_79_0
if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
@@ -29,7 +29,7 @@ jobs:
shell: bash
run: |
mkdir -p build && cd build
- cmake .. -DTOOLS=ON
+ cmake .. -DTOOLS_BUILD=all
cmake --build . --config Release --parallel 4
- name: Copy dll files
shell: bash
diff --git a/apps/ci/ci-conf-core.sh b/apps/ci/ci-conf-core.sh
index 31ed0a4baf..4fd3fa4c23 100644
--- a/apps/ci/ci-conf-core.sh
+++ b/apps/ci/ci-conf-core.sh
@@ -7,8 +7,9 @@ MTHREADS=$(($(grep -c ^processor /proc/cpuinfo) + 2))
CWARNINGS=ON
CDEBUG=OFF
CTYPE=Release
-CTOOLS_BUILD=all
+CTOOLS_BUILD=none
CSCRIPTS=static
+CMODULES=static
CBUILD_TESTING=ON
CSCRIPTPCH=OFF
CCOREPCH=OFF
diff --git a/apps/ci/ci-conf-db.sh b/apps/ci/ci-conf-db.sh
new file mode 100644
index 0000000000..e0fc17bce7
--- /dev/null
+++ b/apps/ci/ci-conf-db.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+set -e
+
+cat >>conf/config.sh <<CONFIG_SH
+MTHREADS=$(($(grep -c ^processor /proc/cpuinfo) + 2))
+CWARNINGS=ON
+CDEBUG=OFF
+CTYPE=Release
+CAPPS_BUILD=none
+CTOOLS_BUILD=db-only
+CSCRIPTPCH=OFF
+CCOREPCH=OFF
+CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"'
+DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
+DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
+DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
+CONFIG_SH
+
+case $COMPILER in
+
+ # this is in order to use the "default" clang version of the OS, without forcing a specific version
+ "clang" )
+ time sudo apt-get install -y clang
+ echo "CCOMPILERC=\"clang\"" >> ./conf/config.sh
+ echo "CCOMPILERCXX=\"clang++\"" >> ./conf/config.sh
+ ;;
+
+ "clang12" )
+ time sudo apt-get install -y clang-12
+ echo "CCOMPILERC=\"clang-12\"" >> ./conf/config.sh
+ echo "CCOMPILERCXX=\"clang++-12\"" >> ./conf/config.sh
+ ;;
+
+ * )
+ echo "Unknown compiler $COMPILER"
+ exit 1
+ ;;
+esac
diff --git a/apps/ci/ci-conf-tools.sh b/apps/ci/ci-conf-tools.sh
index 8ae787f04f..25764cc8a2 100644
--- a/apps/ci/ci-conf-tools.sh
+++ b/apps/ci/ci-conf-tools.sh
@@ -7,7 +7,6 @@ MTHREADS=$(($(grep -c ^processor /proc/cpuinfo) + 2))
CWARNINGS=ON
CDEBUG=OFF
CTYPE=Release
-CSCRIPTS=static
CAPPS_BUILD=none
CTOOLS_BUILD=maps-only
CSCRIPTPCH=OFF
diff --git a/conf/dist/config.cmake b/conf/dist/config.cmake
index c010deb637..381cce46bc 100644
--- a/conf/dist/config.cmake
+++ b/conf/dist/config.cmake
@@ -14,8 +14,7 @@
set(SCRIPTS_AVAILABLE_OPTIONS none static dynamic minimal-static minimal-dynamic)
set(MODULES_AVAILABLE_OPTIONS none static dynamic)
set(BUILD_APPS_AVAILABLE_OPTIONS none all auth-only world-only)
-# set(BUILD_TOOLS_AVAILABLE_OPTIONS none all db-only maps-only) # DB import PR
-set(BUILD_TOOLS_AVAILABLE_OPTIONS none all maps-only)
+set(BUILD_TOOLS_AVAILABLE_OPTIONS none all db-only maps-only)
set(SCRIPTS "static" CACHE STRING "Build core with scripts")
set(MODULES "static" CACHE STRING "Build core with modules")
diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt
index 2d5b43505a..8364181a9f 100644
--- a/deps/CMakeLists.txt
+++ b/deps/CMakeLists.txt
@@ -26,8 +26,7 @@ add_subdirectory(stdfs)
add_subdirectory(threads)
add_subdirectory(utf8cpp)
-# if ((APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none")) OR BUILD_TOOLS_DB_IMPORT) #DB import PR
-if ((APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none")))
+if ((APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none")) OR BUILD_TOOLS_DB_IMPORT)
add_subdirectory(mysql)
endif()
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 4b5ceb2587..a8d199edfd 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -10,8 +10,6 @@
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
-message("")
-
# Make the script module list available in the current scope
GetModuleSourceList(MODULES_MODULE_LIST)
@@ -290,7 +288,7 @@ target_include_directories(modules
${CMAKE_CURRENT_SOURCE_DIR}
${PUBLIC_INCLUDES})
-set_target_properties(scripts
+set_target_properties(modules
PROPERTIES
FOLDER
"modules")
diff --git a/src/cmake/macros/ConfigureTools.cmake b/src/cmake/macros/ConfigureTools.cmake
index ece49ab481..dbe0da7544 100644
--- a/src/cmake/macros/ConfigureTools.cmake
+++ b/src/cmake/macros/ConfigureTools.cmake
@@ -75,9 +75,9 @@ function(CheckToolsBuildList)
list(APPEND BUILD_TOOLS_WHITELIST map_extractor mmaps_generator vmap4_assembler vmap4_extractor)
endif()
- # if (TOOLS_BUILD STREQUAL "db-only")
- # list(APPEND BUILD_TOOLS_WHITELIST dbimport)
- # endif()
+ if (TOOLS_BUILD STREQUAL "db-only")
+ list(APPEND BUILD_TOOLS_WHITELIST dbimport)
+ endif()
endif()
# Set the TOOL_${TOOL_BUILD_NAME} variables from the
diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
index 559745d0a7..b5ed464a21 100644
--- a/src/server/CMakeLists.txt
+++ b/src/server/CMakeLists.txt
@@ -12,8 +12,7 @@
add_subdirectory(apps)
-# if ((APPS_BUILD AND NOT APPS_BUILD STREQUAL "none") OR BUILD_TOOLS_DB_IMPORT) # DB import PR
-if ((APPS_BUILD AND NOT APPS_BUILD STREQUAL "none"))
+if ((APPS_BUILD AND NOT APPS_BUILD STREQUAL "none") OR BUILD_TOOLS_DB_IMPORT)
add_subdirectory(database)
endif()
diff --git a/src/server/apps/CMakeLists.txt b/src/server/apps/CMakeLists.txt
index 807c89efc3..d30ff6dd1b 100644
--- a/src/server/apps/CMakeLists.txt
+++ b/src/server/apps/CMakeLists.txt
@@ -56,11 +56,6 @@ foreach(BUILD_APP ${APPLICATIONS_BUILD_LIST})
set(BUILD_APP_VALUE_DISPLAY_apps apps)
list(APPEND BUILD_APP_VALUE_CONTAINS_apps ${BUILD_APP})
- if (${BUILD_APP} MATCHES "authserver")
- set (BUILD_APPLICATION_AUTHSERVER 1)
- elseif(${BUILD_APP} MATCHES "worldserver")
- set (BUILD_APPLICATION_WORLDSERVER 1)
- endif()
else()
list(APPEND BUILD_APP_GRAPH_KEYS disabled)
set(BUILD_APP_VALUE_DISPLAY_disabled disabled)
diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt
index 9ce44a36e3..1edce4cbfa 100644
--- a/src/tools/CMakeLists.txt
+++ b/src/tools/CMakeLists.txt
@@ -27,9 +27,9 @@ if (TOOLS_BUILD MATCHES "-only")
list(APPEND BUILD_TOOLS_WHITELIST map_extractor mmaps_generator vmap4_assembler vmap4_extractor)
endif()
- # if (TOOLS_BUILD STREQUAL "db-only")
- # list(APPEND BUILD_TOOLS_WHITELIST dbimport)
- # endif()
+ if (TOOLS_BUILD STREQUAL "db-only")
+ list(APPEND BUILD_TOOLS_WHITELIST dbimport)
+ endif()
endif()
# Set the TOOL_${TOOL_BUILD_NAME} variables from the
@@ -66,7 +66,7 @@ list(SORT TOOL_BUILD_GRAPH_KEYS)
list(REMOVE_DUPLICATES TOOL_BUILD_GRAPH_KEYS)
# Display the graphs
-# message("")
+message("")
message("* Tools build list (${TOOLS_BUILD}):")
message(" |")
@@ -112,19 +112,26 @@ foreach(TOOL_NAME ${TOOLS_BUILD_LIST})
add_dependencies(${TOOL_PROJECT_NAME} revision.h)
- # Need fix errors
+ # Need fix errors in maps tools
# target_link_libraries(${TOOL_PROJECT_NAME}
# PRIVATE
- # acore-core-interface)
+ # acore-dependency-interface)
+
+ if (${TOOL_PROJECT_NAME} MATCHES "dbimport")
+ target_link_libraries(${TOOL_PROJECT_NAME}
+ PUBLIC
+ database
+ PRIVATE
+ acore-core-interface)
- # if (${TOOL_PROJECT_NAME} MATCHES "dbimport")
- # target_link_libraries(${TOOL_PROJECT_NAME}
- # PUBLIC
- # database)
+ # Install config
+ CopyToolConfig(${TOOL_PROJECT_NAME} ${TOOL_NAME})
+ else()
+
+ target_link_libraries(${TOOL_PROJECT_NAME}
+ PRIVATE
+ acore-dependency-interface)
- # # Install config
- # CopyToolConfig(${TOOL_PROJECT_NAME} ${TOOL_NAME})
- # else()
target_link_libraries(${TOOL_PROJECT_NAME}
PUBLIC
common
@@ -132,7 +139,7 @@ foreach(TOOL_NAME ${TOOLS_BUILD_LIST})
zlib
Recast
g3dlib)
- # endif()
+ endif()
unset(TOOL_PUBLIC_INCLUDES)
CollectIncludeDirectories(
diff --git a/src/tools/dbimport/Main.cpp b/src/tools/dbimport/Main.cpp
new file mode 100644
index 0000000000..644e80a29e
--- /dev/null
+++ b/src/tools/dbimport/Main.cpp
@@ -0,0 +1,151 @@
+/*
+ * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by the
+ * Free Software Foundation; either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Banner.h"
+#include "Common.h"
+#include "Config.h"
+#include "DatabaseEnv.h"
+#include "DatabaseLoader.h"
+#include "IoContext.h"
+#include "Log.h"
+#include "MySQLThreading.h"
+#include "Util.h"
+#include <boost/program_options.hpp>
+#include <boost/version.hpp>
+#include <csignal>
+#include <filesystem>
+#include <iostream>
+#include <openssl/crypto.h>
+#include <openssl/opensslv.h>
+
+#ifndef _ACORE_DB_IMPORT_CONFIG
+#define _ACORE_DB_IMPORT_CONFIG "dbimport.conf"
+#endif
+
+using namespace boost::program_options;
+namespace fs = std::filesystem;
+
+bool StartDB();
+void StopDB();
+variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile);
+
+/// Launch the db import server
+int main(int argc, char** argv)
+{
+ signal(SIGABRT, &Acore::AbortHandler);
+
+ // Command line parsing
+ auto configFile = fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_DB_IMPORT_CONFIG));
+ auto vm = GetConsoleArguments(argc, argv, configFile);
+
+ // exit if help is enabled
+ if (vm.count("help"))
+ return 0;
+
+ // Add file and args in config
+ sConfigMgr->Configure(configFile.generic_string(), std::vector<std::string>(argv, argv + argc));
+
+ if (!sConfigMgr->LoadAppConfigs())
+ return 1;
+
+ // Init logging
+ sLog->Initialize();
+
+ Acore::Banner::Show("dbimport",
+ [](std::string_view text)
+ {
+ LOG_INFO("dbimport", text);
+ },
+ []()
+ {
+ LOG_INFO("dbimport", "> Using configuration file: {}", sConfigMgr->GetFilename());
+ LOG_INFO("dbimport", "> Using SSL version: {} (library: {})", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
+ LOG_INFO("dbimport", "> Using Boost version: {}.{}.{}", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100);
+ }
+ );
+
+ // Initialize the database connection
+ if (!StartDB())
+ return 1;
+
+ std::shared_ptr<void> dbHandle(nullptr, [](void*) { StopDB(); });
+
+ LOG_INFO("dbimport", "Halting process...");
+
+ return 0;
+}
+
+/// Initialize connection to the database
+bool StartDB()
+{
+ MySQL::Library_Init();
+
+ // Load databases
+ DatabaseLoader loader("dbimport");
+ loader
+ .AddDatabase(LoginDatabase, "Login")
+ .AddDatabase(CharacterDatabase, "Character")
+ .AddDatabase(WorldDatabase, "World");
+
+ if (!loader.Load())
+ return false;
+
+ LOG_INFO("dbimport", "Started database connection pool.");
+ return true;
+}
+
+/// Close the connection to the database
+void StopDB()
+{
+ CharacterDatabase.Close();
+ WorldDatabase.Close();
+ LoginDatabase.Close();
+ MySQL::Library_End();
+}
+
+variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile)
+{
+ options_description all("Allowed options");
+ all.add_options()
+ ("help,h", "print usage message")
+ ("version,v", "print version build info")
+ ("dry-run,d", "Dry run")
+ ("config,c", value<fs::path>(&configFile)->default_value(fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_DB_IMPORT_CONFIG))), "use <arg> as configuration file");
+
+ variables_map variablesMap;
+
+ try
+ {
+ store(command_line_parser(argc, argv).options(all).allow_unregistered().run(), variablesMap);
+ notify(variablesMap);
+ }
+ catch (std::exception const& e)
+ {
+ std::cerr << e.what() << "\n";
+ }
+
+ if (variablesMap.count("help"))
+ {
+ std::cout << all << "\n";
+ }
+ else if (variablesMap.count("dry-run"))
+ {
+ sConfigMgr->setDryRun(true);
+ }
+
+ return variablesMap;
+}
diff --git a/src/tools/dbimport/dbimport.conf.dist b/src/tools/dbimport/dbimport.conf.dist
new file mode 100644
index 0000000000..b4c1e77a45
--- /dev/null
+++ b/src/tools/dbimport/dbimport.conf.dist
@@ -0,0 +1,286 @@
+##################################################
+# AzerothCore Database Import configuration file #
+##################################################
+
+###################################################################################################
+# SECTION INDEX
+#
+# EXAMPLE CONFIG
+# DB IMPORT CONFIG
+# MYSQL SETTINGS
+# UPDATE SETTINGS
+# LOGGING SYSTEM SETTINGS
+#
+###################################################################################################
+
+###################################################################################################
+# EXAMPLE CONFIG
+#
+# Variable
+# Description: Brief description what the variable is doing.
+# Important: Annotation for important things about this variable.
+# Example: "Example, i.e. if the value is a string"
+# Default: 10 - (Enabled|Comment|Variable name in case of grouped config options)
+# 0 - (Disabled|Comment|Variable name in case of grouped config options)
+#
+# Note to developers:
+# - Copy this example to keep the formatting.
+# - Line breaks should be at column 100.
+###################################################################################################
+
+###################################################################################################
+# DB IMPORT CONFIG
+#
+# LogsDir
+# Description: Logs directory setting.
+# Important: LogsDir needs to be quoted, as the string might contain space characters.
+# Logs directory must exists, or log file creation will be disabled.
+# Example: "/home/youruser/azerothcore/logs"
+# Default: "" - (Log files will be stored in the current path)
+
+LogsDir = ""
+
+#
+# SourceDirectory
+# Description: The path to your AzerothCore source directory.
+# If the path is left empty, the built-in CMAKE_SOURCE_DIR is used.
+# Example: "../AzerothCore"
+# Default: ""
+#
+
+SourceDirectory = ""
+
+#
+# MySQLExecutable
+# Description: The path to your MySQL CLI binary.
+# If the path is left empty, built-in path from cmake is used.
+# Example: "C:/Program Files/MariaDB 10.9/bin/mysql.exe"
+# "mysql.exe"
+# "/usr/bin/mysql"
+# Default: ""
+#
+
+MySQLExecutable = ""
+###################################################################################################
+
+###################################################################################################
+# MYSQL SETTINGS
+#
+# LoginDatabaseInfo
+# WorldDatabaseInfo
+# CharacterDatabaseInfo
+# Description: Database connection settings for the world server.
+# Example: "hostname;port;username;password;database"
+# ".;somenumber;username;password;database" - (Use named pipes on Windows
+# "enable-named-pipe" to [mysqld]
+# section my.ini)
+# ".;/path/to/unix_socket;username;password;database;ssl" - (use Unix sockets on
+# Unix/Linux)
+# Default: "127.0.0.1;3306;acore;acore;acore_auth" - (LoginDatabaseInfo)
+# "127.0.0.1;3306;acore;acore;acore_world" - (WorldDatabaseInfo)
+# "127.0.0.1;3306;acore;acore;acore_characters" - (CharacterDatabaseInfo)
+#
+# The SSL option will enable TLS when connecting to the specified database. If not provided or
+# any value other than 'ssl' is set, TLS will not be used.
+#
+
+LoginDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_auth"
+WorldDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_world"
+CharacterDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_characters"
+
+#
+# Database.Reconnect.Seconds
+# Database.Reconnect.Attempts
+#
+# Description: How many seconds between every reconnection attempt
+# and how many attempts will be performed in total
+# Default: 20 attempts every 15 seconds
+#
+
+Database.Reconnect.Seconds = 5
+Database.Reconnect.Attempts = 5
+
+#
+# LoginDatabase.WorkerThreads
+# WorldDatabase.WorkerThreads
+# CharacterDatabase.WorkerThreads
+# Description: The amount of worker threads spawned to handle asynchronous (delayed) MySQL
+# statements. Each worker thread is mirrored with its own connection to the
+# MySQL server and their own thread on the MySQL server.
+# Default: 1 - (LoginDatabase.WorkerThreads)
+# 1 - (WorldDatabase.WorkerThreads)
+# 1 - (CharacterDatabase.WorkerThreads)
+#
+
+LoginDatabase.WorkerThreads = 1
+WorldDatabase.WorkerThreads = 1
+CharacterDatabase.WorkerThreads = 1
+
+#
+# LoginDatabase.SynchThreads
+# WorldDatabase.SynchThreads
+# CharacterDatabase.SynchThreads
+# Description: The amount of MySQL connections spawned to handle.
+# Default: 1 - (LoginDatabase.WorkerThreads)
+# 1 - (WorldDatabase.WorkerThreads)
+# 1 - (CharacterDatabase.WorkerThreads)
+#
+
+LoginDatabase.SynchThreads = 1
+WorldDatabase.SynchThreads = 1
+CharacterDatabase.SynchThreads = 1
+###################################################################################################
+
+###################################################################################################
+# UPDATE SETTINGS
+#
+# Updates.EnableDatabases
+# Description: A mask that describes which databases shall be updated.
+#
+# Following flags are available
+# DATABASE_LOGIN = 1, // Auth database
+# DATABASE_CHARACTER = 2, // Character database
+# DATABASE_WORLD = 4, // World database
+#
+# Default: 7 - (All enabled)
+# 4 - (Enable world only)
+# 0 - (All disabled)
+
+Updates.EnableDatabases = 7
+
+#
+# Updates.AutoSetup
+# Description: Auto populate empty databases.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.AutoSetup = 1
+
+#
+# Updates.Redundancy
+# Description: Perform data redundancy checks through hashing
+# to detect changes on sql updates and reapply it.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.Redundancy = 1
+
+#
+# Updates.ArchivedRedundancy
+# Description: Check hashes of archived updates (slows down startup).
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Updates.ArchivedRedundancy = 0
+
+#
+# Updates.AllowRehash
+# Description: Inserts the current file hash in the database if it is left empty.
+# Useful if you want to mark a file as applied but you don't know its hash.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.AllowRehash = 1
+
+#
+# Updates.CleanDeadRefMaxCount
+# Description: Cleans dead/ orphaned references that occur if an update was removed or renamed and edited in one step.
+# It only starts the clean up if the count of the missing updates is below or equal the Updates.CleanDeadRefMaxCount value.
+# This way prevents erasing of the update history due to wrong source directory state (maybe wrong branch or bad revision).
+# Disable this if you want to know if the database is in a possible "dirty state".
+# Default: 3 - (Enabled)
+# 0 - (Disabled)
+# -1 - (Enabled - unlimited)
+
+Updates.CleanDeadRefMaxCount = 3
+###################################################################################################
+
+###################################################################################################
+#
+# LOGGING SYSTEM SETTINGS
+#
+# Appender config values: Given an appender "name"
+# Appender.name
+# Description: Defines 'where to log'
+# Format: Type,LogLevel,Flags,optional1,optional2,optional3
+#
+# Type
+# 0 - (None)
+# 1 - (Console)
+# 2 - (File)
+# 3 - (DB)
+#
+# LogLevel
+# 0 - (Disabled)
+# 1 - (Fatal)
+# 2 - (Error)
+# 3 - (Warning)
+# 4 - (Info)
+# 5 - (Debug)
+# 6 - (Trace)
+#
+# Flags:
+# 0 - None
+# 1 - Prefix Timestamp to the text
+# 2 - Prefix Log Level to the text
+# 4 - Prefix Log Filter type to the text
+# 8 - Append timestamp to the log file name. Format: YYYY-MM-DD_HH-MM-SS (Only used with Type = 2)
+# 16 - Make a backup of existing file before overwrite (Only used with Mode = w)
+#
+# Colors (read as optional1 if Type = Console)
+# Format: "fatal error warn info debug trace"
+# 0 - BLACK
+# 1 - RED
+# 2 - GREEN
+# 3 - BROWN
+# 4 - BLUE
+# 5 - MAGENTA
+# 6 - CYAN
+# 7 - GREY
+# 8 - YELLOW
+# 9 - LRED
+# 10 - LGREEN
+# 11 - LBLUE
+# 12 - LMAGENTA
+# 13 - LCYAN
+# 14 - WHITE
+# Example: "1 9 3 6 5 8"
+#
+# File: Name of the file (read as optional1 if Type = File)
+# Allows to use one "%s" to create dynamic files
+#
+# Mode: Mode to open the file (read as optional2 if Type = File)
+# a - (Append)
+# w - (Overwrite)
+#
+# MaxFileSize: Maximum file size of the log file before creating a new log file
+# (read as optional3 if Type = File)
+# Size is measured in bytes expressed in a 64-bit unsigned integer.
+# Maximum value is 4294967295 (4 GB). Leave blank for no limit.
+# NOTE: Does not work with dynamic filenames.
+# Example: 536870912 (512 MB)
+#
+
+Appender.Console=1,5,0,"1 9 3 6 5 8"
+Appender.DBImport=2,5,0,DBImport.log,w
+
+# Logger config values: Given a logger "name"
+# Logger.name
+# Description: Defines 'What to log'
+# Format: LogLevel,AppenderList
+#
+# LogLevel
+# 0 - (Disabled)
+# 1 - (Fatal)
+# 2 - (Error)
+# 3 - (Warning)
+# 4 - (Info)
+# 5 - (Debug)
+# 6 - (Trace)
+#
+# AppenderList: List of appenders linked to logger
+# (Using spaces as separator).
+#
+
+Logger.root=4,Console DBImport
+###################################################################################################