InnoDBの場合 、次のように機能するようです。新しい空のデータベースを作成してから、各テーブルの名前を順番に新しいデータベースに変更します。
RENAME TABLE old_db.table TO new_db.table;
その後、権限を調整する必要があります。
シェルでのスクリプトの場合、次のいずれかを使用できます。
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
または
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;
注:
- オプション
-p
の間にスペースはありません とパスワード。データベースにパスワードがない場合は、-u username -ppassword
を削除します 一部。 -
一部のテーブルにトリガーがある場合、上記の方法を使用して別のデータベースに移動することはできません(
Trigger in wrong schema
エラー)。その場合は、従来の方法を使用してデータベースのクローンを作成してから、古いデータベースを削除します。mysqldump old_db | mysql new_db
-
プロシージャを保存している場合は、後でコピーできます:
mysqldump -R old_db | mysql new_db