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
Jeśli możesz, oszczędzaj sobie wiele kłopotów i używaj mysqldump -T
.
--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.
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
Maatkit wydaje się całkiem stosowne do tego z mk-parallel-dump i mk-parallel-restore.
Narzędzia te mają zarówno przestarzała i nie są uważane za odpowiednie do użycia w kopiach zapasowych. –
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.
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ś
Wyjście głowy może być po prostu rurami do ogona - to nie jest zły pomysł – deadprogrammer
Całkiem ciekawe rozwiązanie ale maatkit może zrobić to samo, a nawet więcej: D –