任意の環境のデータを別の環境に移行してテストしたい、という場面は開発をしているとよく起こるかと思います。
本記事では、このような際に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
但し、プライマリキーが衝突する場合等にはエラーが発生し、異常終了します。この際、データは全てロールバックされるので一部のデータだけが取り込まれるということはありません。