TeamSpeak3 von SQLite auf MySQL umstellen

Gerade bei mehreren TeamSpeak3-Servern oder aber auch, wenn man mit der Performance von SQLite nicht zufrieden ist, macht es Sinn, den Server auf MySQL umzustellen. Auch die Datenbankverwaltung wird dann wesentlich erleichtert.

Für die Umstellung sind allerdings ein paar Schritte nötig, welche ich hier mal erklären möchte.

Zuerst einmal benötigt man ein Backup der aktuellen Datenbank auf Basis von SQLite. Dieses holt man sich mit folgendem Befehl im Verzeichnis von TeamSpeak:

sqlite3 ts3server.sqlitedb .dump >> ts3sqldump.sql

Hierfür wird zwingend sqlite3 benötigt. Hat man dieses noch nicht auf dem Server installiert, sollte man das nun nachholen. Bei der Datei ts3sqldump.sql, welche dann herauskommt, muss man nun einige Dinge ersetzen/entfernen:

  • PRAGMA foreign_keys=OFF; entfernen.
  • BEGIN TRANSACTION; entfernen.
  • COMMIT; entfernen.
  • Alle Zeilen entfernen, in welchen sqlite_sequence vorkommt.
  • Alle " durch ` ersetzen.
  • Alle autoincrement in auto_increment umwandeln.

Dann ist die Datei normal bereit für den Import über z. B. phpMyAdmin oder MySQLDumper.
Allerdings kann es sein, dass bei folgender Zeile ein Fehler erkannt wird:

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
);

Das liegt an dem letzten „varchar“, welches keine Länge zugewiesen hat. Diesem einfach eine Länge zuweisen, z. B. varchar(255) und es funktioniert.

Als nächstes muss man im Verzeichnis von TeamSpeak eine Datei namens ts3db_mysql.ini mit folgendem Inhalt anlegen:

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

Die Angaben müssen natürlich entsprechend den eigenen Bedürfnissen angepasst werden und sollten selbsterklärend sein.

Danach muss, sofern schon vorhanden, die Datei ts3server.ini im selben Ordner geöffnet werden. Falls sie nicht vorhanden ist, einfach anlegen. Der Inhalt sollte etwa so aussehen:

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 vor allem Zeile 11, 12 und 14, welche, sofern die Datei schon vorhanden ist, zu den oben genannten Werten geändert werden müssen. Damit wird dann das MySQL-Plugin auch geladen.

Nun geht es ans Testen. Zuerst einmal sollte man testen, ob das erforderliche MySQL-Plugin in Ordnung ist. Das geht mit folgendem Befehl aus dem Ordner von TeamSpeak:

ldd libts3db_mysql.so

Die Ausgabe sollte so aussehen:

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)

Möglicherweise steht in Zeile 2 folgendes:

libmysqlclient.so.15 => not found

Hier ist MySQL dann einfach zu neu. In diesem Falle einfach die unten angehängte Datei libmysqlclient.so.15.zip herunterladen und folgendermaßen vorgehen:

unzip libmysqlclient.so.15.zip
cp libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so.15.0.0
cp libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so.15

Danach den Test oben nochmals ausführen. Die Datei sollte nun erfoglreich geladen werden.

Nun kann man den TeamSpeak3-Server testweise mit dem Minimal-Script starten, der praktischerweise eine Textausgabe enthält und somit Fehler zeigt:

./ts3server_minimal_runscript.sh inifile=ts3server.ini

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

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

Normal müsste man nun auch beim normalen Start immer das inifile=ts3server.ini mit angeben, was durchaus nerven kann. Alternativ kann man einfach das Startscript ts3server_startscript.sh dementsprechend anpassen. Dazu muss man lediglich Zeile 5 zu dieser ersetzen:

COMMANDLINE_PARAMETERS="inifile=ts3server.ini" #add any command line parameters you want to pass here

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.