Pour InnoDB , ce qui suit semble fonctionner :créez la nouvelle base de données vide, puis renommez chaque table à tour de rôle dans la nouvelle base de données :
RENAME TABLE old_db.table TO new_db.table;
Vous devrez ensuite ajuster les autorisations.
Pour créer des scripts dans un shell, vous pouvez utiliser l'une des options suivantes :
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;
Remarques :
- Il n'y a pas d'espace entre l'option
-p
et le mot de passe. Si votre base de données n'a pas de mot de passe, supprimez le-u username -ppassword
partie. -
Si une table a un déclencheur, elle ne peut pas être déplacée vers une autre base de données en utilisant la méthode ci-dessus (cela entraînera
Trigger in wrong schema
Erreur). Si tel est le cas, utilisez une méthode traditionnelle pour cloner une base de données, puis supprimez l'ancienne :mysqldump old_db | mysql new_db
-
Si vous avez des procédures stockées, vous pouvez les copier par la suite :
mysqldump -R old_db | mysql new_db