Tabellen Kopie

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tabellen Kopie

    Hi zusammen.

    Ich möchte eine MySql "Chat-Nachrichten" Tabelle zu einer gegebenen Uhrzeit
    in eine andere Datenbank mit anderem namen kopieren und die alte dann leeren.

    Ich habe noch nie Tabellen mit php kopiert.
    Wie sieht denn das ganze dann aus?
    Da es sich um die Tabelle eines Chats handelt, könnte es sein das es dabei
    zu problemen kommt?
    Wie ist der Werdegang dabei? Muss ich vor dem kopieren mit LOOK TABLE
    die Tabelle sperren und den look nach dem Kopiervorgang wieder aufheben?

    Wenn ich alternativ zumindest mach ich das im Moment so mit phpmyadmin
    die Tabelle kopiere und danach die Tabelle leere, müssen sich die User neu in den Chat einloggen. Sprich er steht dann.
    Daher die Idee mit den look tables.

    Aber vielleicht gibts da bessere Varianten dies umzusetzen?
    Ich finde jedenfalls keinen Ansatz und hab auch die Suchfunktion schon durchgeschaut, die MySql Referenz gelesen und meinen Freund google gefragt.

    Aber was wirklich passendes ist leider nicht dabei oder ich versteh es nicht.

    Das nächste Problem stellt sich mir nach dem Kopiervorgang die Tabelle in die andere Datenbank zu schieben oder geht sowas auch direkt beim kopieren?

    Danke schonmal für die Antworten

  • #2
    Hallo,

    Zitat von Marcus-24-D Beitrag anzeigen
    Ich möchte eine MySql "Chat-Nachrichten" Tabelle zu einer gegebenen Uhrzeit
    in eine andere Datenbank mit anderem namen kopieren
    Warum möchtest du das tun? Welches Ziel verfolgst du damit?

    Was meinst du mit dem Begriff Datenbank? Gerade in der MySQL-Welt ist dieser Begriff mehrdeutig. Meinst du einen anderen Server, eine andere MySQL-Installation oder ein Schema innerhalb derselben MySQL-Installation?

    Zitat von Marcus-24-D Beitrag anzeigen
    Muss ich vor dem kopieren mit LOOK TABLE
    die Tabelle sperren und den look nach dem Kopiervorgang wieder aufheben?
    Du meinst sicher LOCK TABLE.

    Wenn es nur ein anderes Schema ist, aber dieselbe MySQL-Installation, kannst du z. B. so vorgehen (als ein Statement abschicken!):

    Code:
    CREATE TABLE `new_schema_name`.`new_table_name`
    SELECT *
    FROM `old_schema_name`.`old_table_name`;
    Trotzdem erscheint mir das Vorhaben nicht sonnvoll. Wenn es um Performance-Probleme geht, die du damit zu beheben glaubst, rate ich dir, das ERM zu überdenken und sinnvolle Indizes zu setzen.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hey, Danke für die Antwort.

      Ich will die Chatlog entsprechend sichern, damit sie im nachhinein noch nach dem leeren lesbar ist.
      Außerdem kann ich so die Tabellengrößen klein halten und sie mir dynamisch anzeigen lassen wenn ich Message Kopien alle 12 Stunden anlege.

      Ich habe keine eigen programmierte Chatsoftware und auch hab ich mich noch nicht umgehend mit dieser aus zeitlichen Gründen befasst
      um genau urteilen zu können. Nur ist mir aufgefallen, das wenn die Tabelle bei ca. 80000 Zeilen angekommen ist der lese und Schreibvorgang recht langsam ist.
      Es kann schon sein das hier die indizies nicht richtig gesetzt wurden.
      Das müsste ich mir nochmal genauer anschauen.

      Aber es ist für mich unabdingbar Kopien der jeweiligen Tabellen anzulegen.
      Und.. Ja, genau ich meinte Lock Table.

      Jetzt müsst ich genauer wissen was nun Schema bedeutet, ich werds mir gleich mal ergooglen.

      Anhand Deines Codes stell ich jedoch fest, das eine Kopie
      der Tabelle aus Datenbank A eine neue Tabelle erstellt wird in der selben Datenbank.

      Mein Aufbau ist z.B so: Bzw. siehts in PhpMyAdmin so aus:

      (Datenbanken)

      benutzername a
      _irgendwas
      _chatlogs

      benutzername b
      _chatsoftware
      -messages
      -users

      _anderes


      Ich möchte gerne die Tabelle messages in die chatlogs von Benutzername a kopieren.

      Ich hoff ich drück mich deutlich genug aus.
      Wenn nicht, nochmal bitte nachhaken ..Danke für die Hilfe

      Kommentar


      • #4
        Zitat von Marcus-24-D Beitrag anzeigen
        Anhand Deines Codes stell ich jedoch fest, das eine Kopie
        der Tabelle aus Datenbank A eine neue Tabelle erstellt wird in der selben Datenbank.
        Jein. Die neue Tabelle wird in derselben MySQL-Instanz angelegt, aber in einem anderen Schema. In der MySQL-Welt wird ein Schema gerne mal Datenbank genannt. Die neue Tabelle wird also zwar auf dem selben Server und derselben MySQL-Installation angelegt, aber dennoch in einer anderen „Datenbank“ (im Sinne von Schema).
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Zitat von Marcus-24-D Beitrag anzeigen
          Ich will die Chatlog entsprechend sichern, damit sie im nachhinein noch nach dem leeren lesbar ist.
          Dafür würde sich dann ggf. die Archive-Engine anbieten.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Zitat von AmicaNoctis Beitrag anzeigen
            Jein. Die neue Tabelle wird in derselben MySQL-Instanz angelegt, aber in einem anderen Schema.
            Okay, Danke. Und wie gebe ich dann das Ziel an?

            Ich meine ...... ahh, ich glaub ich habs geschnallt.

            Code:
            CREATE TABLE `new_schema_name`.`new_table_name`
            SELECT *
            FROM `old_schema_name`.`old_table_name`;
            in:

            Code:
            CREATE TABLE `benutzername_a`.`chatlog_#datum#`
            SELECT *
            FROM `benutzername_b`.`messages`;
            Wäre das so richtig? Ich werds heute Abend gleich mal ausprobieren.
            Hab wohl nicht richtig gelesen.

            Wie siehts denn mit den ID´s eigentlich aus. Ist es denn sinnvoll
            mit * alle Felder abzufragen? Oder ist es vielleicht interessanter
            wenn ich jedes Feld einzeln angebe. Weil die ID wird doch bestimmt
            erstellt oder? Nicht das es dabei zu Problemen kommt?

            Und mit der Archiv Engine, wie muss ich die Tabelle in diese Engine umwandeln?

            Vielen Dank
            Zuletzt geändert von Marcus-24-D; 26.04.2012, 16:52.

            Kommentar


            • #7
              Zitat von Marcus-24-D Beitrag anzeigen
              Ist es denn sinnvoll
              mit * alle Felder abzufragen? Oder ist es vielleicht interessanter
              wenn ich jedes Feld einzeln angebe. Weil die ID wird doch bestimmt
              erstellt oder? Nicht das es dabei zu Problemen kommt?
              Mit dem Statement wird die Tabelle 1:1 kopiert. Du brauchst dich nicht um die IDs zu sorgen. Auch sonst kann man in eine auto_increment-Spalte durchaus eigene Werte eingeben, auch der Zähler wird in diesem Fall trotzdem automatisch erhöht.

              Thema Archive Engine:
              Code:
              CREATE TABLE `new_schema_name`.`new_table_name`
              ENGINE=ARCHIVE
              SELECT *
              FROM `old_schema_name`.`old_table_name`
              WHERE ...;
              So langsam könntest du dir aber mal das MySQL-Handbuch vornehmen. Alles, was ich dir hier erzähle, steht dort auch drin.
              Zuletzt geändert von AmicaNoctis; 26.04.2012, 17:03.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                okay, alles klar. Ich werd mirs mal damit gemütlich machen. Vielen Dank für die Hilfe

                Kommentar

                Lädt...
                X