場合によっては、MySQLデータベースの名前をすばやく変更することが望ましい場合があります。以前は単純な<code>RENAMEDATABASEが存在していました このタスクを実行することを目的とした古いバージョンのMySQLのコマンドRENAMEDATABASE その後、セキュリティリスクを回避するために、すべての新しいバージョンから削除されました。
代わりに、MySQLデータベースの名前をすばやく安全に変更するために使用できるいくつかのオプションの方法について簡単に説明します。
比較的小さなデータベースで作業する場合、通常、最速の方法は mysqldumpを使用することです。 データベース全体のダンプされたコピーを作成し、すべてのデータを適切な名前で新しく作成されたデータベースにインポートするシェルコマンド。
次のmysqldumpを発行することから始めます シェルプロンプトからコマンドを実行し、適切な usernameを置き換えます 、 password 、および oldDbName 値。 mysqldump はデータベースの物理バックアップを作成するために使用されるため、このコピーを使用してデータを新しいデータベースにインポートして戻すことができます。
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
-pを使用しています フラグの直後にパスワードを入力してデータベースに接続し(間にスペースを入れないで)、これらのコマンドを発行するときにパスワード入力プロンプトを回避します。一意の文字を含むパスワードは実行の問題を引き起こす可能性があるため、必ず周囲の引用符を残してください。 -R フラグも重要であり、 mysqldumpに通知します ストアドプロシージャと関数をデータベースから通常のデータと一緒にコピーします。
次に、 mysqladminを使用します 新しいデータベースを作成するコマンド:
$ mysqladmin -u username -p"password" create newDbName
最後に、新しいデータベースを作成したら、 mysqlを使用します 作成したダンプファイルを新しいデータベースにインポートします。
$ mysql -u username -p"password" newDbName < oldDbName.sql
3つの基本的なコマンドと新しいデータベースが作成されました。すべてが意図したとおりであることを確認したら、古いデータベースの削除に進むことができます。
InnoDBを使用したテーブルの名前変更
MySQLバージョン5.5(またはそれ以降)を使用している場合は、InnoDBストレージエンジンを使用している可能性があります。これにより、データベースの名前変更のタスクが非常に簡単になります。
つまり、 RENAME TABLEを使用できます データベース名を効果的に変更するためのMySQLプロンプト内のコマンド テーブル名をそのままにして、特定のテーブルの名前を変更します。ただし、これを行うには、新しい名前のデータベースがすでに存在している必要があるため、 mysqladminを使用して新しいデータベースを作成することから始めます。 上記のシェルコマンド。
たとえば、すでに catalogがある場合 名前をlibraryに変更するデータベース 、最初に新しいライブラリを作成します データベース:
$ mysqladmin -u username -p"password" create library
次に、 mysqlに接続します プロンプトを表示して、次のMySQL RENAME TABLEを発行します 選択したテーブルのステートメント:
mysql> RENAME TABLE catalog.books TO library.books;
本全体を移動しました catalogのテーブル 新しいライブラリへのデータベース データベース。このコマンドは、必要に応じて関連するすべてのテーブルに対して手動で実行できます。または、以下に示すように、シェルスクリプトを使用してタスクを簡略化できます。
最小のデータベースを除くすべてのデータベースについて、手動で RENAME TABLEを発行します 各テーブルのコマンドはあまり実用的でも効率的でもありませんが、ありがたいことに、 mysqlを使用して簡単なシェルコマンドを使用できます。 古いデータベース内のすべてのテーブルをループして名前を変更し、新しいデータベースに移動するユーティリティ。
コマンドの基本構造は次のとおりです。
$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done
したがって、古い catalogからの移行については 新しいライブラリへのデータベース データベースの場合、ステートメントを次のように変更します。
$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done
コマンドにもいくつかのフラグを追加しました:
-
-sサイレントモードのフラグです そのため、シェルへの出力が少なくなります。 -
-N結果から列名が出力されないようにします。 -
-e-eに続くステートメントを示します フラグは実行する必要があります その後、シェルは終了します。これは、ステートメント'show Tables'を意味します および"RENAMETABLEcatalog。$tableTOlibrary。$table"必要に応じて、通常のSQLステートメントとして実行されます。
これですべてです。これで、MySQLデータベースの名前が効果的に変更されました。