Mehr als 500 Server -> Umstellung auf MySQL?

  • Hey Leute.


    Wir haben nun mehr als 500 Server erreicht, und die Server crashen schön langsam nach einiger Zeit.
    Gibt es eine Möglichkeit, die sqlite in MySQL umzuconverten?


    Die derzeitigen Tutorials im Internet bringen bei mir immer verschiedene Syntax Fehler beim Importieren.


    ._.

  • Hallo,
    Eine Umstellung des Servers von SQLite zu MySQL wird schwierig, denn die beiden Datenbanksysteme haben eine unterschiedliche Syntax.


    Hier ein Paar unterschiede:



    Im Internet habe ich auch nur Navicat Premium gefunden, mit dem Kann man Datenbanken Transferieren, jedoch kommt dann immer ein Error dass Datentypen nicht existieren bei MySQL, die aber SQLite hat.


    Die zwei Datenbanken sind meiner Meinung also zu verschieden um das einfach so zu convertieren.


    Gruß,
    RootsWin

    Gute vServer, Root Server oder Dedicated Server gesucht?


    Die findest du hier:
    (5% Rabatt mit dem Rabattcode "TSConnNewcomer" bei Erstbestellung)


    Noon-Server.de




  • Wie von RootsWin schon gesagt ist dies nicht ganz einfach. Wenn Ihr das auch macht dann solltet Ihr das vorallem gut vorbereiten und den Leuten/Kunden(?) bescheid geben.


    Als Tipp vielleicht noch: Ich würde mir ca 3-4 neue Server erstellen und das erstmal auf einem externen, vielleicht Localen, Server probieren bzw fertig programmieren bevor man es dann auf die Kunden los lässt.
    Außerdem würde ich ab einer bestimmten Anzahl von Teamspeak Servern auf einem Root/V-Server eine Grenze setzen und mir einen neuen Root/V-Server zulegen und dort alle anderen neuen Teamspeak Server drauf laufen lassen. Ich finde dies einfacher zu Handhaben, leichter zu Supporten und wenn mal Ausfälle passieren können sich max 500 Kunden beschweren(vorrausgesetzt es fällt natürlich nur 1 Server zur Zeit aus). Außerdem bleibt dann auch der Traffic auf einem durchschnittlich gleichem Level und die Server stürzen nicht mehr so viel ab weil es einfach zu viele Virtuelle Server auf einer Instanze sind. Wenn man dies macht kann man die neuen Server ja von vorneherein auf einer MySQL Datenbank laufen lassen.

  • Ich glaube es wäre einfacher von jedem Server ein Backup zu machen, den Server dann auf MySQL umzustellen, und die Backups wieder einspielen. Das klingt zwar nach sehr viel Arbeit, aber anders wird das glaub ich nicht zu machen sein.


    Gruß,
    RootsWin

    Gute vServer, Root Server oder Dedicated Server gesucht?


    Die findest du hier:
    (5% Rabatt mit dem Rabattcode "TSConnNewcomer" bei Erstbestellung)


    Noon-Server.de




  • Hallo,


    ich schlage folgendes vor: Erstelle eine frische Installation eines TeamSpeak 3 Servers - dieses mal jedoch mit einer MySQL bzw. MariaDB Datenbank: TeamSpeak Server Installation mit der MariaDB


    Ich empfehle dir direkt die MariaDB zu nutzen, wenn du ihn eh neu installierst. Ist performance-reicher und aktueller als die MySQL Datenbank. Ansonsten funktioniert die Anleitung genauso für die MySQL Datenbank. Du musst nur immer "mariadb" durch "mysql" austauschen. ;)


    Gut. Je nachdem, wo du die neue Instanz installierst und ob du noch eine entsprechend freie IP hast, kannst du die Instanz gleich starten. Ansonsten lasse sie erstmal aus.


    Jetzt machst du am besten pro virtuellen Server einen Snapshot. Hierzu empfehle ich dir, dass du ein Script bastelst/nimmst, dass das entsprechend automatisiert tut. Danach hast du dann so viele Snapshot-Dateien wie virtuelle Server. ;)


    Jetzt musst du ggfs. die funktionierende Instanz stoppen und die neue starten. Sobald diese gestartet ist, kannst du mit dem fast dem gleichen Skript die Snapshots auf der neuen Instanz wieder einspielen. So sollte das ganze relativ schnell und sauber gehen. :)


    Wenn du dich dann versuchst, auf einen virtuellen Server zu verbinden, sollte das a) funktionieren und b) genauso erscheinen, wie zuvor.


    Jetzt musst du nur noch folgendes tun: Verschiebe oder kopiere das files/ Verzeichnis von der alten Instanz in die neue. Somit sind wieder alle Dateien da, wo sie auch vorher waren. ;)


    Das wär's eigentlicht. Ich würde das dann erstmal eine weile so testen und belassen. Wenn es ein, zwei Wochen oder einen Monat ohne Probleme funktioniert, dann würde ich den Server nochmal anfassen und aufräumen:

    • Alte Instanz löschen
    • Neue Instanz in das Verzeichnis der alten Instanz verschieben

    Hinweis: Hierzu müssen die Instanzen natürlich nochmal ausgeschaltet werden!


    PS: Ich entwickle genau für solche Sachen ja kommerziell die Softwares. Ich schau mal, ob ich dazu was sinnvolles hinkriege, was dann jeder nutzen kann. Das wird allerdings bis Sonntag dauern/warten müssen, da ich noch andere Projekte derzeit in der Pipe habe.

  • Die Migration von SQLite auf MySQL/MariaDB ist beim TeamSpeak 3 Server absolut unproblematisch... allerdings geht das Ganze andersrum nicht ohne weiteres. Ich würde daher empfehlen gründlich über einen solchen Schritt nachzudenken. Gibt es denn zu den Abstürzen Fehlermeldungen?


    Für mich persönlich gibt es selbst bei großen Serverinstanzen keinen besonderen Grund um SQLite den Rücken zu kehren. Ich versuche mal ein paar Pros/Cons für einen Wechsel aufzuzählen:


    + Hosting der Datenbank auf dedizierten Servern
    + Vereinfachter gleichzeitiger Zugriff mehrerer Serverinstanzen auf die gleiche Datenbank (Stichwort machine_id)
    - Keine spürbare Performancesteigerung
    - Zusätzliche Abhängigkeiten (Neustart des MySQL/MariaDB Servers verursacht ggf. einen Absturz des TS3 Servers)

    Es gäbe noch andere Punkte, wie z.B. den einfacheren Zugriff auf die DB durch andere Anwendungen... allerdings würde ich in keinem Fall empfehlen von "außen" an der TS3 Datenbank rumzuwürgen... und schon garnicht während der Server läuft.


    Sicherlich kann mit einem MySQL/MariaDB Backend die tollsten Sachen bauen und eine wirklich gut funktionierende redundante Serverstruktur aufbauen... die Frage ist nur, ob sich der Aufwand für einen TeamSpeak 3 Server wirklich lohnt. Sicherungen lassen sich in jedem Fall sehr einfach erstellen und wenn so eine SQLite Datenbank mal kaputt geht, dann schiebt man eben die gesicherte Datei zurück und das Thema ist erledigt. Was die Performance der Sache angeht kann man sich natürlich streiten... ich habe allerdings in meiner Laufbahn noch keinen TS3 Server gesehen, der ohne SQLite höher, weiter und schneller gerannt ist. Bei einer Datenbank mit vielen INSERT und UPDATE Abfragen werden MySQL und MariaDB dem kleinen SQLite sicherlich davonrennen... bei vielen SELECTs sieht das Ganze aber wieder anders aus.


    MySQL bzw. MariaDB geben sich in Sachen Performance absolut nichts. MariaDB ist zwar aktueller und wird MySQL langfristig sicher ablösen, verleiht dem Admin momentan aber lediglich ein paar Karmapunkte und kann in bestimmten Konstellationen sogar Kompatibilitätsprobleme mit bestimmter Software verursachen, wenn man wirklich alle Features nutzen möchte. Wenn also schon ein MySQL Server irgendwo "rumliegt", spricht nichts dagegen ihn auch zu benutzen (wenn es denn unbedingt sein muss).


    ;)

  • Ob das wirklich so einfach ist, Das ganze als SQLite Dump in MySQL importieren zu können?


    Denn im SQLite Dump wird stehen:
    AUTOINCREMENT
    Und in einem MySQL Dump sollte stehen:
    AUTO_INCREMENT


    In einem SQLite Dump gibt es in einem
    INSERT INTO
    Statemant eine andere Art des Escapen.


    Habe das ganze auch mal getestet, geht leider nicht ohne Probleme:


    SQLite nutzt anscheinend " und MySQL nutzt '


    Geht also ohne nachbearbeitung nicht. Und bei 500 Servern dauert das glaube ich etwas länger



    //EDIT
    Noch zu dem Thema Performance:


    Dazu hatten wir bereits eine ausführliche Diskusion im Forum
    SQLite oder MySQL Datenbank?


    Aus diesem geht hervor, dass MySQL schon schneller ist als SQLite.


    Vielleicht haben wir das damals auch falsch diskutiert und/oder etwas nicht miteinbezogen?


    Mich würde jedenfalls die Begründung interressieren, wieso MySQL nicht schneller sein sollte als SQLite.


    Gruß,
    RootsWin

    Gute vServer, Root Server oder Dedicated Server gesucht?


    Die findest du hier:
    (5% Rabatt mit dem Rabattcode "TSConnNewcomer" bei Erstbestellung)


    Noon-Server.de




    2 Mal editiert, zuletzt von RootsWin ()

  • Ob das wirklich so einfach ist, Das ganze als SQLite Dump in MySQL importieren zu können?


    Es ist wie mit allen Dingen im Leben... wenn du weißt was du tust, dann ist es einfach.


    ;)


    Mit "ohne Tabellenstruktur" in meinem letzten Posting meinte ich natürlich nur die INSERTs, da der Rest ja schon von der create_tables.sql erledigt wird... und mit "Standard SQL" wollte ich zum Ausdruck bringen, dass du den Import im ANSI-Modus (kann man glaube ich bei phpMyAdmin direkt auswählen) anstoßen musst. Dann sind auch die double-quoted Tabellennamen kein Problem.


    Mich würde jedenfalls die Begründung interressieren, wieso MySQL nicht schneller sein sollte als SQLite.


    Pauschal kann man das auch nicht sagen. Es kommt auf den jeweiligen Anwendungsfall an. Für TeamSpeak 3 Server lohnt sich das Ganze meiner Meinung nach einfach nicht und man holt sich ggf. mehr Probleme ins Haus. Der Server läuft im produktiven Einsatz weder schneller noch stabiler.


    Die einzigen Argumente für MySQL, die ich aus eurer vorherigen Diskussion ziehen kann sind "Kenne ich mich besser mit aus" und "Der Server startet schneller". Da man für SQLite aber nichts konfigurieren muss, gibt es da nicht viel zum "auskennen" und da man den Server im Normalfall nicht ständig neu startet, ist das in meinen Augen auch kein Thema. Wenn man möchte, kann man die SQLite Datenbank ja ab und an mal mit VACUUM bearbeiten um sie wieder schön geschmeidig zu machen (dabei darf der Server allerdings nicht laufen).


    :P


    Ich würde generell empfehlen die einzelnen TS3 Instanzen nicht zu groß werden zu lassen, d.h. bei rund 100 Voice Servern wird eben mal eine neue Instanz gestartet. Ansonsten bekommt man irgendwann sowieso Probleme mit Dateitransfers. Die sind nämlich fest limitiert (2048 pro Instanz, 768 pro Voice Server, 10 pro Client).

  • Denn im SQLite Dump wird stehen:AUTOINCREMENTUnd in einem MySQL Dump sollte stehen:AUTO_INCREMENTIn einem SQLite Dump gibt es in einemINSERT INTOStatemant eine andere Art des Escapen.

    Deswegen gibt es Hilfen, dies entsprechend zu konvertieren: sqlite - Quick easy way to migrate SQLite3 to MySQL? - Stack Overflow


    Weitere Infos findet man hierzu auch hier: Suchergebnisse


    SQLite nutzt anscheinend " und MySQL nutzt '


    Nein, die doppelten Anführungszeichen funktionieren in beiden Datenbanken, da das genormt ist - genauso auch die einfachen Anführungszeichen.

  • Auf einmal geht nicht, aber nacheinander. Per Skript geht das zum Beispiel relativ schnell. ;)


    Hab mal eben eins gebastelt - konnte es aber noch nicht testen, daher auf eigene Gefahr. Teste es vorher bitte selber oder warte, bis ich heute Abend daheim bin und dafür Zeit habe. Wird so gegen 20 Uhr sein.


    Sollte am prinzipiell - rein vom logischen - so einwandfrei funktionieren. :)


    Du musst folgende Code-Stellen anpassen:

    • 127.0.0.1 10011
      IP-Adresse und Port, worauf ServerQuery lauscht
    • sehrGeheimes$Passwd2014
      ServerQuery serveradmin Passwort
    • for snapshot in snapthots/*; do
      snapshots/* durch das Verzeichnis austauschen, wo du deine Snapshots gespeichert hast


  • Hi,


    MariaDB reagiert tatsächlich viel schneller als MySQL.


    An welchen Daten machst du das Fest bzw wie hast du das getestet?


    Es ist wie mit allen Dingen im Leben... wenn du weißt was du tust, dann ist es einfach.


    Das stimmt schon. Das Problem ist nur, sowas würde ich keinen Raten der gerade mit solchen Sachen anfängt. Deswegen rate ich von deiner Variante für einen Anfänger ab. Aber sonst guter Lösungsansatz :)

  • Von der Sache mit den Snapshots rate ich übrigens auch ab. Das Sichern des files Ordners ist zwar keine schlechte Sache, allerdings bekommen Server und Channels bei einem serversnapshotdeploy ggf. neue IDs... Damit ist also sämtliche Zuordnung zu den Ordnern für die Katz'...

  • Erstelle ich mit MySQL via PHP einen Server, dauert es ca 10-20 Sekunden.
    Mit MariaDB dauert es gerade mal 4 Sekunden.
    Mit SQLite 1 Sekunde.


    Sorry, aber da machst du etwas falsch. 10-20 Sekunden ist sehr enorm da muss irgendwo ein Wurm drinne sein. Mit welchem Code probierst du es denn?


    Von der Sache mit den Snapshots rate ich übrigens auch ab. Das Sichern des files Ordners ist zwar keine schlechte Sache, allerdings bekommen Server und Channels bei einem serversnapshotdeploy ggf. neue IDs... Damit ist also sämtliche Zuordnung zu den Ordnern für die Katz'...


    Da hast du natürlich auch Recht.
    Ein andere möglichkeit wäre natürlich dann ein Script welches wirklich jeden einzelnen Channel, Servergruppe, usw durchgeht und diese 1 zu 1 kopiert. Das setzt aber natürlich vorraus das man entweder 2 Server haben muss oder ein Zwischenspeicher braucht. Das ist aber irgendwie auch nicht so das wahre.