[MySQL]mysqldumpを利用して別の環境にデータを移行する


任意の環境のデータを別の環境に移行してテストしたい、という場面は開発をしているとよく起こるかと思います。

本記事では、このような際にmysqldumpを利用して別の環境へデータを移行する方法を記載します。

mysqldumpとは

MySQLのバックアップを作成するコマンドです。

mysqldumpで取得したファイル中にはテーブルのDROP文・CREATE文・INSERT文が入っていて、このバックアップを利用することで元のテーブル・データの状態に復元できることが分かります。

イメージ

mysqldumpで取得したバックアップを別のサーバーに利用することで、データ移行を実現します。

データ取得

上記イメージの①②に当たる部分です。

mysqldump --single-transaction -h(取得元IP) -u(取得元ユーザー) -p(取得元パスワード) --port=(取得元ポート) (DB名) (テーブル名) > backup.sql

Tips:

  • 指定したDB内の全てのデータを取得する際には、テーブル名を省略します。
  • テーブル名は複数指定できます。
  • --whereを利用して、テーブルに対してWHERE句を指定できます。 例:--where="user_id = 'abc'"

データ取込

上記イメージの③に当たる部分です。

上記で作成したbackup.sqlを利用して、mysqlコマンドでデータ取込を行います。

mysql -h(取込先IP) -u(取込先ユーザー) -p(取込先パスワード) --port=(取込先ポート) (DB名) < backup.sql

一部のデータのみを取り込みたい場合

すでにあるデータを削除せずに追加で取り込みたい場合は、データ取得時に-no-create-infoを利用してDROP・CREATE文を発行しないようにします。

mysqldump --single-transaction --no-create-info -h(取得元IP) -u(取得元ユーザー) -p(取得元パスワード) --port=(取得元ポート) (DB名) (テーブル名) > backup.sql

但し、プライマリキーが衝突する場合等にはエラーが発生し、異常終了します。この際、データは全てロールバックされるので一部のデータだけが取り込まれるということはありません。

参考