Para InnoDB , lo siguiente parece funcionar:cree la nueva base de datos vacía, luego cambie el nombre de cada tabla a la nueva base de datos:
RENAME TABLE old_db.table TO new_db.table;
Deberá ajustar los permisos después de eso.
Para secuencias de comandos en un shell, puede usar cualquiera de los siguientes:
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;
Notas:
- No hay espacio entre la opción
-py la contraseña. Si su base de datos no tiene contraseña, elimine el-u username -ppasswordparte. -
Si alguna tabla tiene un disparador, no se puede mover a otra base de datos usando el método anterior (dará como resultado
Trigger in wrong schemaerror). Si ese es el caso, use una forma tradicional de clonar una base de datos y luego elimine la anterior:mysqldump old_db | mysql new_db -
Si tiene procedimientos almacenados, puede copiarlos después:
mysqldump -R old_db | mysql new_db