2013-05-24 11 views
20

Ich habe eine große SQL-Datei mit einer Datenbank und etwa 150 Tabellen. Ich möchte mysqlimport verwenden, um diese Datenbank zu importieren, jedoch möchte ich, dass der Importvorgang einige Tabellen ignoriert oder überspringt. Was ist die richtige Syntax, um alle Tabellen zu importieren, aber einige davon zu ignorieren? Vielen Dank.MySQL importieren Datenbank aber spezifische Tabelle ignorieren

+0

Ich weiß nicht, ob das möglich ist. Kannst du eine Sicherungskopie der .sql erstellen, sie im Text suchen und sie überlisten oder wirst du das wieder und wieder und wieder machen? Du könntest ein CTRL-H zum Suchen und Ersetzen mit einem REM-Befehl oder am Ende ein kleines "delete from table1;" "delete from table2" sorta script – Drew

+0

Gibt es eine Menge, die weggelassen werden muss? Und wie werden sie identifiziert? Vielleicht erwägen Sie, das Ganze zu importieren, und führen Sie dann eine Lösch-Tabelle für diejenigen aus, die Sie nicht behalten möchten. – lurker

+0

Ich denke, dass ein Problem mit einer der Tabellen in der SQL-Datei auftreten kann, so dass mein Importvorgang nicht abgeschlossen wird. Wissen Sie, ob die Verwendung des Importvorgangs von der Befehlszeile sich von der Verwendung des Importdienstprogramms von MySQL Workbench unterscheidet? – DanielAttard

Antwort

5

mysqlimport ist nicht das richtige Werkzeug zum Importieren von SQL-Anweisungen. Dieses Tool soll formatierte Textdateien wie CSV importieren. Was Sie tun möchten, ist füttern Ihre SQL-Dump direkt an den mysql Client mit einem Befehl wie diese:

bash > mysql -D your_database < your_sql_dump.sql 

Weder mysql noch mysqlimport bieten die Funktion, die Sie benötigen. Ihre beste Chance wäre das Importieren des gesamten Speicherbereichs und das Löschen der Tabellen, die Sie nicht benötigen.

Wenn Sie Zugriff auf den Server haben, von dem der Dump stammt, können Sie einen neuen Dump mit mysqldump --ignore-table=database.table_you_dont_want1 --ignore-table=database.table_you_dont_want2 ... erstellen.

+0

Danke für den Kommentar. Mein Problem scheint zu sein, dass dieser Prozess funktioniert, wenn ich den Importbefehl aus MySQL Workbench verwende, aber nur ungefähr ein Drittel meiner Tabellen importiert und dann an einer bestimmten Tabelle hängt. Ich kann nicht alle Tische wegen der Problemtabelle importieren. – DanielAttard

+1

Versuchen Sie, Ihr Abbild direkt von der Befehlszeile zu importieren. Erhalten Sie das gleiche Problem? Zumindest können Sie möglicherweise eine Fehlermeldung sehen. – RandomSeed

1

Falls gewünscht, können Sie diese eine Tabelle zu einem Zeitpunkt tun:

mysqldump -p sourceDatabase tableName > tableName.sql 
mysql -p -D targetDatabase < tableName.sql 
85

Die akzeptierte Antwort von RandomSeed eine lange Zeit in Anspruch nehmen könnte! Das Importieren der Tabelle (um sie später wieder zu löschen) könnte je nach Größe sehr verschwenderisch sein.

Für eine Datei erstellt mit

mysqldump -u user -ppasswd --opt --routines DBname > DBdump.sql 

ich zur Zeit eine Datei über 7 GB, 6 GB, von denen Daten für eine Log-Tabelle ist, dass ich nicht ‚Notwendigkeit‘ zu tun, dort zu sein; Das erneute Laden dieser Datei dauert einige Stunden. Wenn ich neu geladen werden müssen (für Entwicklungszwecke, oder wenn überhaupt für eine Live-Wiederherstellung erforderlich) ich die Datei abschöpfen so:

sed '/INSERT INTO `TABLE_TO_SKIP`/d' DBdump.sql > reduced.sql 

und laden mit:

mysql -u user -ppasswd DBname < reduced.sql 

Das gibt mir eine komplette Datenbank, mit der "unerwünschten" Tabelle erstellt, aber leer. Wenn Sie die Tabellen wirklich nicht möchten, lassen Sie einfach die leeren Tabellen nach dem Ladevorgang fallen.

Für mehrere Tabellen können Sie etwas tun:

sed '/INSERT INTO `TABLE1_TO_SKIP`/d' DBdump.sql | \ 
sed '/INSERT INTO `TABLE2_TO_SKIP`/d' | \ 
sed '/INSERT INTO `TABLE3_TO_SKIP`/d' > reduced.sql 

Es gibt einen ‚Gotcha‘ - achten Sie auf Prozeduren in Ihrer Dump, die „INSERT INTO TABLE_TO_SKIP“ enthalten könnte.

+4

Das ist genial, 1 Stunde bis 30 Sekunden. –

+3

wow !!! genial, ich habe gerade ein Backup von 1GB auf 72MB reduziert, rette mich eine Menge Zeit, danke –

+1

besser als die angenommene Antwort, danke – Edgar