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:

Quellcode

  1. 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" (ohne "") vorkommt.
  • Alle " durch ` ersetzen.
  • Alle "autoincrement" in "auto_increment" (jeweils ohne "") 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:

SQL-Abfrage

  1. 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:

Quellcode

  1. [config]
  2. host='localhost'
  3. port='3306'
  4. username='ts3'
  5. password='passwort1234'
  6. database='ts3'
  7. 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:

Quellcode

  1. machine_id=
  2. default_voice_port=9987
  3. voice_ip=0.0.0.0
  4. licensepath=
  5. filetransfer_port=30033
  6. filetransfer_ip=0.0.0.0
  7. query_port=10011
  8. query_ip=0.0.0.0
  9. query_ip_whitelist=query_ip_whitelist.txt
  10. query_ip_blacklist=query_ip_blacklist.txt
  11. dbplugin=ts3db_mysql
  12. dbpluginparameter=ts3db_mysql.ini
  13. dbsqlpath=sql/
  14. dbsqlcreatepath=create_mysql/
  15. dbconnections=10
  16. logpath=logs
  17. logquerycommands=0
  18. dbclientkeepdays=30
  19. logappend=0
Alles anzeigen
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:

Quellcode

  1. 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:

Quellcode

  1. unzip libmysqlclient.so.15.zip
  2. cp libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so.15.0.0
  3. 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:

Quellcode

  1. ./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:

Quellcode

  1. COMMANDLINE_PARAMETERS="inifile=ts3server.ini" #add any command line parameters you want to pass here
Dateien
Über den Autor
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

10.806 mal gelesen

