1. ホーム
  2. mysql

[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?

2022-03-18 12:56:22

質問

のMySQLマニュアルを参照してください。 MySQL がカバーしています。

通常はデータベースをダンプして、新しい名前で再インポートするだけです。非常に大きなデータベースの場合、この方法は使えません。どうやら RENAME {DATABASE | SCHEMA} db_name TO new_db_name; は悪いことをする、いくつかのバージョンにしか存在しない、全体的に悪い考えである。 .

と連携する必要があります。 InnoDB とは全く異なる方法で保存されます。 マイサム .

解決方法は?

について 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