2012-01-18 19 views
5

Recentemente ho deciso di cambiare la società attraverso la quale ho il mio hosting, in modo da spostare il mio vecchio db nel mio nuovo db, ho cercato di eseguire questo:mysqldump parziale del database

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

e questo sembrava funziona bene ... ma dato che il mio database è così terribilmente massivo, vorrei ottenere degli errori di time-out nel mezzo dei miei tavoli. Quindi mi chiedevo se esistesse un modo semplice per fare uno mysqldump su una parte del mio tavolo.

Vorrei assumere il flusso di lavoro sarà simile a questa:

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) 

ma non sono esattamente sicuro di come fare quei passi.

+0

Non sono sicuro se risolverà il problema, ma controlla l'opzione '--quick' su http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html. Dice che è utile per tavoli di grandi dimensioni. –

risposta

5

Aggiungere questo --where="id>2500000" alla fine del comando mysqldump. MySQL 5.1 Reference Manual

Nel tuo caso il comando mysqldump sarà simile

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

Se si dump due volte. Il secondo dump conterrà informazioni sulla creazione della tabella. Ma la prossima volta vuoi aggiungere solo le nuove righe. Quindi per il secondo dump aggiungere l'opzione --no-create-info nella riga di comando mysqldump.

+0

come risulta, questo comando in realtà ha sostituito la mia tabella con le righe dove "id> 2500000". quindi quello che ho finito è stato spostarli tutti su un nuovo tavolo e unire i due tavoli con [questo post] (http://stackoverflow.com/questions/725556/how-can-i-merge-two-mysql- tabelle) – BananaNeil

+0

@BananaNeil Può accadere se entrambi i dump contengono contenere Per scaricare solo i dati una seconda volta aggiungere l'opzione '--no-create-info' sulla riga di comando mysql. –

2

Ho sviluppato uno strumento per questo lavoro. Si chiama mysqlsuperdump e può essere trovato qui:

https://github.com/hgfischer/mysqlsuperdump

Con esso è possibile speciffy il pieno "WHERE" clausola per ogni tabella, quindi è possibile specificare regole diverse per ogni tabella.

È inoltre possibile sostituire i valori di ogni colonna per ogni tabella nel dump. Ciò è utile, ad esempio, quando si desidera esportare un dump del database da utilizzare nell'ambiente di sviluppo.

Problemi correlati