Kommentare 25

  • FireEmerald -

    Danke für deine Anleitung, ein paar Kleinigkeiten zum ergänzen:

    Der "licensepath" muss wie folgt angegeben werden:
    - licensepath=\home\folder\

    Bei der Erstellung der MySQL Database ist darauf zu achten als Charset:
    - utf8_unicode_ci bzw. utf8 - utf8_unicode_ci

    festzulegen, da ansonsten eure Channelnamen etc. mit Sonderzeichen nicht mehr erkannt werden / verschwinden.

  • FrustusZ -

    Hey,

    Kleiner Tipp:
    Wenn man ein 64bit TS3 verwendet sollte man natürlich libmysqlclient.so.15.0.0 in /usr/lib64 kopieren anstatt in /usr/lib .

    Ansonsten sehr übersichtlich und einfach geschrieben. Ging total fix und jetzt ist mein Webview noch ne Ecke schneller als wen ich immer alle Channeldaten & Co. über Teamspeak Queries auslesen lasse.

    LG Justus

    PS.: TS-Server auf Windows ? Und sich dan noch wundern warum die Befehle in CMD nicht gehen ? Also bitte. Falls ihr zuhause nen TS hosten wollt kann ich euch nur davon abraten. Und wen ihr nen Windows Server habt, schmeißt den entweder weg oder macht ne virtuelle Maschine mit Linux drauf. Das erspart euch viel Arbeit und Ärger.

  • darkneo666 -

    hallo ich habe alles umgeschrieben und bekomme nun disen fehler.

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"channel_properties" VALUES(1,11,'channel_name','[*spacer1]_')' at line 1

    SQL Befehle.

    INSERT INTO "channel_properties"
    VALUES ( 1, 11, 'channel_name', '[*spacer1]_' ) ;

  • Spirit -

    Die Channel sind weg, da per Import die Channel "Zeichen" falsch reinimportiert werden.

    Mit Zeichen meine ich Sterne oder bestimmte Zeichen.
    Wenn ihr das Snapshot des Servers jedoch importiert, dann werden die Channel richtig in der Datenbank abgespeichert.:

    [cspacer]» ♣♣♣ AFK - Raum ♣♣♣ « <<< richtig
    [cspacer]» ♣♣♣ AFK - Raum ♣♣♣ « <<< falsch!

  • Spirit -

    Zu beachten ist, dass sämtliche Icons weg sind und die Channel IDs sich ändern.

  • Spirit -

    Also das Problem ist für mich behoben.

    Erstellt euch einfach ein Snapshot bsp mit YatQua und ladet es dann wieder drauf wenn alle Channel weg sind :)

  • Spirit -

    Würde es auch gehen, dass man einfach ein Snapshot einspielt?

  • Black Rider -

    Hm, ich kann mir das ehrlich gesagt weder erklären noch eine Hilfe dazu bieten. :(

  • Spirit -

    Ja wenn ich wieder auf SQLite umstelle sind alle Channel wieder da.

    In der TS3Server.ini sind die Einstellungen für MySQL. Starte ich den Server mit den Einstellungen werden die Channel gelöscht. Starte ich sie ohne benutzt der Server SQLite und alle Channel sind wieder da :D

  • Black Rider -

    Funktioniert es denn, wenn du wieder auf SQLite umstellst?

  • Black Rider -

    Da du nun registriert bist, am einfachsten per PN. ;)

  • Spirit -

    Ja klar. Wie soll ich es dir schicken?

  • Black Rider -

    Kannst du mir mal die sqlite- sowie die MySQL-Datenbank schicken? Dann könnte ich mir das mal genauer ansehen.

  • Spirit -

    Also erstmal danke für das Tutorial :D

    Ich habe den SQLite Dump so wie in deinem Tutorial umgeschrieben und per PHPMyadmin importiert. Dort kamen keine Errors.

    Dann wenn ich den Server hochfahre kommt dieser Text:
    2013-03-28 01:44:10.564717|ERROR |ChanClients | 12| ChanClients() unable to load channel(ID: 2160) from db (missing channelOrderID: 2171), deleting.
    2013-03-28 01:44:10.566297|ERROR |ChanClients | 12| ChanClients() invalid channel structure, not all channels could be loaded
    2013-03-28 01:44:10.566361|WARNING |ChanClients | 12| failed to load: cID: 209 pcID: 284 deleting channel!

    Als ich dann wieder einen Blick in die Datenbank warf, waren alle Channel plötzlich weg. Bis auf 1 Spacer ^.-

    Ich hoffe du kannst mir helfen :D

  • Black Rider -

    Hast du dein sqlite-Backup auch korrekt umgeschrieben und wieder importiert?

  • Spirit -

    Bei mir sind leider auch nach dem Start alle Channe aus der Datenbank gelöscht worden.

    Lösung?

  • serecords -

    Hat geklappt. Danke dir!

    Nur leider wurden alle Channel gelöscht, aber hatte zum glück ein Backup gemacht.

  • Shufro -

    Okay :-/ muss ich wohl woanders mein glück versuchen ^^

  • Black Rider -

    Ich habe bisher noch nie einen TeamSpeak-Server auf Windows installiert und konfiguriert und weiß auch nicht, ob ich genug Zeit dafür finde...

  • Shufro -

    Könntest du den ein TuT für Windows machen? den alles was ich bisher fand z.b. das youtube.com/watch?v=7qxadbf_J_c hat alles nicht funktioniert (da hat sich die Konsole sofort geschlossen und alles lief auf SQL weiter -.-)

    MfG

  • Shufro -

    Ohh man danke trotzdem xd ^^

  • Black Rider -

    Der Artikel ist nur für ein Linux-System gedacht.
    Wie das unter Windows funktioniert, kann ich dir nicht sagen. ;)

  • Shufro -

    Wo muss ich den den Befehl eingeben -.-" kann mir jemand ein Bild senden?
    den bei mir ist die "sqlite3.exe" eine CMD console die sich öffnet und wen ich den befehl eingebe steht da das nach "sqlite3" ein Syntax fehler ist ?

  • alexia -

    danke für deine Mühe, hat alles bestens funktioniert :)

  • [FFW] Patric -

    Ich finde das sehr gut erklärt und ich konnte keine fehler entdecken!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen