Testserver with shared database

From Arianne
Jump to: navigation, search



This article describes how to configure a test server so that players can use their normal accounts and characters for testing.

The easy ways

There are two easy way:

Just setup a new empty database 
Players can create new accounts there, and some script may give them enough XP and items for testing. There are two problems with this approach: Players may just go to the test server to play with a strong character. And people may play there for a couple of days and get used to it for normal playing
Just copy the production database into a second database every night 
This has the obvious advantage that players can test with their own characters so the test are way more realistic. The problem with this approach is that it destroys the logs every night. An attacker may try to crack passwords on the test database without anyone noticing.

The complex way

The complex way allows players to test with their own account and characters, while doing smart things with the logs. The login events will be logged to the original database so that the number of wrong password tries sums up both databases. The Stendhal website displays a login history covering all sources: website, main server and test server. The gameEvents and itemlog tables will be kept for the analysis of bugs.

Configure marauroa on test server

Configure the test server just like a normal server with its own database.

Then you need to disable account and character creations. It is essential that those are only created on the main server in order to ensure a consistent database. And you may want to add a big hint, telling players that this is a test server:

allow_account_creation=false
allow_character_creation=false
server_welcome=Please note: The test database will be reset every day and all PROGRESS WILL BE LOST.

Setup test database

Please start the test server once, so that it will create all the tables, do not login.

We are going to replace some tables with VIEWs pointing to the main database:

DROP TABLE account;
DROP TABLE accountban;
DROP TABLE banlist;
DROP TABLE characters;
DROP TABLE loginEvent;
CREATE VIEW account AS SELECT * FROM marauroa.account;
CREATE VIEW accountban AS SELECT * FROM marauroa.accountban;
CREATE VIEW banlist AS SELECT * FROM marauroa.banlist;
CREATE VIEW characters AS SELECT * FROM marauroa.characters;
CREATE VIEW loginEvent AS SELECT * FROM marauroa.loginEvent;

Nightly update script

This update script will copy the rpobject table from the main server. rpobject is the table the progress of characters is stored in:

nice mysql -u testserver --password=xxx testserver < refresh-database.sql
mysqldump -f -u testserver --password=xxx stendhal rpobject | mysql -u testserver --password=xxx testserver

refresh-database.sql:

TRUNCATE rpzone;
TRUNCATE rpobject;