====== Information ======
* TrinityCore ((https://www.trinitycore.org))
* 3.3.5 ((https://github.com/TrinityCore/TrinityCore/tree/3.3.5))
* [[Information:Realm of Espionage]]
* wow.realmofespionage.xyz ((WoW ''realmlist.wtf''))
===== Notes =====
* 2024/10/30: These notes haven't been re-factored in a while and likely benefit from some more-recent changes on [[servers:linux:games:trinitycore_3.3.5_localhost|localhost Server notes]]
===== Prerequisites =====
* [[linux:distros:server:fedora_server|Fedora Server]]
* [[servers;linux;mariadb|MariaDB]]
* [[games;linux;wine;world_of_warcraft_3.3.5|World of Warcraft (3.3.5)]] ((required for content extraction, and since the core and tools are compiled on Linux the extraction tools also require Linux))
====== Create Group and User ======
****
sudo groupadd 'trinity' && sudo useradd -c 'TrinityCore system account' -d '/var/lib/trinity' -g 'trinity' -m -r 'trinity'
====== Dependencies ======
===== Packages =====
****
sudo dnf install bzip2-devel clang cmake git mariadb-devel boost-devel readline-devel
====== Firewall ======
* :!: 3724/tcp is loginserver and needs forwarded from the router for both LAN and WAN
* :!: 8085/tcp is worldserver and needs forwarded from the router for both LAN and WAN
* 3443/tcp is Remote Console
* 7878/tcp is SOAP
sudo firewall-cmd --add-port='3724'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='8085'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='3443'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='7878'/'tcp' --permanent && sudo firewall-cmd --reload
====== Download Source ======
sudo su 'trinity' -s '/usr/bin/bash'
cd ~ && mkdir -p ~/'Projects' && rm -Rf ~/'Projects/trinity-335/src' && git clone --branch '3.3.5' --depth '1' --recurse-submodules 'https://github.com/TrinityCore/TrinityCore.git' ~/'Projects/trinity-335/src' && sync
exit
====== Databases ======
===== Initial =====
* This creates the ''authserver'', ''characters'', and ''worldserver'' databases
sudo mysql
CREATE DATABASE authserver;
GRANT ALL PRIVILEGES ON authserver.* to 'authserver'@'localhost' IDENTIFIED BY 'x';
CREATE DATABASE characters;
GRANT ALL PRIVILEGES ON characters.* to 'characters'@'localhost' IDENTIFIED BY 'x';
CREATE DATABASE worldserver;
GRANT ALL PRIVILEGES ON worldserver.* to 'worldserver'@'localhost' IDENTIFIED BY 'x';
FLUSH PRIVILEGES;
EXIT
===== TDB =====
* :!: Check https://github.com/TrinityCore/TrinityCore/releases for updates
* :!: Make certain the database is ''335'', and not ''927'' or etc
* :!: Do this **after** the initial compile ((the compile command below wipes out the ''run'' folder if it exists before compiling))
* TODO: Move this down the page somewhere
sudo su 'trinity' -s '/usr/bin/bash'
rm -Rf '/tmp/TDB' '/tmp/TDB/TDB335.7z' && mkdir -p '/tmp/TDB' && cd ~ && wget -O '/tmp/TDB/TDB335.7z' 'https://github.com/TrinityCore/TrinityCore/releases/download/TDB335.23061/TDB_full_world_335.23061_2023_06_14.7z' && 7za x '/tmp/TDB/TDB335.7z' -o'/tmp/TDB' && mv '/tmp/TDB/TDB_full_world_335'*'.sql' ~/'Projects/trinity-335/run/bin' && rm -Rf '/tmp/TDB' && sync
====== Compile ======
* :!: This wipes out the ''run'' folder, so ideally any extracted content and the full TDB shouldn't be moved there until after this initial compile
* :!: For content extraction, Fedora major versions should match between the compiler and extraction machines for Boost libraries ((can use ''LD_LIBRARY_PATH=.'' for all the extraction commands, and copy the requested ''.so'' library files from [[https://pkgs.org/|downloaded]] packages into the WoW folder))
sudo su 'trinity' -s '/usr/bin/bash'
rm -Rf ~/'Projects/trinity-335/build' ~/'Projects/trinity-335/run' && mkdir -p ~/'Projects/trinity-335/build' ~/'Projects/trinity-335/run' && cd ~/'Projects/trinity-335/build' && CC='/usr/bin/clang' CXX='/usr/bin/clang++' cmake ~/'Projects/trinity-335/src' -DCMAKE_INSTALL_PREFIX=~/'Projects/trinity-335/run' -DTOOLS='1' && sync && make --jobs=$(nproc) install && sync
exit
====== Extractors ======
* Copies ''mapextractor'', ''vmap4extractor'', ''vmap4assembler'', and ''mmaps_generator'' to ''/tmp/trinity-extractors''
mkdir -p '/tmp/trinity-extractors' && sudo cp '/var/lib/trinity/Projects/trinity-335/run/bin/mapextractor' '/var/lib/trinity/Projects/trinity-335/run/bin/vmap4extractor' '/var/lib/trinity/Projects/trinity-335/run/bin/vmap4assembler' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps_generator' '/tmp/trinity-extractors' && sudo chown -R $USER:$USER '/tmp/trinity-extractors' && sync
====== Content ======
===== Transfer Extractors to Client =====
* :!: Run on the machine doing the content extraction
* See [[games;linux;wine;world_of_warcraft_3.3.5|WoW 3.3.5]] installation notes
mkdir -p '/tmp/trinity-extractors' && scp espionage724@192.168.1.152:'/tmp/trinity-extractors/'* '/tmp/trinity-extractors' && mv '/tmp/trinity-extractors/'* ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && sync
===== Dependencies =====
* :!: Run on the machine doing the content extraction
sudo dnf install 'boost'
===== Extract and Generate Content =====
==== DBCs, Maps, and Cameras ====
* :!: Run on the machine doing the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && ./'mapextractor' -f '0' && sync
==== VMaps ====
=== Extract ===
* :!: Run on the machine doing the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && ./'vmap4extractor' -l && sync
=== Assemble ===
* :!: Run on the machine doing the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && mkdir -p 'vmaps' && ./'vmap4assembler' 'Buildings' 'vmaps' && sync
==== MMaps ====
* :!: Run on the machine doing the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && mkdir -p 'mmaps' && ./'mmaps_generator' --bigBaseUnit 'true' --threads $(nproc) && sync
===== Transfer Content to Server =====
* Should be around 3.6GB
* :!: Run on the machine that did the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && scp -r 'dbc' 'maps' 'vmaps' 'mmaps' 'Cameras' espionage724@192.168.1.152:~
===== Cleanup on Client =====
* :!: Run on the machine that did the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && rm -Rf 'Buildings' 'Cameras' 'dbc' 'maps' 'vmaps' 'mmaps' && cd ~/'Downloads' && rm -f 'mapextractor' 'vmap4extractor' 'vmap4assembler' 'mmaps_generator' && sync
===== Move Content on Server =====
* Moves the ''dbc'', ''maps'', ''vmaps'', ''mmaps'', and ''Cameras'' folders from the main user's ''~'' into the ''bin'' folder
* :!: Run on the machine that is **running the server**
ls ~/'dbc' ~/'maps' ~/'vmaps' ~/'mmaps' ~/'Cameras' > '/dev/null' && sudo rm -Rf '/var/lib/trinity/Projects/trinity-335/run/bin/dbc' '/var/lib/trinity/Projects/trinity-335/run/bin/maps' '/var/lib/trinity/Projects/trinity-335/run/bin/vmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/Cameras' && cd ~ && sudo mv 'dbc' 'maps' 'vmaps' 'mmaps' 'Cameras' '/var/lib/trinity/Projects/trinity-335/run/bin' && sudo chown -R 'trinity':'trinity' '/var/lib/trinity/Projects/trinity-335/run/bin/dbc' '/var/lib/trinity/Projects/trinity-335/run/bin/maps' '/var/lib/trinity/Projects/trinity-335/run/bin/vmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/Cameras' && sync
sudo restorecon -F -I -R '/var/lib/trinity/Projects/trinity-335' && sync
====== SELinux ======
sudo semanage fcontext --add --type 'bin_t' '/var/lib/trinity/Projects/trinity-335/run/bin/authserver' && sudo restorecon -F -I -R '/var/lib/trinity/Projects/trinity-335/run/bin/authserver'
sudo semanage fcontext --add --type 'bin_t' '/var/lib/trinity/Projects/trinity-335/run/bin/worldserver' && sudo restorecon -F -I -R '/var/lib/trinity/Projects/trinity-335/run/bin/worldserver'
====== Settings ======
===== authserver =====
* Last updated: 2023/07/30
* Last commit: [[https://github.com/TrinityCore/TrinityCore/commit/68bf7e6d12e1689d688db32c05066b8832922c67|Jul 28, 2021]] ''68bf7e6''
* [[https://github.com/TrinityCore/TrinityCore/commits/3.3.5/src/server/authserver/authserver.conf.dist|New commits check]]
* [[https://raw.githubusercontent.com/TrinityCore/TrinityCore/3.3.5/src/server/authserver/authserver.conf.dist|Upstream authserver.conf.dist]]
nano ~/'Projects/trinity-335/run/etc/authserver.conf'
LoginDatabaseInfo = ".;/var/lib/mysql/mysql.sock;authserver;x;authserver"
===== worldserver =====
* Last updated: 2023/07/30
* Last commit: [[https://github.com/TrinityCore/TrinityCore/commit/e11613eeb5dcad16f5908c9c7dd8109baabe9272|Feb 16, 2023]] ''e11613e''
* [[https://github.com/TrinityCore/TrinityCore/commits/3.3.5/src/server/worldserver/worldserver.conf.dist|New commits check]]
* [[https://raw.githubusercontent.com/TrinityCore/TrinityCore/3.3.5/src/server/worldserver/worldserver.conf.dist|Upstream worldserver.conf.dist]]
* :!: TODO: Update for ''conf.d''
nano ~/'Projects/trinity-335/run/etc/worldserver.conf'
LoginDatabaseInfo = ".;/var/lib/mysql/mysql.sock;authserver;x;authserver"
WorldDatabaseInfo = ".;/var/lib/mysql/mysql.sock;worldserver;x;worldserver"
CharacterDatabaseInfo = ".;/var/lib/mysql/mysql.sock;characters;x;characters"
Quests.LowLevelHideDiff = -1
Motd = "Welcome to the Realm of Espionage World of Warcraft server!"
Server.LoginInfo = 1
BirthdayTime = 1170471600
==== TODO Settings ====
# Distance
Visibility.Distance.Continents = 533
Visibility.Distance.Instances = 533
Visibility.Notify.Period.OnContinents = 250
Visibility.Notify.Period.InInstances = 250
====== Create GM Account ======
sudo su 'trinity' -s '/usr/bin/bash'
cd ~/'Projects/trinity-335/run/bin' && ~/'Projects/trinity-335/run/bin/authserver'
* Ctrl + C
cd ~/'Projects/trinity-335/run/bin' && ~/'Projects/trinity-335/run/bin/worldserver'
account create Espionage724 x
account set gmlevel Espionage724 3 -1
server shutdown 1
====== Other Settings ======
===== Disable Console =====
==== Config ====
* This prevents the system log from having unnecessary console spam
* :!: To be done **after** creating the initial GM account
* Any additional console use should come from ''telnet'' from a remote machine on the local network
* :!: Credentials for the remote console are the same as the GM account created above
* 2023/07/30: TODO: ''sed'' didn't work as-expected, hence this isn't a one-liner yet 8-)
sudo su 'trinity' -s '/usr/bin/bash'
nano ~/'Projects/trinity-335/run/etc/worldserver.conf'
Console.Enable = 0
==== telnet ====
telnet '192.168.1.152' '3443'
server shutdown 1
===== Realm Information =====
* To be done after databases are initialized
* Applies to the first realm
sudo mysql
UPDATE `authserver`.`realmlist` SET `name` = 'RoE (WotLK)', `address` = 'wow.realmofespionage.xyz' WHERE `realmlist`.`id` = 1;
===== Two-Factor Authentication =====
* :!: 2023/07/30: This may have different behavior, see ''TOTPMasterSecret'' in auth and world confs
* To be done after databases are initialized
* Applies to the first account
* :!: ''token_key'' must contain and not exceed 16 characters and can only contain characters A-Z and numbers 2-7 ((in other words, ''token_key'' requires a 16-character Base32 string))
* Add key to Authenticator app
* Authenticator will be prompted from the game client on each log-in
sudo mysql
UPDATE `authserver`.`account` SET `token_key` = 'x' WHERE `account`.`id` = 1
===== SOAP =====
* TODO: Re-figure out how SOAP works
====== Services ======
===== authserver =====
* 2027/07/30: TODO: Rename the service as ''tc-335-auth'' isn't rememberable
sudo -e '/etc/systemd/system/tc-335-auth.service' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-auth' --now
[Unit]
Description=TrinityCore 3.3.5 authserver
Wants=network-online.target
After=network-online.target mysqld.service
[Service]
Type=simple
User=trinity
Group=trinity
WorkingDirectory=/var/lib/trinity/Projects/trinity-335/run/bin
ExecStart='/var/lib/trinity/Projects/trinity-335/run/bin/authserver' -c '/var/lib/trinity/Projects/trinity-335/run/etc/authserver.conf'
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl status 'tc-335-auth' -l
===== worldserver =====
* :!: Make sure worldserver's Console is disabled before starting the ''worldserver'' service
* 2027/07/30: TODO: Rename the service as ''tc-335-world'' isn't rememberable
sudo -e '/etc/systemd/system/tc-335-world.service' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-world'
[Unit]
Description=TrinityCore 3.3.5 worldserver
Wants=network-online.target
After=network-online.target mysqld.service
[Service]
Type=simple
User=trinity
Group=trinity
WorkingDirectory=/var/lib/trinity/Projects/trinity-335/run/bin
ExecStart='/var/lib/trinity/Projects/trinity-335/run/bin/worldserver' -c '/var/lib/trinity/Projects/trinity-335/run/etc/worldserver.conf'
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl status 'tc-335-world' -l
===== Information =====
* :!: Explanation of the update process and following services
- Pull-in updated sources and compile TC (1:00)
- Stop TC auth and world services (3:00)
- Install updated-compiled TC (3:02:30)
- Start TC auth and world services (3:05)
===== Updater =====
==== Service ====
* :!: Change ''make --jobs=2'' as-needed
sudo -e '/etc/systemd/system/tc-335-up.service'
[Service]
User=trinity
Group=trinity
Type=oneshot
WorkingDirectory=/var/lib/trinity/Projects/trinity-335/build
Environment='CC=/usr/bin/clang'
Environment='CXX=/usr/bin/clang++'
ExecStartPre='/usr/bin/make' clean
ExecStartPre='/usr/bin/git' -C '/var/lib/trinity/Projects/trinity-335/src' pull origin '3.3.5'
ExecStartPre='/usr/bin/sync'
ExecStart='/usr/bin/cmake' '/var/lib/trinity/Projects/trinity-335/src' -DCMAKE_INSTALL_PREFIX='/var/lib/trinity/Projects/trinity-335/run' -DTOOLS='1'
ExecStart='/usr/bin/make' --jobs='2'
ExecStartPost='/usr/bin/sync'
==== Timer ====
* Every day at ''01:00:00''
sudo -e '/etc/systemd/system/tc-335-up.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-up.timer' --now
[Unit]
Description=TrinityCore 3.3.5 Git Updater and Compiler
Wants=network-online.target
After=network-online.target
[Timer]
OnCalendar=*-*-* 01:00:00
Persistent=true
[Install]
WantedBy=timers.target
===== Stopper =====
==== Service ====
sudo -e '/etc/systemd/system/tc-335-stop.service'
[Service]
Type=oneshot
ExecStart='/usr/bin/systemctl' stop 'tc-335-auth'
ExecStart='/usr/bin/systemctl' stop 'tc-335-world'
ExecStartPost='/usr/bin/sync'
==== Timer ====
* Every day at ''03:00:00''
sudo -e '/etc/systemd/system/tc-335-stop.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-stop.timer' --now
[Unit]
Description=TrinityCore 3.3.5 Services Stopper
Wants=network-online.target mysqld.service
After=network-online.target
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
===== Post-updater =====
==== Service ====
sudo -e '/etc/systemd/system/tc-335-up-post.service'
[Service]
User=trinity
Group=trinity
Type=oneshot
WorkingDirectory=/var/lib/trinity/Projects/trinity-335/build
ExecStart='/usr/bin/make' install
ExecStartPost='/usr/bin/sync'
==== Timer ====
* Every day at ''03:02:30''
sudo -e '/etc/systemd/system/tc-335-up-post.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-up-post.timer' --now
[Unit]
Description=TrinityCore 3.3.5 Post-Updater
Wants=network-online.target
After=network-online.target
[Timer]
OnCalendar=*-*-* 03:02:30
Persistent=true
[Install]
WantedBy=timers.target
===== Restarter =====
==== Service ====
sudo -e '/etc/systemd/system/tc-335-restart.service'
[Service]
Type=oneshot
ExecStart='/usr/bin/systemctl' start 'tc-335-auth'
ExecStart='/usr/bin/systemctl' start 'tc-335-world'
ExecStartPost='/usr/bin/sync'
==== Timer ====
* Every day at ''03:05:00''
sudo -e '/etc/systemd/system/tc-335-restart.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-restart.timer' --now
[Unit]
Description=TrinityCore 3.3.5 Services Restarter
Wants=network-online.target mysqld.service
After=network-online.target
[Timer]
OnCalendar=*-*-* 03:05:00
Persistent=true
[Install]
WantedBy=timers.target
===== Database Backup =====
* This backs up an archive to the local disk
==== authserver ====
=== Database Auth ===
sudo -H -u 'mysql' -e '/var/lib/mysql/auth/authserver' && sudo chmod '600' '/var/lib/mysql/auth/authserver'
[mysqldump]
user=authserver
password=x
=== Service ===
mkdir -p ~/'backups' && sudo -H -u 'mysql' mkdir -p '/var/lib/mysql/tmp' && sudo -e '/etc/systemd/system/authserver-db.service' && sudo sed -i 's/'CHANGEME'/'$USER'/g' '/etc/systemd/system/authserver-db.service'
[Service]
Type=oneshot
WorkingDirectory=/var/lib/mysql/tmp
ExecStartPre='/usr/bin/mysqldump' --defaults-extra-file='/var/lib/mysql/auth/authserver' --single-transaction 'authserver' -r '/var/lib/mysql/tmp/authserver.sql'
ExecStart='/usr/bin/gzip' -f '/var/lib/mysql/tmp/authserver.sql'
ExecStart='/usr/bin/bash' -c '"/usr/bin/mv" "/var/lib/mysql/tmp/authserver.sql.gz" "/home/CHANGEME/backups/authserver-database-auto-"$$(date +%%Y-%%m-%%d)".sql.gz"'
ExecStartPost='/usr/bin/sync'
=== Timer ===
* This happens daily
sudo -e '/etc/systemd/system/authserver-db.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'authserver-db.timer' --now && sudo systemctl start 'authserver-db' && sudo systemctl status 'authserver-db' -l
[Unit]
Description=TrinityCore (authserver) Database Backup
After=mysqld.service
[Timer]
OnCalendar=*-*-* 03:40:00
Persistent=true
[Install]
WantedBy=timers.target
==== characters ====
=== Database Auth ===
sudo -H -u 'mysql' -e '/var/lib/mysql/auth/characters' && sudo chmod '600' '/var/lib/mysql/auth/characters'
[mysqldump]
user=characters
password=x
=== Service ===
mkdir -p ~/'backups' && sudo -H -u 'mysql' mkdir -p '/var/lib/mysql/tmp' && sudo -e '/etc/systemd/system/characters-db.service' && sudo sed -i 's/'CHANGEME'/'$USER'/g' '/etc/systemd/system/characters-db.service'
[Service]
Type=oneshot
WorkingDirectory=/var/lib/mysql/tmp
ExecStartPre='/usr/bin/mysqldump' --defaults-extra-file='/var/lib/mysql/auth/characters' --single-transaction 'characters' -r '/var/lib/mysql/tmp/characters.sql'
ExecStart='/usr/bin/gzip' -f '/var/lib/mysql/tmp/characters.sql'
ExecStart='/usr/bin/bash' -c '"/usr/bin/mv" "/var/lib/mysql/tmp/characters.sql.gz" "/home/CHANGEME/backups/characters-database-auto-"$$(date +%%Y-%%m-%%d)".sql.gz"'
ExecStartPost='/usr/bin/sync'
=== Timer ===
* This happens daily
sudo -e '/etc/systemd/system/characters-db.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'characters-db.timer' --now && sudo systemctl start 'characters-db' && sudo systemctl status 'characters-db' -l
[Unit]
Description=TrinityCore (characters) Database Backup
After=mysqld.service
[Timer]
OnCalendar=*-*-* 03:41:00
Persistent=true
[Install]
WantedBy=timers.target
====== Backup ======
* Create backup archive on server and transfer to client computer
===== Server =====
==== Stop Services ====
****
sudo systemctl stop authserver worldserver
==== Backup Database ====
sudo mysqldump --defaults-extra-file='/var/lib/mysql/auth/authserver' --single-transaction 'authserver' -r ~/'authserver-database-manual-'$(date +%Y-%m-%d)'.sql' && sync
sudo mysqldump --defaults-extra-file='/var/lib/mysql/auth/characters' --single-transaction 'characters' -r ~/'characters-database-manual-'$(date +%Y-%m-%d)'.sql' && sync
==== Start Services ====
****
sudo systemctl start authserver worldserver
===== Client =====
==== Transfer Files To Client ====
****
scp espionage724@192.168.1.152:~/'authserver-database-'*'.sql' espionage724@192.168.1.152:~/'characters-database-'*'.sql' ~/'Downloads' && sync
====== Restore ======
===== Client =====
==== Uncompress Database ====
* This is only needed if restoring an **automated** database backup ((manual doesn't gzip))
gunzip ~/'Downloads/authserver-database-'*'.sql.gz'
gunzip ~/'Downloads/characters-database-'*'.sql.gz'
==== Transfer Files To Server ====
****
scp ~/'Downloads/authserver-database-'*'.sql' ~/'Downloads/characters-database-'*'.sql' espionage724@192.168.1.152:~
==== Remove Files ====
****
rm -f ~/'Downloads/authserver-database-'*'.sql' ~/'Downloads/characters-database-'*'.sql' && sync
===== Server =====
==== Stop Services ====
****
sudo systemctl stop authserver worldserver
==== Drop Previous Database ====
sudo mysql
DROP DATABASE authserver;
DROP DATABASE characters;
FLUSH TABLES;
==== Re-create Databases ====
sudo mysql
CREATE DATABASE authserver;
CREATE DATABASE characters;
==== Restore Database ====
sudo mysql 'authserver' < ~/'authserver-database-'*'.sql' && sync
sudo mysql 'characters' < ~/'characters-database-'*'.sql' && sync
==== Reapply Permissions ====
sudo mysql
GRANT ALL PRIVILEGES ON authserver.* to 'authserver'@'localhost' IDENTIFIED BY 'x';
GRANT ALL PRIVILEGES ON characters.* to 'characters'@'localhost' IDENTIFIED BY 'x';
FLUSH PRIVILEGES;
==== Start Services ====
****
sudo systemctl start authserver worldserver
==== Remove Backups ====
* Verify that TrinityCore works before running
rm ~/'authserver-database-'*'.sql' ~/'characters-database-'*'.sql' && sync