2012-01-18 26 views
5

Niedawno zdecydowałem się przejść do firmy, przez którą dostanę hostingu, tak aby przenieść swój stary db do mojego nowego db, i starali się uruchomić to:mysqldump częściowy bazie

mysqldump --host=ipaddress --user=username --password=password db_name table_name | mysql -u username -ppassword -h new_url new_db_name 

i to wydawało się działa dobrze ... ale ponieważ moja baza danych jest tak szalenie masywna, otrzymywałbym błędy czasu w środku moich tabel. Więc zastanawiałem się, czy był jakiś łatwy sposób, aby zrobić mysqldump tylko na części mojego stołu.

Przypuszczam przepływ pracy będzie wyglądać mniej więcej tak:

create temp_table 
move rows from old_table where id>2,500,000 into temp_table 
some how dump the temp table into the new db's table (which has the same name as old_table) 

ale nie jestem do końca pewien, jak zrobić te kroki.

+0

Nie jestem pewien, czy to rozwiąże Twój problem, ale sprawdź opcję '--quick' na stronie http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html. Mówi, że jest to przydatne w przypadku dużych tabel. –

Odpowiedz

5

Dodaj tę --where="id>2500000" na końcu polecenia mysqldump. MySQL 5.1 Reference Manual

W twoim przypadku komenda mysqldump wyglądałby

mysqldump --host=ipaddress \ 
    --user=username \ 
    --password=password \ 
    db_name table_name \ 
    --where="id>2500000 

Jeśli zrzucić dwa razy. Drugi zrzut będzie zawierał informacje o tworzeniu tabeli. Ale następnym razem, gdy chcesz dodać tylko nowe wiersze. Tak więc dla drugiego zrzutu dodaj opcję --no-create-info w wierszu poleceń mysqldump.

+0

jak się okazało, to polecenie faktycznie zastąpiło moją tabelę wierszami, w których "id> 2500000". więc skończyło się na przeniesieniu ich wszystkich do nowej tabeli i scaleniu dwóch tabel za pomocą [tego postu] (http://stackoverflow.com/questions/725556/how-can-i-merge-two-mysql- tabele) – BananaNeil

+0

@ BananaNeil Może się zdarzyć, gdy oba zrzuty zawierają się Aby zrzucić tylko dane po raz drugi, dodaj opcję '--no-create-info' w wierszu poleceń mysql. –

2

Opracowałem narzędzie do tej pracy. To się nazywa mysqlsuperdump i można znaleźć tutaj:

https://github.com/hgfischer/mysqlsuperdump

Dzięki niemu można speciffy pełnej klauzuli „gdzie” dla każdej tabeli, więc jest to możliwe, aby określić różne zasady dla każdej tabeli.

Można również zastąpić wartości każdej kolumny przez każdą tabelę w zrzucie. Jest to użyteczne, na przykład, gdy chcesz wyeksportować zrzut bazy danych do użycia w środowisku programistycznym.