Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler bei MySQL Import?!

Einklappen

Neue Werbung 2019

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

  • Fehler bei MySQL Import?!

    Liebes Forum,

    nun bin ich 29, damals mit 14 und 15 war ich in PHP doch noch recht gut drin. Heutzutage ist einiges noch in Erinnerung, doch ich muss vieles von Neuem lernen. Ich führe seit einem Jahr ein neues Projekt, habe es übernommen. Die Webseite muss moderniisiert werden, und dazu habe ich einen vServer bestellt und eingerichtet, um dann die Webseite dort hochzuladen und die DB zu importieren (sichere Testumgebung).

    Ich habe die Datenbank (169 Tabellen) mit MySQLDumper exportiert. Die SQL Datei hochgeladen auf den vServer und versucht mit BigDump zu importieren. Allerdings folgt folgende Fehlermeldung:

    Code:
    Error at the line 9402738: INSERT INTO flexible_session (session_id,session_user_id,session_host,session_lastaction,session_location,session_language,session_cookie,session_cookievalue,session_stream_id) VALUES ('7dgmup09d78c4p1qrek4a0ipp7','3152','hier-steht-eine-ip','1575182046','playlist/create','deutsch','1','7dgmup09d78c4p1qrek4a0i:3152','2');
    
    Query: INSERT INTO flexible_session (session_id,session_user_id,session_host,session_lastaction,session_location,session_language,session_cookie,session_cookievalue,session_stream_id) VALUES ('7dgmup09d78c4p1qrek4a0ipp7','3152','wieder-die-ip','1575182046','playlist/create','deutsch','1','7dgmup09d78c4p1qrek4a0i:3152','2')
    
    MySQL: Duplicate entry '7dgmup09d78c4p1qrek4a0ipp7' for key 'session_id'


    1) Geht es hier nur darum, dass dieser Eintrag scheinbar zweimal vorhanden ist?
    2) Er hatte vorher schonmal eine Fehlermeldung gezeigt. Habe entsprechenden Eintrag raus gelöscht, aber jetzt macht er beim nächsten wieder ein Problem. In der DB sind über 30 000 Seiten an Einträge:
    3) Wie kann ich dieses Problem beheben, sodass ich alle Tabellen vernünftig importieren kann?

    Vielen lieben Dank


  • #2
    die Fehlermeldung ist doch eindeutig, oder? Und damit auch, was zu tun ist.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Ja, den Entry löschen. Aber kann ich irgendwie herausfinden, welche Entries noch alles doppelt sind? Wenn ich das jetzt immer herausfinde, bei dem Import, dann wird das alles Jahre dauern. Es sind über zehntausend Einträge...

      Kommentar


      • #4
        Warum ist es denn doppelt? Das wäre eine recht interessante Frage, oder?
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Bigdump
          Ist das das hier:
          Code:
          <?php
          
          error_reporting(E_ALL);
          
          // BigDump ver. 0.36b from 2015-04-30
          // Staggered import of an large MySQL Dump (like phpMyAdmin 2.x Dump)
          // Even through the webservers with hard runtime limit and those in safe mode
          // Works fine with latest Chrome, Internet Explorer and Firefox
          
          // Author:       Alexey Ozerov (alexey at ozerov dot de)
          //               AJAX & CSV functionalities: Krzysiek Herod (kr81uni at wp dot pl)
          // Copyright:    GPL (C) 2003-2015
          // More Infos:   http://www.ozerov.de/bigdump
          
          // This program is free software; you can redistribute it and/or modify it under the
          // terms of the GNU General Public License as published by the Free Software Foundation;
          // either version 2 of the License, or (at your option) any later version.
          
          // THIS SCRIPT IS PROVIDED AS IS, WITHOUT ANY WARRANTY OR GUARANTEE OF ANY KIND
          
          // USAGE
          
          // 1. Adjust the database configuration and charset in this file
          // 2. Remove the old tables on the target database if your dump doesn't contain "DROP TABLE"
          // 3. Create the working directory (e.g. dump) on your web server
          // 4. Upload bigdump.php and your dump files (.sql, .gz) via FTP to the working directory
          // 5. Run the bigdump.php from your browser via URL like http://www.yourdomain.com/dump/bigdump.php
          // 6. BigDump can start the next import session automatically if you enable the JavaScript
          // 7. Wait for the script to finish, do not close the browser window
          // 8. IMPORTANT: Remove bigdump.php and your dump files from the web server
          
          ....................snip
          Schau Dir mal die Schritte unter USAGE an, besonders Punkt 2.
          Vielleicht hast Du bereits einen erfolglosen Import-Lauf hinter Dir oder hast die Zieldb nicht richtig vorbereitet oder etwas ähnliches unaufgeräumtes hinterlassen ..
          Im Zweifel DB löschen, alles neu.

          Falls auf einer leeren DB tatsächlich diese Fehler hochkommen, wenn der Dump reingeschoben wird, hast Du auf dem Quellsystem ein Problem. Dort kannst Du es wahrscheinlich auch am besten analysieren, in dem Du Mehrfachvorkommen von Schlüsselwerten zählst. Bekommst Du Treffer, würde das allerdings bedeuten, das Quellsystem hatte (stellenweise) keine Primärschlüssel Constraints aktiviert. Oder diese vielleicht mal "ausgesetzt" (Ich weiß nicht, ob mySQL das überhaupt kann).

          Kommentar


          • #6
            Danke für den Beitrag.

            Also ich habe das Projekt ja übernommen und schon länger nicht mehr intensiv mit PHP und MySQL gearbeitet. Deshalb kann ich die Frage nicht klären, weshalb dort identische Einträge sind.

            @Perry Static

            Lieben Dank. Der Fehler trat schon auf , als die DB komplett neu aufgesetzt wurde. Gäbe es dann auch die Möglichkeit, dass ich identische Einträge iwie herausfiltern und dann dadurch löschen kann?

            Viele Grüße

            Kommentar


            • #7
              Code:
              test=*# create table brian_work(i int);
              CREATE TABLE
              test=*# copy brian_work from stdin;
              Enter data to be copied followed by a newline.
              End with a backslash and a period on a line by itself, or an EOF signal.
              >> 1
              >> 1
              >> 2
              >> 3
              >> 4
              >> 4
              >> 5
              >> \.
              COPY 7
              test=*# select * from brian_work ;
               i
              ---
               1
               1
               2
               3
               4
               4
               5
              (7 rows)
              
              test=*# select i, count(i) from brian_work group by i;
               i | count
              ---+-------
               4 |     2
               1 |     2
               5 |     1
               3 |     1
               2 |     1
              (5 rows)
              
              test=*# select i, count(i) from brian_work group by i having count(i) > 1;
               i | count
              ---+-------
               4 |     2
               1 |     2
              (2 rows)
              
              test=*#
              Das prüftst Du erst einmal in der Ursprungs-DB. Wenn da Datensätze sind, die TROTZ PK/UNIQUE-Constraint doppelt sind, dann sind die Daten korrupt. MySQL macht's möglich.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Da erhalte ich folgende Ausgabe in rot:


                Code:
                Es scheint einen Fehler in Ihrer MySQL-Abfrage zu geben. Die MySQL-Fehlerausgabe, falls vorhanden, kann Ihnen auch bei der Fehleranalyse helfen. 
                 ERROR: Unbekannte Interpunktion @ 5 STR: =* SQL: test=*# create table brian_work(i int); CREATE TABLE test=*# copy brian_work from stdin; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself, or an EOF signal. >> 1 >> 1 >> 2 >> 3 >> 4 >> 4 >> 5 >> \. COPY 7 test=*# select * from brian_work ;  i ---  1  1  2  3  4  4  5 (7 rows)  test=*# select i, count(i) from brian_work group by i;  i | count ---+-------  4 |     2  1 |     2  5 |     1  3 |     1  2 |     1 (5 rows)  test=*# select i, count(i) from brian_work group by i having count(i) > 1;  i | count ---+-------  4 |     2  1 |     2 (2 rows)  test=*#  
                
                SQL-Befehl: Dokumentation
                
                test=*# create table brian_work(i int); CREATE TABLE test=*# copy brian_work from stdin; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself, or an EOF signal. >> 1 >> 1 >> 2 >> 3 >> 4 >> 4 >> 5 >> \. COPY 7 test=*# select * from brian_work ; i --- 1 1 2 3 4 4 5 (7 rows) test=*# select i, count(i) from brian_work group by i; i | count ---+------- 4 | 2 1 | 2 5 | 1 3 | 1 2 | 1 (5 rows) test=*# select i, count(i) from brian_work group by i having count(i) > 1; i | count ---+------- 4 | 2 1 | 2 (2 rows) test=*#
                
                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 'test=*# create table brian_work(i int);
                CREATE TABLE
                test=*# copy brian_work f' at line 1
                Ich hoffe es war korrekt, dass ich das einfach so direkt copy and paste.

                Was sagt uns der Fehler?

                Kommentar


                • #9
                  Zitat von BrianWork Beitrag anzeigen

                  Ich hoffe es war korrekt, dass ich das einfach so direkt copy and paste.
                  Nein.

                  Was sagt uns der Fehler?
                  Daß Du nicht zwischen Datenbank-Prompt und Ausgaben der Datenbank und SQL-Befehl unterscheiden kannst.
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    Könntest du mir denn helfen? Wie gesagt, ich schrieb ja, ich hab das seit Jahren nicht gemacht. Wirklich hilfreich einfach nur "Nein" zu hören oder "Das heißt, dass du nicht unterscheiden kannst" etc. ist da irgendwie eher semi-aggressiv und nicht besonders hilfreich für mich...

                    EDIT: Was muss ich denn in der SQL eingeben?

                    Kommentar


                    • #11
                      Wie soll man dir aus der Ferne helfen, wenn du selber nicht weisst was du tust.
                      Du kannst ja in dem Subforum Projekthilfe mal nachfragen ob dir jemand hilft, denn so wie es ausschaut wirst du das selbst wohl nicht bewerkstelligen können.

                      Kommentar


                      • #12
                        Hatte gedacht, möglicherweise gibt es einen Code, der dann die identischen Einträge anzeigt, sodass man jeweils den doppelten löscht

                        Kommentar


                        • #13
                          Klar, gibt es. Folgendes aber nicht wieder via Copy&Paste vergewaltigen, geht bei Dir nicht...

                          Code:
                          test=*# select i, count(i), max(ctid) from brian_work group by i having count(i) > 1;
                           i | count |  max  
                          ---+-------+-------
                           4 |     2 | (0,6)
                           1 |     2 | (0,2)
                          (2 rows)
                          
                          test=*# with to_delete as (select max(ctid) from brian_work group by i having count(i) > 1) delete from brian_work where ctid in (select * from to_delete);
                          DELETE 2
                          test=*# select * from brian_work ;
                           i
                          ---
                           1
                           2
                           3
                           4
                           5
                          (5 rows)
                          
                          test=*#
                          (mit den Daten wie gestern)


                          Andreas
                          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                          Kommentar


                          • #14
                            Aber wie füge ich es denn dann ein ? Nicht bös' nehmen, nur das habe ich so nie verwendet. Ich erlerne es also neu.

                            Kommentar


                            • #15
                              Du musst da erstmal Hausaufgaben machen, nicht um das Einfügen sorgen:
                              Zitat von akretschmer Beitrag anzeigen

                              Das prüftst Du erst einmal in der Ursprungs-DB. Wenn da Datensätze sind, die TROTZ PK/UNIQUE-Constraint doppelt sind, dann sind die Daten korrupt. MySQL macht's möglich.
                              Also Count Statement für alle Tabellen auf den Primärschlüsseln durchlaufen lassen und auf weiteren Spalten, die Unique definiert sind.

                              Kommentar

                              Lädt...
                              X