MySQL データベースの名前をすばやく変更 (スキーマ名を変更) するにはどうすればよいですか?
通常、データベースをダンプして新しい名前で再インポートします。これは非常に大きなデータベースでは選択肢になりません。どうやらRENAME {DATABASE | SCHEMA} db_name TO new_db_name;
悪いことをし、少数のバージョンしか存在せず、全体的に悪いアイデアである。
ベストアンサー1
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