Ausgabe debuggen

375
Justin

Ich habe versucht, den Import eines großen Datensatzes mit einem Ordner mit .sql-Dateien zu beschleunigen

ls -rS *.sql | parallel -j16 mysql -uusername -ppassword dbname "<" 

Kurz nachdem ich das ausgeführt habe, bekomme ich eine Fehlermeldung:

ERROR 1146 (42S02) at line 65: Table 'dbname.some_table' doesn't exist ERROR 1146 (42S02) at line 69: Table 'dbname.some_table_other' doesn't exist 

Gibt es eine einfache Möglichkeit, dieses Befehlszeilenargument zu ändern, um herauszufinden, welche Datei diesen Fehler generiert?

Ich habe versucht, ein Skript auszuführen, das in Zeile 65-69 aller Dateien einen sed ausführt, aber es gibt zu viele Ergebnisse, um es zu wissen. Sobald ich festgestellt habe, welche SQL-Datei den Fehler generiert hat, kann ich ihn löschen und erneut importieren.

Gelöst: verwendet

ls -rS *.sql | xargs grep -i "dbname.some_table" | less 

zurückverfolgen, wo es zu früh aufgerufen wurde

0
Führen Sie ein einfaches "grep" in Ihrem Web-Verzeichnis aus und suchen Sie nach "dbname.some_table". Matt Clark vor 10 Jahren 0
Leider gibt es eine Menge Dateien ... und die Dateien haben viele Gigs. (Deshalb habe ich versucht, ein sed-Skript nur für die spezifischen Zeilen der Dateien zu verwenden.) Justin vor 10 Jahren 0

2 Antworten auf die Frage

1
Matt Clark

Führen Sie diesen Befehl in Ihrem Webdatenverzeichnis aus:

find . -name "*.php" -print | xargs grep -i "dbname.some_table" 

Dadurch werden alle Unterverzeichnisse und Dateien nach der Dateierweiterung rekursiv durchsucht. .phpAnschließend werden alle Zeilen ausgedruckt, die den in angegebenen Text enthalten grep.

Es zeigt zwar die Dateien an, aber das erste Ergebnis ist das Ergebnis, das die Tabelle selbst erstellt - nicht die Datei, auf die sich die Datei bezieht, die den Fehler generiert. (Ich habe das "* .php" durch "* .sql" ersetzt) Justin vor 10 Jahren 0
Meine Antwort bearbeitet Fügen Sie den Schalter "-i" hinzu und suchen Sie nach einer Datei, in der dies in Zeile "65" oder "69" vorkommt. Stellen Sie außerdem sicher, dass Sie Ihre Rechtschreibung prüfen. Bei kleinen Fehlern handelt es sich um große Fehler. Wenn dies für Sie nicht funktioniert, entschuldige ich mich, dies ist alles, was ich für Vorschläge habe: [ Matt Clark vor 10 Jahren 0
Würdest du zufällig wissen, ob es anstelle von 'find' eine Möglichkeit gibt, es in der gleichen Reihenfolge wie 'ls -rS * .sql' zu verarbeiten? Ich denke, wenn ich das tun könnte, könnte ich herausfinden, wo darauf Bezug genommen wird. Justin vor 10 Jahren 0
ah Ich habe es einfach ersetzt .. und denke, ich fand es verwendet: ls -rS * .sql | xargs grep -i "dbname.some_table" | Weniger Justin vor 10 Jahren 0
0
Ole Tange

Verwenden Sie --tag:

ls -rS *.sql | parallel --tag -j16 sql mysql://username:password@/dbname "<"