Per InnoDB , sembra funzionare quanto segue:crea il nuovo database vuoto, quindi rinomina ogni tabella a turno nel nuovo database:
RENAME TABLE old_db.table TO new_db.table;
Successivamente dovrai modificare le autorizzazioni.
Per lo scripting in una shell, puoi utilizzare una delle seguenti opzioni:
mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \
do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done
O
for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;
Note:
- Non c'è spazio tra l'opzione
-p
e la password. Se il tuo database non ha password, rimuovi il-u username -ppassword
parte. -
Se una tabella ha un trigger, non può essere spostata in un altro database utilizzando il metodo sopra (risultarà
Trigger in wrong schema
errore). In tal caso, utilizzare un modo tradizionale per clonare un database e quindi eliminare quello vecchio:mysqldump old_db | mysql new_db
-
Se disponi di stored procedure, puoi copiarle in seguito:
mysqldump -R old_db | mysql new_db