wildlife

Teamspeak 3 – Umstellen von SQLite auf MySQL

// December 27th, 2009 // IT, Tutorials

Wenn die Performance bei Einsatz von Teamspeak 3 mit SQLite etwas schwächelt oder größere Teamspeak 3 Server genutzt werden sollen, empfiehlt sich ein Umstieg auf eine MySQL-Datenbank. Dabei kann man wie folgt vorgehen. Die Anleitung basiert auf einem Linux-Betriebssystem, auf welchem sqlite3 bereits installiert ist. Sollte sqlite noch nicht installiert sein, kann man dies z.B. über "zypper install sqlite3" oder "apt-get install sqlite3" nachinstallieren. SQLite 1 bzw. 2 reichen hier leider nicht, da sonst beim Export die Fehlermeldung "Unable to open database "ts3server.sqlitedb": file is encrypted or is not a database" erscheint.

Als erstes benötigen wir einen Dump der bestehenden SQLite-Datenbank des Teamspeak 3 Servers. Diesen erstellen wir über den Befehl:

sqlite3 ts3server.sqlitedb .dump .quit >> ts3  sqldump.sql

Damit der sqlite-Export auch noch in ein passendes Format für MySQL kommt, müssen folgende Änderungen (am Besten in einem Editor, wie z.B. Notepad++, Vi) vorgenommen werden:

  1. alle " durch ` ersetzen
  2. alle Zeilen löschen, welche folgende Befehle enthalten:
    1. BEGIN TRANSACTION;
    2. COMMIT;
    3. sqlite_sequence
  3. ersetzen von "autoincrement" durch "auto_increment"
  4. Nun einfach die .sql-Datei in MySQL (z.B. mittels phpMyAdmin, mySQLdumper, etc.) importieren

Import der Datenbank in MySQL

Anschließend sollte die Datenbankstruktur ungefähr wie folgt aussehen:

Struktur in MySQL-Datenbank nach Import

Nun müssen wir Teamspeak 3 noch mitteilen, wo die MySQL-Datenbank gefunden werden kann und mit welchen Anmeldedaten zugegriffen werden muss, um die Verbindung erfolgreich aufbauen zu können. Dazu legen wir die Datei "ts3db_mysql.ini" an:

vim ts3db_mysql.ini

In dieser Datei speichern wir nun die benötigten Informationen. Die Werte müssen natürlich entsprechend Eurer MySQL-Konfiguration angepasst werden:

[config]
 host='SERVERNAMEorIP'
 port='usually3306'
 username='DBusername'
 password='1234xyz'
 database='TS3'
 socket=

Anschließend lassen wir uns entweder eine ini-Datei mit den Startparametern für Teamspeak 3 über "./ts3server_linux_x86 createinifile=1" erstellen oder bearbeiten die bereits bestehende Datei. Wichtig ist, dass die drei folgenden Werte wie beschrieben angepasst werden:

dbplugin=ts3db_mysql
dbpluginparameter=ts3db_mysql.ini
dbsqlcreatepath=create_mysql/

Danach können wir den Teamspeak 3 Server mit der neuen ini-Datei starten:

./ts3server_linux_x86 inifile=ts3server.ini

Wenn wir uns nun mit dem Teamspeak 3 Client auf den Server verbinden sehen wir, dass der Server nun mit MySQL als Basis läuft:

# ./ts3server_linux_x86 inifile=server.ini
Logging started
2009-12-27 09:52:08.890190|INFO    |ServerLibPriv |   | Server Version: 3.0.0-beta5 [Build: 9462]
2009-12-27 09:52:08.891803|INFO    |DatabaseQuery |   | dbPlugin name:    MySQL plugin, (c)TeamSpeak Systems GmbH
2009-12-27 09:52:08.891917|INFO    |DatabaseQuery |   | dbPlugin version: 1
2009-12-27 09:52:09.195127|INFO    |Accounting    |   | Licensing Information
2009-12-27 09:52:09.195985|INFO    |Accounting    |   | licensed to       : Torsten
2009-12-27 09:52:09.196600|INFO    |Accounting    |   | type              : Non-profit
2009-12-27 09:52:09.197240|INFO    |Accounting    |   | starting date     : Tue Dec 22 00:00:00 2009
2009-12-27 09:52:09.197768|INFO    |Accounting    |   | ending date       : Wed Dec 22 00:00:00 2010
2009-12-27 09:52:09.198248|INFO    |Accounting    |   | max virtualservers: 10
2009-12-27 09:52:09.198680|INFO    |Accounting    |   | max slots         : 512
2009-12-27 09:52:09.218065|INFO    |FileManager   |   | listening on x.x.x.x:30033
2009-12-27 09:52:09.250340|INFO    |VirtualServer |  1| listening on x.x.x.x:9987
2009-12-27 09:52:09.251054|INFO    |Query         |   | listening on x.x.x.x:10011

