2012-01-26 20 views
15

il backup dei database di produzione con il seguente comando:mysql ripristino a diversi database di

mysqldump -u root --opt --skip-extended-insert --databases my_production_db 

Il file di dump risultante ha le seguenti righe nella parte superiore:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `my_production_db` /*!40100 DEFAULT CHARACTER SET latin1 */; 
USE `my_production_db `; 

Al fine di ripristinare la database a una destinazione diversa, ad es. my_debvelopment_db Devo aprire il file di dump e modificare i bit in cui il database è chiamato.

Poi corro:

mysql -u root -p <password> < mydumpfile 

io non ho capito un altro modo per farlo.

Man mano che il database diventa più grande, questo diventa poco pratico.

Mi manca qualcosa? Posso specificare in qualche modo dove voglio ripristinare il database? Avrei bisogno di un comando di backup diverso?

risposta

9

Se si rilascia l'opzione --databases ma si specifica ancora il nome del database, NON si otterranno le istruzioni del database di creazione. vale a dire:

mysqldump -u root --opt --skip-extended-insert my_production_db 

Sulla vostra macchina dev è sufficiente creare qualsiasi database che si desidera ripristinare.

+2

Anche senza un 'opzione --databases', sembra' mysqldump' può ancora generare un riferimento al nome di un database nel dump. Almeno ho problemi con 'ALTER DATABASE \' dbname \ 'CHARACTER SET utf8 COLLATE utf8_bin' in un dump del database, mentre non si usa l'opzione' --databases'. E c'erano due di questi, il secondo che sovrascriveva il primo. – Hibou57

41

@minaz risposta è stata buona, ma voglio aggiungere un po 'di più.

Il problema è stato causato dalla parola chiave --databases. Se ometti la parola chiave, non conterrà alcun contenuto di creazione del database.

Quindi, Dump senza parola chiave --databases.

mysqldump -u username -p database_name > dump.sql 

E ripristinarlo con il nome del database di destinazione.

mysql -u username -p target_database_name < dump.sql 

Inoltre, ci sono diversi modi per farlo. Vedi il problema simile su here (dba.stackexchange).

+0

Credo ci sia un errore con '-p database_name', dato che il nome dell'opzione' -p' è il nome breve per l'opzione '--password'. – Hibou57

+10

@ Hibou57 Grazie per il commento. Sì, '-p' significa' --password' come hai detto. Ma '-p' in realtà significa 'Inserirò la mia password tramite prompt'. Se vuoi mettere la password tramite l'opzione di comando, non dovrebbe esserci spazio (spazio) come '-p ' not '-p '. – lqez

+0

http://dev.mysql.com/doc/refman/5.5/en/mysql-command-options.html#option_mysql_password – lqez

0

Se si dispone già del dump, è possibile rimuovere i comandi per creare e utilizzare il database. Basta rimuovere la quarta e la nuova quinta riga.

sed '4d' dump.sql | sed '5d' > dump-striped.sql 
+0

È meglio mostrare solo le linee da rimuovere. Ce ne sono solo due. Il metodo che date è arbitrario, specialmente se il formato cambia o ha altre modifiche manuali. – bshea

1

Su Windows XAMPP ho usato i seguenti comandi per ottenere questo

Export

mysqldump -u root -p mydb > mydb.sql 

Import

mysql -u root -p mynewdb < mydb.sql 
Problemi correlati