場合によっては、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データベースの名前が効果的に変更されました。