37 Responses to “Teamspeak 3 – Umstellen von SQLite auf MySQL”

  1. Boomel says:

    He du gescheiter Mensch :)

    Ich geb dir am besten mal die Logindaten für unseren TS3 Server lol ^^

  2. Tino says:

    Super anleitung, war echt easy.
    Leider bekomm ich ne fehlermeldung wenn ich den server starten will -.-
    [quote]Logging started
    2009-12-28 17:23:14.354803|INFO |ServerLibPriv | | Server Version: 3.0.0-beta9 [Build: 9527]
    2009-12-28 17:23:14.433550|INFO |DatabaseQuery | | dbPlugin name: MySQL plugin, (c)TeamSpeak Systems GmbH
    2009-12-28 17:23:14.445298|INFO |DatabaseQuery | | dbPlugin version: 1
    2009-12-28 17:23:14.530730|ERROR |DatabaseQuery | | mysql_real_connect() failed with error: Unknown database 'test'
    Segmentation fault
    [/quote]
    Kannst du mir helfen?

  3. DanteXX says:

    hi ,

    ich habe alles so gemacht wie beschrieben dennoch habe ich bei starten des servers zwar keine probleme doch wenn ich z.b. groups anlegen oder ändern möchte schmiert der ts server ab!

    meldung:
    2009-12-31 21:37:48.797279|CRITICAL|DatabaseQuery | | setSQLfromFile( file:sql/group_member_detail_get_by_groupid.sql) faid

    irgent eine idee oder liegt das am beta stadium?

    Danke schonmal
    Dante

    • DanteXX says:

      es möchte aber noch dazu gesagt sein ich habe eine debian lenny root , mit einem windows ts3 server geht das 1a

    • Torsten says:

      entweder ist die Datei group_member_detail_get_by_groupid.sql nicht im Verzeichnis sql/ vorhanden oder der Benutzer, welcher den Server starten möchte, hat keine Berechtigungen auf diese Datei zuzugreifen. Bitte überprüfe mal die Berechtigungen der Dateien und Verzeichnisse.

      • DanteXX says:

        hi,

        danke für die Antwort,
        ich habe noch lange rumgebastelt an der Geschichte,
        habe mir dann gedacht ich mache das einfach mal alles von vorne neu.
        Siehe da, nur läuft alles mit MySQL perfekt.

        ich bedake mich daher nochmal fürr die Antowrten^^^

        Gruß DANTE

  4. Erwin says:

    Hi,
    ich hab jetzt lange probiert. Leider verbindet TS nur mit der db wenn der Benutzer "root" heisst und keine DB-Passwort festgelegt ist.
    Wenn ich wie oben beschrieben in der "ts3db_mysql.ini" andere Daten eintrage, z.B.:
    host='localhost'
    port='usually3306'
    username='DBuser'
    password='123456'
    database='ts3'
    socket=
    (DB und User existieren und haben auch rechte), bekomme ich die Fehlermeldung:
    mysql_real_connect() failed with error: Access denied for user 'root'@'localhost' (using password: NO)
    Zum System: Debian 4, MYSQL 5 und TS-Server beta 12

  5. Erwin says:

    HI,
    ich starte den Server mit "./ts3server_linux_x86 inifile=ts3server.ini"
    der Inhalt der "ts3db_mysql.ini"
    [config]
    host=localhost
    port=3306
    username=xxxxxx
    password=xxxxxx
    database=ts3
    socket=
    Ich habe mir auch wie oben beschrieben die "ts3server.ini" erstellen lassen und geändert, die sieht so aus:
    machine_id=
    default_voice_port=9987
    voice_ip=192.168.178.34
    licensepath=
    filetransfer_port=30033
    filetransfer_ip=192.168.178.34
    query_port=10011
    query_ip=192.168.178.34
    dbplugin=ts3db_mysql
    dbpluginparameter=ts3db_mysql.ini
    dbsqlpath=sql/
    dbsqlcreatepath=create_mysql/
    logpath=logs
    logquerycommands=0

  6. Olli says:

    Also ich habe das selbe Problem.

    |DatabaseQuery | | mysql_real_connect() failed with error: Access denied for user 'root'@'localhost' (using password: NO)

    In der ts3_mysql.ini ist als Benutzer ts3serv eingetragen (benutzer gibts keine sorge ^^)

    Der Benutzer hat volle Rechte auf die Datenbank.

    Naja trotz benutzerangabe in der ini will er als root verbinden was ich etwas komisch finde.

    Ich könnte zwar jetzt mein root Daten in die ini eintragen allerdings weiger ich mich dies zutun ;-)

    Wäre cool wenn wer ne idee hat woran es liegt das er versucht sich trotz User angabe als root an der db anzumelden

    Gruß Olli

  7. Olli says:

    Ok Problem auf unfreundlichem wege (in augen des Servers) gelöst ...

    Wenn man im phpMyAdmin den Benutzer root auf localhost ohne passwort anlegt geht es. Wenn der MySQL Server richtig eingestellt ist und man phpMyAdmin in der Konfiguration verbietet eine Anmeldung OHNE Passwort durchzuführen kann man diese Variante vorübergehend in Betrieb nehmen.

    Jedoch möchte ich nicht das diese erklärung von mir wer für den Produktiven Einsatz nutzt da das betreiben des Root Nutzers ohne Passwort wenn auch nur auf localhost ein sicherheitsproblem darstellt ;-)

  8. Olli says:

    Ok noch nen Hinweiß an dieser Stelle wie ich grade bemerkt habe , wenn ihr nach dem schema von mir beschrieben vorgeht also root blablabla dann legt er die Datenbank test an.

    Also ich glaub grad langsam das die obere beschreibung etwas bug ist weil ich hab das gefühl der fragt nicht einen wert aus der ts3db_mysql.ini ab.

  9. Torsten says:

    @ Olli & Erwin:
    also an meiner Anleitung wird's nicht liegen. Dafür funktioniert sie bei mir und anderen zu gut. ;)
    Testet mal bitte folgendes: Installiert den TeamSpeak 3 Server nochmal neu (ggf. in ein anderes Verzeichnis, damit der bestehende Server nicht beeinträchtig wird) und stellt auf MySQL um, _BEVOR_ Ihr ihn konfiguriert und startet. Nachdem der TeamSpeak 3 Server sauber unter MySQL mit den Standardsettings läuft, importiert Ihr die Einstellungen aus der SQLite Datenbank des 'richtigen' TeamSpeak 3 Servers. Natürlich vorher alle TS3-Prozesse stoppen bzw. killen, damit die Datenbank konsistent bleibt.

  10. Olli says:

    So und wieder da ;-) Ich bin deine Anleitung nochmal durchgegangen aber er sagt mir immer das selbe
    2010-01-04 23:56:28.006361|ERROR |DatabaseQuery | | mysql_real_connect() failed with error: Access denied for user 'root'@'localhost' (using password: NO)

    Die Daten sehn wie folgt aus und da is auch alles richtig:

    [config]
    host='localhost'
    port='3306'
    username='teamspeak'
    password='***********'
    database='ts3'
    socket=

    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
    dbplugin=ts3db_mysql
    dbpluginparameter=ts3db_mysql.ini
    dbsqlpath=sql/
    dbsqlcreatepath=create_mysql/
    logpath=logs
    logquerycommands=0

    Als info fals es intressiert sind auf Beta12 am testen

    Gruß Olli

  11. Olli says:

    So Fehler ist gefunden und behoben ;-)

    Fehler lag in deinem Tutorial ^^

    Du sagst in die Datei muss folgendes:

    [config]
    host='SERVERNAMEorIP'
    port='usually3306'
    username='DBusername'
    password='1234xyz'
    database='TS3'
    socket=

    Richtig heißen muss es aber:

    [config]
    host='SERVERNAMEorIP'
    port='usually3306'
    username='DBusername'
    password='1234xyz'
    database='TS3'
    socket=''

    Du hast einfach die '' vergessen ^^

    So mit dieser Info noch eine schöne Nacht ;-)

    Gruß Olli

  12. Ich habe genau das gleiche Problem aber es läuft auch mit ' ' nicht...aus irgendeinem Grund läd er diese ini wohl nicht oder wieso sollte er mit root verbinden? oder liegt es an der mysql datenbank?

    • Olli says:

      Problem ist gelöst ;-)
      Lag vermutlich an einem ungewoltem Leerzeichen in seinen Daten.
      Nach dem übernehmen meiner ini´s und anpassung an seine Daten lief es.
      CLOSE

  13. Olli says:

    Also wie gesagt bei mir läufts nun ohne nenenswerte Probleme.
    Warum er bei dir nicht will is mir grad fraglich ...
    Kannst mich ja mal Email oder ICQ kontaktieren dann könnte man mal zusammen schauen wo die / der Fehler hängen könnte.
    Mail: Partymaster18e@live.de (Kein MSN Messenger Account)
    ICQ: 576500594
    Gruß Olli

  14. Ulf says:

    Hi
    Ich hatte das gleiche Problem. Die Lösung ist ganz einfach.

    Es ist ganz wichtig, nach der Letzten Zeile in der .ini Datei eine leere Zeile eizufügen. Ansonsten verarbeitet Teamspeak die Datei nicht.

    Gruß
    Ulf

  15. mercilessXoX says:

    Hallo erst mal Danke das jemand sich mühe gibt das zu erklären so nun mein problem

    ich habe dieses auch schon öffters probiert in allen möglichen farianten nur bekomme immer die fehler meldung

    ts3server@aioneclipse:~/team3> ./ts3server_linux_amd64 inifile=ts3server.ini
    Logging started
    2010-01-18 12:17:43.023327|INFO |ServerLibPriv | | Server Version: 3.0.0-beta12 [Build: 9596]
    2010-01-18 12:17:43.023691|CRITICAL|DatabaseQuery | | unable to load database plugin library, halting!

    • Thessalos says:

      Das Problem hab ich auch, wenn ich versuche TS3 aus einem anderen Verzeichnis zu starten.
      Sobald ich in das TS3-Verzeichnis wechsel und dort ts3server starte, klappt es. Allerdings gefällt mir die Lösung nicht wirklich, da ich so chroot nicht mit eingebaut bekomme...

  16. Ulf says:

    Hallo, hast du schon mal versucht, die Datenbank beim start zu löschen und neu anzulegen?

    Option
    ./ts3server_linux_x86 clear_database=1 dbplugin=ts3db_mysql inifile=ts3server.ini

  17. TS3 says:

    danke für die Anleitung

  18. Chris says:

    Kleine änderung zur "beta17"
    es gibt jetzt ein "Start" Script zum TS3
    --> ts3server_minimal_runscript.sh <--
    in der besagten Datei muß jetzt die ts3server.ini hinterlegt werden.
    einfach
    COMMANDLINE_PARAMETERS=""
    um folgendes erweitern
    COMMANDLINE_PARAMETERS="inifile=ts3server.ini"

  19. Kawasakai says:

    Danke für die Anleitung!

  20. leguz says:

    sh-3.2$ 2010-02-13 12:32:49.487706|CRITICAL|DatabaseQuery | | unable to load database plugin library "libts3db_mysql.so", halting!

    Fehler verusacht durch

    sh-3.2$ ldd libts3db_mysql.so
    linux-gate.so.1 => (0xf773b000)
    libmysqlclient.so.15 => not found
    libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf763b000)
    libm.so.6 => /lib32/libm.so.6 (0xf7617000)
    libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf760a000)
    libc.so.6 => /lib32/libc.so.6 (0xf74b7000)
    /lib/ld-linux.so.2 (0xf773c000)

    wenn einer rat hat her damit =)

Leave a Reply