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ę
Odpowiedz
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 ...
.
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
Spróbuj zaimportować zrzut bezpośrednio z wiersza poleceń. Czy masz ten sam problem? Przynajmniej możesz zobaczyć komunikat o błędzie. – RandomSeed
W razie potrzeby, można to zrobić jedną tabelę naraz:
mysqldump -p sourceDatabase tableName > tableName.sql
mysql -p -D targetDatabase < tableName.sql
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”.
To jest geniusz, 1 godzina do 30 sekund. –
wow !!! Niesamowite, właśnie zmniejszyłem kopię zapasową z 1 GB do 72 MB, oszczędzaj mi dużo czasu, dzięki –
lepiej niż zaakceptowana odpowiedź, dzięki – Edgar
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
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
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