2013-05-24 16 views
20

Mam duży plik SQL z jedną bazą danych i około 150 tabel. Chciałbym użyć mysqlimport do zaimportowania tej bazy danych, jednak chciałbym, aby proces importowania zignorował lub pominął kilka tabel. Jaka jest prawidłowa składnia, aby zaimportować wszystkie tabele, ale zignorować niektóre z nich? Dziękuję Ci.Baza danych importu MySQL, ale zignoruj ​​konkretną tabelę

+0

Nie wiem, czy to możliwe. możesz utworzyć kopię zapasową pliku .sql, wyszukać je w tekście i odciąć od niego lub czy jest to coś, co będziesz robił wielokrotnie. możesz CTRL-H znaleźć i zastąpić REM stmt, lub na końcu uruchomić trochę "usuń z table1;" "usuń z tabeli2" skrypt sorta – Drew

+0

Czy jest wiele rzeczy, które należy pominąć? I w jaki sposób są identyfikowane? Może spróbuj zaimportować całość, a następnie uruchom tabelę usuwania na tych, których nie chcesz zachować. – lurker

+0

Myślę, że może występować problem z jedną z tabel w pliku SQL, więc mój proces importowania nie został zakończony. Czy wiesz, czy używanie procesu importowania z wiersza poleceń różni się od używania narzędzia importu z MySQL Workbench? – DanielAttard

Odpowiedz

5

mysqlimport nie jest odpowiednim narzędziem do importowania instrukcji SQL. To narzędzie służy do importowania sformatowanych plików tekstowych, takich jak CSV. Co chcesz zrobić, to karmić sql zrzut bezpośrednio do klienta mysql z poleceniem jak ten:

bash > mysql -D your_database < your_sql_dump.sql 

Ani mysql ani mysqlimport dostarczają funkcji, czego potrzebujesz. Twoja najlepsza szansa to zaimportowanie całego zrzutu, a następnie upuszczenie stołów, których nie chcesz.

Jeśli masz dostęp do serwera, z którego pochodzi zrzut, możesz utworzyć nowy zrzut z numerem mysqldump --ignore-table=database.table_you_dont_want1 --ignore-table=database.table_you_dont_want2 ....

+0

Dzięki za komentarz. Mój problem wydaje się, że kiedy używam polecenia import z MySQL Workbench, ten proces działa, ale tylko importuje około jednej trzeciej moich tabel, a następnie zawiesza się na konkretnej tabeli. Nie mogę pobrać wszystkich tabel zaimportowanych z powodu tabeli problemów. – DanielAttard

+1

Spróbuj zaimportować zrzut bezpośrednio z wiersza poleceń. Czy masz ten sam problem? Przynajmniej możesz zobaczyć komunikat o błędzie. – RandomSeed

1

W razie potrzeby, można to zrobić jedną tabelę naraz:

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

Przyjęty przez randomSeed odpowiedź mogła trwać długo! Importowanie tabeli (aby później ją upuścić) może być bardzo nieekonomiczne w zależności od rozmiaru.

przypadku plików utworzonych za pomocą

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

I obecnie uzyskać plik o 7 GB, z czego 6GB jest dane na stole dziennika, że ​​ja nie „konieczność”, aby tam być; ponowne załadowanie tego pliku zajmuje kilka godzin. Jeśli trzeba przeładować (dla celów rozwoju, lub jeśli kiedykolwiek potrzebne do żywego odzysku) I przejrzeć plik tak:

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

i załaduj z:

mysql -u user -ppasswd DBname < reduced.sql 

To daje mi pełną bazę danych, z "niechcianą" tabelą utworzoną, ale pustą. Jeśli naprawdę nie chcesz tabel, po prostu upuść puste stoły po zakończeniu ładowania.

Dla wielu tabel można zrobić coś takiego:

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 

istnieje „haczyka” - uważaj na procedury w swojej wysypisko, które mogą zawierać „INSERT INTO TABLE_TO_SKIP”.

+4

To jest geniusz, 1 godzina do 30 sekund. –

+3

wow !!! Niesamowite, właśnie zmniejszyłem kopię zapasową z 1 GB do 72 MB, oszczędzaj mi dużo czasu, dzięki –

+1

lepiej niż zaakceptowana odpowiedź, dzięki – Edgar

Powiązane problemy