MySQLのデータベースをコピーする方法

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 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つのコマンドの意味

  1. コピー元となるデータベース(from_db)の内容をSQL文になるように、from_db.dump.sql というファイル名で出力。
  2. MySQLにデータのコピー先となるデータベース(dest_db)を新たに作成。
  3. 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 サーバーにもコピーできます。

MySQLのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca