Para InnoDB , o seguinte parece funcionar:crie o novo banco de dados vazio e renomeie cada tabela para o novo banco de dados:
RENAME TABLE old_db.table TO new_db.table;
Você precisará ajustar as permissões depois disso.
Para scripts em um shell, você pode usar um dos seguintes:
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
OU
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;
Notas:
- Não há espaço entre a opção
-p
e a senha. Se seu banco de dados não tiver senha, remova o-u username -ppassword
parte. -
Se alguma tabela tiver um gatilho, ela não poderá ser movida para outro banco de dados usando o método acima (o resultado seráTrigger in wrong schema
erro). Se for esse o caso, use uma maneira tradicional de clonar um banco de dados e, em seguida, descarte o antigo:
mysqldump old_db | mysql new_db
-
Se você tiver procedimentos armazenados, poderá copiá-los posteriormente:
mysqldump -R old_db | mysql new_db