Clonazione di un database MySQL sulla stessa istanza MySql

Vorrei scrivere uno script che copia il mio database corrente sitedb1 in sitedb2 sulla stessa istanza del database mysql. So che posso scaricare il file sitedb1 in uno script sql:

 mysqldump -u root -p sitedb1 >~/db_name.sql 

e quindi importarlo in sitedb2 . C’è un modo più semplice, senza scaricare il primo database in un file sql?

Come dice il manuale in Copying Databases , puoi riversare il dump direttamente nel client mysql:

 mysqldump db_name | mysql new_db_name 

Se stai usando MyISAM potresti copiare i file, ma non lo consiglierei. È un po ‘dubbia.

Integrato da varie buone altre risposte

Entrambi i comandi mysqldump e mysql accettano le opzioni per l’impostazione dei dettagli di connessione (e molto altro), come:

 mysqldump -u  --password=  | mysql -u  -p  

Inoltre, se il nuovo database non è ancora esistente, è necessario crearlo in anticipo (ad es. Con echo "create database new_db_name" | mysql -u -p ).

Utilizzo di MySQL Utilities

Le utilità MySQL contengono il simpatico strumento mysqldbcopy che per impostazione predefinita copia un DB che include tutti gli oggetti correlati (“tabelle, viste, trigger, eventi, procedure, funzioni e concessioni a livello di database”) e dati da un server DB allo stesso o a un altro server DB. Ci sono molte opzioni disponibili per personalizzare ciò che viene effettivamente copiato.

Quindi, per rispondere alla domanda dell’OP:

 mysqldbcopy \ --source=root:[email protected] \ --destination=root:[email protected] \ sitedb1:sitedb2 
 $ mysqladmin create DB_name -u DB_user --password=DB_pass && \ mysqldump -u DB_user --password=DB_pass DB_name | mysql -u DB_user --password=DB_pass -h DB_host DB_name 

È necessario eseguire il comando dal terminale / prompt dei comandi.

 mysqldump -u  -p   | mysql -u    

ad esempio: mysqldump -u root test_db1 | mysql -u root test_db2 mysqldump -u root test_db1 | mysql -u root test_db2

Copia copy_db1 in test_db2 e concede l’accesso a ‘root’ @ ‘localhost’

Puoi usare (in pseudocodice):

 FOREACH tbl IN db_a: CREATE TABLE db_b.tbl LIKE db_a.tbl; INSERT INTO db_b.tbl SELECT * FROM db_a.tbl; 

La ragione per cui non sto usando la syntax CREATE TABLE … SELECT … è quella di preservare gli indici. Ovviamente questo copia solo le tabelle. Le viste e le procedure non vengono copiate, sebbene possa essere eseguita allo stesso modo.

Vedi CREATE TABLE .

Prima crea il database duplicato:

 CREATE DATABASE duplicateddb; 

Assicurati che le autorizzazioni ecc siano tutte a posto e:

 mysqldump -u admin -p originaldb | mysql -u backup -p password duplicateddb; 

Il modo migliore e più semplice è inserire questi comandi nel tuo terminale e impostare le autorizzazioni all’utente root. Per me va bene..!

 :~$> mysqldump -u root -p db1 > dump.sql :~$> mysqladmin -u root -p create db2 :~$> mysql -u root -p db2 < dump.sql 

Puoi fare qualcosa di simile al seguente:

 mysqldump -u[username] -p[password] database_name_for_clone | mysql -u[username] -p[password] new_database_name 

Questa affermazione è stata aggiunta in MySQL 5.1.7 ma è stata trovata pericolosa ed è stata rimossa in MySQL 5.1.23. Era destinato a consentire l’aggiornamento dei database precedenti alla 5.1 per utilizzare la codifica implementata in 5.1 per mappare i nomi dei database ai nomi delle directory del database. Tuttavia, l’uso di questa dichiarazione potrebbe causare la perdita di contenuti del database, motivo per cui è stato rimosso. Non utilizzare RENAME DATABASE nelle versioni precedenti in cui è presente.

Per eseguire l’operazione di aggiornamento dei nomi dei database con la nuova codifica, utilizzare ALTER DATABASE nome_db UPGRADE DATA DIRECTORY NAME invece: http://dev.mysql.com/doc/refman/5.1/en/alter-database.html

È meglio usare il comando mysqldbcopy per copiare il database da uno a un altro server o allo stesso server.

 mysqldbcopy --source=root:[email protected] --destination=root:[email protected] database-name:database-name-clone 

[MySQL]

Non penso che ci sia un metodo per farlo. Quando PHPMyAdmin esegue questa operazione, scarica il DB e lo reinserisce con il nuovo nome.

Oltre alla risposta di Greg.
il modo più semplice e veloce se il new_db_name non esiste ancora.

 echo "create database new_db_name" | mysql -u  -p  mysqldump -u  -p  db_name | mysql -u  -p  new_db_name 

Un modo semplice per farlo se hai installato phpmyadmin :

Vai al tuo database, seleziona la scheda “operation” e puoi vedere il blocco “copy database to”. Usalo e puoi copiare il database.

Utilizzare ‘mysqldbcopy’ sul terminale. Questo caso è ben citato qui . Esempio: avviare il prompt cmd. Passare alla cartella bin di mySql Server. Fai fuoco alla query seguente:

 C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqldbcopy --source=root:[email protected] --destination=root:[email protected] master:master_clone 

qui sto cercando di copiare il mio ‘master’ db in ‘master_clone’ su localhost.