2013-05-24 3 views
20

Ho un grande file SQL con un database e circa 150 tabelle. Vorrei usare mysqlimport per importare quel database, tuttavia, vorrei che il processo di importazione ignorasse o saltasse su un paio di tabelle. Qual è la sintassi corretta per importare tutte le tabelle, ma ignorarne alcune? Grazie.Database di importazione MySQL ma ignora tabella specifica

+0

non so se è possibile. puoi creare un backup di .sql, cercarli nel testo e aggirarli o è qualcosa che stai per fare ancora e ancora e ancora. è possibile un CTRL-H per trovare e sostituire con uno stmt REM, o alla fine eseguire un po '"delete from table1;" "delete from table2" sorta script – Drew

+0

Ci sono molte cose che devono essere omesse? E come vengono identificati? Forse considera di importare il tutto, quindi esegui una tabella di eliminazione su quelle che non vuoi mantenere. – lurker

+0

Penso che ci possa essere un problema con una delle tabelle nel file SQL, quindi il mio processo di importazione non viene completato. Sai se utilizzare il processo di importazione dalla riga di comando è diverso dall'utilizzo dell'utilità di importazione da MySQL Workbench? – DanielAttard

risposta

5

mysqlimport non è lo strumento giusto per l'importazione di istruzioni SQL. Questo strumento ha lo scopo di importare file di testo formattati come CSV. Che cosa si vuole fare è alimentare il vostro discarica SQL direttamente al cliente mysql con un comando come questo:

bash > mysql -D your_database < your_sql_dump.sql 

mysqlmysqlimport forniscono la funzionalità è necessario. La tua migliore possibilità sarebbe importare l'intera discarica, quindi lasciare cadere i tavoli che non vuoi.

Se si ha accesso al server da cui proviene il dump, è possibile creare un nuovo dump con mysqldump --ignore-table=database.table_you_dont_want1 --ignore-table=database.table_you_dont_want2 ....

+0

Grazie per il commento. Il mio problema sembra essere che quando utilizzo il comando import da MySQL Workbench, questo processo funziona ma importa solo circa un terzo delle mie tabelle e quindi si blocca su una tabella specifica. Non riesco a importare tutte le tabelle a causa della tabella dei problemi. – DanielAttard

+1

Prova ad importare il dump direttamente dalla riga di comando. Stai ricevendo lo stesso problema? Almeno potresti essere in grado di vedere qualche messaggio di errore. – RandomSeed

1

Se lo si desidera, si può fare questo una tabella alla volta:

mysqldump -p sourceDatabase tableName > tableName.sql 
mysql -p -D targetDatabase < tableName.sql 
85

La risposta accettata dalla randomSeed potrebbe richiedere molto tempo! L'importazione della tabella (solo per rilasciarla successivamente) potrebbe essere molto dispendiosa a seconda delle dimensioni.

per un file creato utilizzando

mysqldump -u user -ppasswd --opt --routines DBname > DBdump.sql 

Io attualmente ottenere un file di circa 7 GB, 6 GB di che è dati per una tabella di log che faccio non e 'necessita' di essere lì; ricaricare questo file richiede un paio d'ore. Se ho bisogno di ricaricare (per scopi di sviluppo, o se mai necessario per una ripresa dal vivo) I scremare il file così:

sed '/INSERT INTO `TABLE_TO_SKIP`/d' DBdump.sql > reduced.sql 

e ricaricare con:

mysql -u user -ppasswd DBname < reduced.sql 

Questo mi dà un database completo, con la tabella "indesiderata" creata ma vuota. Se davvero non vuoi affatto le tabelle, basta rilasciare le tabelle vuote al termine del caricamento.

Per più tabelle si potrebbe fare qualcosa di simile:

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 

C'è un 'Gotcha' - attenzione per le procedure nella vostra discarica che potrebbero contenere "INSERT INTO TABLE_TO_SKIP".

+4

Questo è geniale, 1 ora fino a 30 secondi. –

+3

wow !!! fantastico, ho appena ridotto un backup da 1 GB a 72 MB, risparmiando un sacco di tempo, grazie –

+1

meglio della risposta accettata, grazie – Edgar

Problemi correlati