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:
- alle " durch ` ersetzen
- alle Zeilen löschen, welche folgende Befehle enthalten:
- BEGIN TRANSACTION;
- COMMIT;
- sqlite_sequence
- ersetzen von "autoincrement" durch "auto_increment"
- Nun einfach die .sql-Datei in MySQL (z.B. mittels phpMyAdmin, mySQLdumper, etc.) importieren
Anschließend sollte die Datenbankstruktur ungefähr wie folgt aussehen:
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
Ähnliche Beiträge:
- Teamspeak 3 Admin – Tool mit grafischer Benutzeroberfläche zur Verwaltung von Teamspeak 3 Servern
- Teamspeak 3 – How to Chroot
- Prozessdumps erstellen anhand eines Beispiels von Outlook
- Vollständiges Speicherabbild unter Windows – Gehasst, verdammt, vergöttert
- Systeminformationen mit Hilfe von Bginfo auf dem Desktop zeigen





He du gescheiter Mensch
Ich geb dir am besten mal die Logindaten für unseren TS3 Server lol ^^
Von mir aus.
Vielleicht ist ja auch http://www.feldstudie.net/2009/12/22/teamspeak-3-how-to-chroot/ interessant. 
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?
Es gibt einfach keine Datenbank test. Wenn Teamspeak 3 wirklich dort hinein installiert werden soll, solltest Du die Datenbank (z.B. in phpmyadmin, mysqldumper, etc.) anlegen und den TS3 neu starten.
habs schon gemacht.
das es keine db test gab wusst ich, aber war eben seltsam das er das machen wollte obwohl ich nirgends die db test deklariert habe.
aber nu läufts
Jo, Hauptsache ist: es läuft und Du bist zufrieden.
^^ jo danke es geht alles im moment besser als erwartet
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
es möchte aber noch dazu gesagt sein ich habe eine debian lenny root , mit einem windows ts3 server geht das 1a
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.
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
Gern geschehen. Freut mich, dass es nun läuft. Viel Spaß noch mit TeamSpeak 3
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
Mit welchem Befehl startest Du genau den Server und falls Du eine ini-Datei bei Start benutzt, kopier mal bitte den Inhalt.
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
Schick mal bitte einen Screenshot der Benutzerrechte der SQL-Datenbank (z.B. über phpmyadmin) oder lade den Screen über Flickr, ImageShack oder ähnliches hoch.
Hast Du mal versucht, von anderen Programmen, Webapplikationen, etc. auf die Datenbank mit den Credentials zuzugreifen?
hier der screenshot
http://img691.imageshack.us/img691/7663/unbenannthva.jpg
das CMS meine Website greift auch über diesen Benutzer auf die DB zu, ohne Probleme.
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
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
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.
@ 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.
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
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
Danke für die Rückmeldung. Ich werde mir das nochmal anschauen und dann den Artikel ggf. anpassen.
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?
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
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
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
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!
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...
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
danke für die Anleitung
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"
Danke für die Anleitung!
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 =)
Ich hatte das selbe Problem!
Daraufhin hab ich mir das Paket von hier (http://www.tobias-hartmann.net/2009/12/teamspeak-3-server-unter-linux-debian-installieren/) runtergeladen. da aber NUR die libts3db_mysql.so von benutzen, den rest vom offiziellen download nutzen, da die anderen dateien zu ner älteren version gehören. bei mir gings dann. scheint nen fehler im downloadpaket zu sein...
Super, danke für den Hinweis. Sollte doch einigen Leuten weiterhelfen.
Hallo,
ich hab die Anleitung so gemacht wie du es gesagt hast. Nur beim Uploaden bekomme ich immer wieder fehler. Wärst du so freundlich mir deine ICQ nummer zu schicken über eMail damit du mir helfen könntest?
Sry, aber ich bin kein Teamspeak-Supporter. Du kannst jedoch gerne Deine Frage per Reply stellen. Um was für einen Upload geht es überhaupt?
ich habe ein problem mit der datenbank, habe sie laut anleitung die sqldump.sql bearbeitet und bei hochladen via phpmyadmin kommt ein problem:
"SQL-Befehl:
CREATE TABLE tokens(
token_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
);
MySQL meldet: Dokumentation
#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 ')' at line 1 "
und die Zeile in der DB sieht so aus:
"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);
"
kan mir mal einer Helfen was da verkehrt ist.
gruß Rickisani
es geht um den TS3 und wollte ihn auf MSQL umrüsten, habe die SQLdump erstellt und laut Anleitung umcodiert nur wen ich ihn via "myphpadmin" hochlade kommt die Fehlermeldung die ich im o.g.Tread erwähnt habe,
wer kann helfen
selbes Problem, wäre sehr nett wenn es sich mal jemand zur Brust nehmen könnte
Richtiger Befehl:
CREATE TABLE tokens(
token_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( 255)
);
Die letzte Länge des Datensatzes hat gefehlt.
lieben Gruß
Danke für den Hinweis.
Hi,
ihr könnt die Datei mit den folgenden Kommandos automatisch kompatibel machen:
sed -i "s/\"/\'/g" ts3_sqldump.sql
sed -i "s/autoincrement/auto_increment/g" ts3_sqldump.sql
sed -i "BEGIN TRANSACTION;/d" ts3_sqldump.sql
sed -i "COMMIT;/d" ts3_sqldump.sql
sed -i "sqlite_sequence/d" ts3_sqldump.sql
Gruß,
Jan
PS: Bei mir musste noch PRAGMA foreign_keys = OFF; entfernt werden, sonst hat MYSQL gemeckert unter Ubuntu 10.04.
Oh je, korrekt muss es also lauten:
sed -i "s/\"/\'/g" ts3_sqldump.sql
sed -i "s/autoincrement/auto_increment/g" ts3_sqldump.sql
sed -i "/BEGIN TRANSACTION;/d" ts3_sqldump.sql
sed -i "/COMMIT;/d" ts3_sqldump.sql
sed -i "/sqlite_sequence/d" ts3_sqldump.sql
und eventuell noch
sed -i "/PRAGMA foreign_keys = OFF;/d" ts3_sqldump.sql
OK - irgendwie zerpflückt mir hier alles mit UTF... kannst du meine Beiträge irgendwie zusammenfügen?
sed -i "/PRAGMA foreign_keys=OFF;/d" ts3_sqldump.sql
ist richtig, irgendwie waren da Leerzeichen dazwischen geraten
Aber es funktioniert trotzdem nicht. Die SQL Syntax die dabei herauskommt, scheint nicht korrekt zu sein?
SQL-Befehl:
INSERT INTO 'channel_properties'
VALUES ( 1, 1, 'channel_name', 'Default Channel' ) ;
MySQL meldet: Dokumentation
#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,1,'channel_name','Default Channel')' at line 1
Du hast die " durch ' und nicht durch ` ersetzt..
Hallo Leute!
Ich habe gesehen das zwei Posts vor mir schon jemand das Problem hatte. Ich habe alle Anweisungen aus dem Howto befolgt. jedoch erhalte ich immernoch folgende Fehlermeldung beim kopieren der DB per phpMyadmin
#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 ')' at line 1
Kann mir wer sagen wo da das Problem liegt?
Jo, und die Antwort dazu steht eigentlich genau ein Kommentar vor Deinem.
Die habe ich ja auch gelesen. Allerdings habe ich die " genau durch ` ersetzt. Naja habe jetzt weiter sqlite. Läuft ja auch so. Vielleicht wirds ja irgendwann mal einfacher das umzustellen.
Trotzdem danke
Habe folgendes Problem:
ERROR 1064 (42000) at line 1579: 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_topic','');
INSERT INTO `channel_properties` VALUES(26,2633,'channel_des' at line 1
Ich meine alles korrekt konvertiert zu haben
problem gefunden... ein \ am ende eines channelnames in der zeile davor hat das ' escaped
Ich möchte an der Stelle eine Kleinigkeit ergänzen, die mich beim Einrichten von Teamspeak 3 in Verbindung mit MySQL heute wirklich Nerven gekostet hat.
Habe den Server nach dem o.g. HowTo eingerichtet. Allerdings funktioniert dieser NICHT uneingeschränkt mit der aktuellen Debian Distribution Squeeze.
Mit Squeeze wird "libmysqlclient.so.16" mit ausgeliefert. "libmysqlclient.so.15" befindet sich bei der Minimal-Installation nicht auf dem System.
Da "libts3db_mysql.so" aber "libmysqlclient.so.15" benötigt wir das Starten des Teamspeak-Servers mit der folgenden Fehlermeldung quitiert:
|CRITICAL|DatabaseQuery | | unable to load database plugin library "libts3db_sqlite3.so", halting!
Diese Abhängigkeit kann allerdings behoben werden in dem man "libmysqlclient.so.15" nachinstalliert.
Hierzu einfach folgende Schritte als root ausführen:
wget http://ftp.nl.debian.org/debian/pool/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.51a-24+lenny5_i386.deb
dpkg -i libmysqlclient15off_5.0.51a-24+lenny5_i386.deb
Danach kann der Teamspeak-Server über das mitgelieferte Start-Script gestartet werden.
Huhu, sehr interessanter Post. Ich liebe dieses Thema und warte auf weitere Posts zu dem Thema.