2008-11-12 13 views
5

Jaki jest najprostszy sposób na uzyskanie danych dla pojedynczej tabeli, usunięcie pojedynczej tabeli lub podzielenie całego pliku zrzutu na pliki, z których każdy zawiera pojedyncze tabele? Zwykle robię dużo męczących wyrażeń regularnych, ale założę się, że są prostsze sposoby na robienie tych rzeczy za pomocą awk/perl itd. Pierwsza strona wyników Google przywraca masę niedziałających skryptów perl.Manipulowanie gigantycznymi plikami zrzutu MySQL

Odpowiedz

9

Jeśli możesz, oszczędzaj sobie wiele kłopotów i używaj mysqldump -T.

Z documentation:

--tab = droga, -T ścieżka

Produce rozdzielone tabulatorami plików danych. Dla każdej zrzuconych tabel mysqldump tworzy plik tbl_name.sql, który zawiera instrukcję CREATE TABLE , która tworzy tabelę i plik tbl_name.txt, który zawiera dane . Wartość opcji to katalog, w którym należy zapisać pliki.

Domyślnie pliki danych .txt są formatowane za pomocą znaków tabulacji między wartościami kolumn i znakiem nowej linii na końcu każdej linii. Format można określić jawnie, korzystając z opcji --fields-xxx i - lines-ended-by.

Uwaga Ta opcja powinna być używana tylko wtedy, gdy mysqldump jest uruchomiony na tym samym komputerze co serwer mysqld. Musisz mieć uprawnienie FILE, , a serwer musi mieć uprawnienia do zapisu plików w podanym katalogu.

11

Kiedy trzeba wyciągnąć pojedynczy stół ze zrzutu sql, używam kombinacji grep, head and tail.

Np

grep -n "CREATE TABLE" dump.sql 

To wtedy daje numery linii dla każdego z nich, więc jeśli stół jest na linii 200, a jeden po jest na linii 269, robię:

head -n 268 dump.sql > tophalf.sql 
tail -n 69 tophalf.sql > yourtable.sql 

Wyobrażam sobie, że mógłbyś rozszerzyć te zasady, aby stworzyć scenariusz, który podzieliłby całą sprawę na jeden plik na stół.

Ktoś chce iść, robiąc to tutaj?

Kolejny bit, które mogą pomóc rozpocząć pętlę bash dzieje:

grep -n "CREATE TABLE " dump.sql | tr ':`(' ' ' | awk '{print $1, $4}' 

To daje piękny listę numerów linii i nazwy tabel, takich jak:

200 FooTable 
269 BarTable 
+0

Wyjście głowy może być po prostu rurami do ogona - to nie jest zły pomysł – deadprogrammer

+0

Całkiem ciekawe rozwiązanie ale maatkit może zrobić to samo, a nawet więcej: D –

4

This shell script będzie pobrać tabele, które chcesz i przekazać je do splitted.sql.

Jest w stanie zrozumieć wyrażeń regularnych, ponieważ dodałem opcję sed -r.

Również MyDumpSplitter może podzielić zrzut na poszczególne zrzuty tabeli.

0

Trochę się spóźniam na tę, ale jeśli to może pomóc każdemu, musiałem podzielić ogromny plik zrzutu SQL w celu zaimportowania danych do innego serwera Mysql. do czego doszedłem, dzielenie pliku zrzutu przy użyciu polecenia systemowego.

Podział -l 1000 import.sql splited_file

Powyższy podzieli pliku SQL co 1000 wierszy.

Nadzieja to pomaga ktoś