Teamspeak 3 Server von SQLite auf MySQL umstellen

06/19/2014 21:42 LeCoreA#1
Ob es nun aus Performance Gründen, Qualitätssicherung oder dem Hosting wegen passieren soll - einen Teamspeak 3 Server von SQLite auf MySQL umstellen ist keine schwierige Sache, wenn man die richtige Anleitung dafür hat. Aus diesem Grund biete ich euch hier ein up2date-Tutorial zu diesem Thema. Ich hoffe ich habe alles verständlich erklärt. Wenn nicht - fragt mich über die Kommentar Funktion. Ich antworte meist innerhalb weniger Stunden.


Bevor wir anfangen, ist es natürlich wichtig, dass wir ein Backup haben (Sollte absolut Selbstverständlich sein). Dazu gibt es einen Befehl, um ein Backup einer auf SQLite bestehenden Datenbank zu machen. Wir navigieren dazu in das Verzeichnis des Teamspeak Server (Falls nach meinem Tutorial gemacht: /home/teamspeak) und führen dort folgenden Befehl aus:

Code:
sqlite3 ts3server.sqlitedb .dump >> ts3sqldump.sql
Es ist wichtig, dass SQLite 3 installiert ist, damit der Befehl einwandfrei funktioniert. Alternativ installiert es mittels "apt-get install sqlite".

Wir müssen an unser exportierten Datenbank noch ein wenig was verändern, weswegen wir die .sql Datei mit einem Texteditor bearbeiten. Wir führen folgende Schritte durch:
  • PRAGMA foreign_keys=OFF; entfernen.
  • BEGIN TRANSACTION; entfernen.
  • COMMIT; entfernen.
  • Alle Zeilen entfernen, in welchen "sqlite_sequence" (ohne "") vorkommt.
  • Alle " durch ` ersetzen.

Alle "autoincrement" in "auto_increment" (jeweils ohne "") umwandeln.
Nun ist die Datei ready, um Sie über ein entsprechendes Tool wieder in die Datenbank einzupflegen (Beispielsweise PHPMyAdmin oder MySQL Dumper. Ich empfehle jedoch ersteres). Hierbei kann es zu folgendem Fehler kommen:

Code:
CREATE TABLE tokens ( server_id integer unsigned, token_key varchar(50) NOT NULL, token_type integer, token_id1 integer unsigned, token_id2 integer unsigned, token_created integer unsigned,  token_description varchar(255),  token_customset varchar);
Hier gebt ihr dem letzten varchar einfach eine Zuweisung (Beispiel: varchar(255)) und der Fehler sollte nicht mehr erscheinen.

Nun müssen wir im Ordner des Servers eine Datei Namens "ts3db_mysql.ini" mit folgendem Inhalt füllen. Passe jedoch die Daten entsprechend deiner Datenbank und Benutzer an:

Code:
[config]
host='localhost'
port='3306'
username='ts3'
password='passwort1234'
database='ts3'
socket='/var/run/mysqld/mysqld.sock'

Im selben Ordner öffnen wir nun die ts3server.ini Datei. Falls diese noch nicht besteht, erstellt Sie einfach mittels vi oder nano. Der Inhalt sollte etwa so aussehen:

Code:
machine_id=
default_voice_port=9987
voice_ip=0.0.0.0
licensepath=
filetransfer_port=30033
filetransfer_ip=0.0.0.0
query_port=10011
query_ip=0.0.0.0
query_ip_whitelist=query_ip_whitelist.txt
query_ip_blacklist=query_ip_blacklist.txt
dbplugin=ts3db_mysql
dbpluginparameter=ts3db_mysql.ini
dbsqlpath=sql/
dbsqlcreatepath=create_mysql/
dbconnections=10
logpath=logs
logquerycommands=0
dbclientkeepdays=30
logappend=0
Wichtig sind hier die Zeilen 11, 12 und 14, welche, sofern die Datei schon vorhanden ist, zu den o.g. Werten angepasst werden muss. Dann wird auch das MySQL Plugin richtig geladen und wir können mit dem nächsten Schritt fortfahren.


Nun kommen wir zum Testen - dabei testen wir zu erst, ob das benötigte MySQL Plugin richtig geladen wurde. Das geht mit folgendem Befehl:

Code:
ldd libts3db_mysql.so
Die Ausgabe sollte in etwa so aussehen:

Code:
linux-vdso.so.1 => (0x00007fffe4b7a000)
libmysqlclient.so.15 => /usr/lib/libmysqlclient.so.15 (0x00007fe18384f000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fe18353b000)
libm.so.6 => /lib/libm.so.6 (0x00007fe1832b8000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fe1830a2000)
libc.so.6 => /lib/libc.so.6 (0x00007fe182d40000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x00007fe182b08000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00007fe1828f0000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007fe1826d9000)
librt.so.1 => /lib/librt.so.1 (0x00007fe1824d0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe183db1000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fe1822b4000)

Wir starten nun testweise unseren Teamspeak3 Server mittels des minimal-startscript. Die Textausgabe sollten wir mittels eines kleinen Zusatzes aktivieren, um Fehler anzeigen zu lassen:

Code:
./ts3server_minimal_runscript.sh inifile=ts3server.ini
Wichtig ist das inifile=tsserver.ini, wodurch die eigene Konfiguration für MySQL überhaupt erst geladen wird. Die Ausgabe sollte dann folgendermaßen aussehen:

Code:
2012-03-26 11:28:30.309343|INFO |ServerLibPriv | | TeamSpeak 3 Server 3.0.3 (2012-03-17 06:12:11)
2012-03-26 11:28:30.310117|INFO |DatabaseQuery | | dbPlugin name: MySQL plugin, (c)TeamSpeak Systems GmbH
2012-03-26 11:28:30.310164|INFO |DatabaseQuery | | dbPlugin version: 1
2012-03-26 11:28:30.327685|WARNING |Accounting | | Unable to find valid license key, falling back to limited functionality
2012-03-26 11:28:30.340447|INFO |FileManager | | listening on 0.0.0.0:30033
2012-03-26 11:28:30.379590|INFO |VirtualServer | 1| listening on 0.0.0.0:9987
2012-03-26 11:28:30.379733|INFO |CIDRManager | | updated query_ip_whitelist ips: 127.0.0.1,
2012-03-26 11:28:30.379923|INFO |Query | | listening on 0.0.0.0:10011
Es wäre natürlich nervig, die Zeile inifile=tsserver.ini jedes mal wieder mit anzugeben (Das wäre nämlich sehr wichtig). Wir können einfach unser startscript anpassen indem wir Zeile 5 mit dieser austauschen:

Code:
COMMANDLINE_PARAMETERS="inifile=ts3server.ini" #add any command line parameters you want to pass here
Die Umstellung ist nun erfolgreich durchgeführt. Der Server kann nun wieder ganz normal benutzt werden, läuft jedoch wie gewünscht über MySQL.

-------------

Quelle: [Only registered and activated users can see links. Click Here To Register...]

Nutzungsrechte:
Ich bin der Eigentümer