MySQLサーバー内のデータベースをコピーしたい場合があります。 例えば、別の開発者の作業用にコピーを作りたい場合などが良くあるケースではないでしょうか。 本稿では MySQL のデータベースをコピーする方法について解説します。
コマンド
残念ながらコマンド一発でコピー完了とはいきませんが、次の3つのコマンドだけでコピーを行うことができます。 MySQL にはログインせず、シェルのコマンドラインで完結します。 注意としては、コピーするデータベースを参照する権限、および新しいデータベースを作成する権限を持ったユーザーで実行するようにしてください。
$ mysqldump -u user_name -p from_db > from_db.dump.sql
$ mysqladmin -u user_name -p create dest_db
$ mysql -u user_name -p dest_db < from_db.dump.sql
この3つのコマンドがどのような意味なのかというと、次の3つのことをやっています。
3つのコマンドの意味
- コピー元となるデータベース(from_db)の内容をSQL文になるように、from_db.dump.sql というファイル名で出力。
- MySQLにデータのコピー先となるデータベース(dest_db)を新たに作成。
- 1で作成した from_db.dump.sql 内のSQL文を dest_db に対して実行。
それぞれのコマンドの詳しい説明は次で説明します。
解説
上で記載した3つのコマンドについて、ざっと説明をします。
1. コピー元データベースをファイルに出力
まずはコピー元となるデータベースの中身をSQL文としてファイルに出力するために、次のコマンドを実行しました。
$ mysqldump -u user_name -p from_db > from_db.dump.sql
mysqldump
コマンドは、MySQL のインストールとともに利用できるようになるコマンドです。 データをバックアップ・出力する際に利用します。 -u
オプションでコピー元データベースを参照できる権限を持つユーザ名を指定してください。 またデータのコピー元となるデータベース名も指定します、ここでは例として from_db という名前のデータベースを指定しています。
> ファイル名
で、指定したファイル名へ出力することを指定しています。 作成されるファイルはテキストファイルで、全てのデータがSQL文として出力されます。 コマンド実行後に中身をエディタなどで開いてみるとイメージが付きやすいでしょう。
2. データベースの作成
次にデータのコピー先となるデータベースを作成しました。 ここでは例として「dest_db」という名前のデータベースを次のようなコマンドで作成しました。
$ mysqladmin -u user_name -p create dest_db
mysqladmin コマンドは、名前の通り MySQL を管理するために利用するコマンドです。 create データベース名 を指定することで、指定したデータベースを新たに作成することができます。 前述の通り、この際にはデータベースを新たに作成する権限を持つユーザーを指定して実行することが必要となります。
3. コピー先へデータを投入する
1でファイルに出力した SQL を、次のような mysql
で入力してあげます。
$ mysql -u user_name -p dest_db < from_db.dump.sql
この時には、新たに作成した dest_db へデータを書き込めるユーザを指定してあげる必要がある点をお気をつけください。
おわりに
本稿では、MySQL のデータベースをコピーする方法について解説しました。 コピーは同一の MySQL サーバーだけではなく、ファイルをコピーしてあげれば別マシンの MySQL サーバーにもコピーできます。