Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Importdatenbank, aber bestimmte Tabelle ignorieren

Die akzeptierte Antwort von RandomSeed kann lange dauern! Das Importieren der Tabelle (nur um sie später zu löschen) kann je nach Größe sehr verschwenderisch sein.

Für eine Datei, die mit

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

Ich erhalte derzeit eine Datei mit etwa 7 GB, von denen 6 GB Daten für eine Protokolltabelle sind, die ich nicht "brauchen" muss. Das erneute Laden dieser Datei dauert einige Stunden. Wenn ich neu laden muss (für Entwicklungszwecke oder falls jemals für eine Live-Wiederherstellung erforderlich), überfliege ich die Datei folgendermaßen:

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

Und neu laden mit:

mysql -u user -ppasswd DBname < reduced.sql

Dies gibt mir eine vollständige Datenbank, wobei die "unerwünschte" Tabelle erstellt, aber leer ist. Wenn Sie die Tabellen wirklich überhaupt nicht wollen, löschen Sie einfach die leeren Tabellen, nachdem der Ladevorgang abgeschlossen ist.

Für mehrere Tabellen könnten Sie etwa so vorgehen:

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 'Fallfang' - achten Sie auf Prozeduren in Ihrem Dump, die "INSERT INTO TABLE_TO_SKIP" enthalten könnten.