production.log

株式会社リブセンスでエンジニアをやっている星直史のブログです。

MySQL Staging環境のDBをdumpしてローカル環境のMySQLにimportする方法

概要

Snapmart社のstagingのDB環境は、AWS RDSを使用しています。

毎日24時にproduction環境のスナップショットからstaging用DBを作成し、update文で個人情報やメールアドレスなどをマスクした状態にしています。
また、stagingが配置されているVPCは社内ネットワークからしかアクセスできないようしています。
そのため、自宅からリモートで作業を行いたい場合、stagingのDBに接続できず思うように開発ができません。 *1

今回は、手っ取り早くローカルのmysqlにデータをdump/importするための手順を記します。

準備するもの・こと

AWS RDS staging用DBのデータ

AWS RDS staging用DBのデータをダンプします。 ダンプするデータは、特定のデータベースのテーブル定義データと、テーブルの中身のデータの二つに分けて取得します。

mysqldump -uhoge -phoge -hhoge.com -d -n > OUTPUT_TABLE 
mysqldump -uhoge -phoge -hhoge.com -t table_name > OUTPUT_DATA

そして、ダンプしたファイルをscpでローカルにもってきます。

元々のDBの削除と作成

めんどくさいのでRails経由で行います。

bundle exec rake db:drop RAILS_ENV=development
bundle exec rake db:create RAILS_ENV=development

import

データ部をimportする際に-fはエラーを無視してimportするぜ!というオプションです。 duplicate entyエラーが出てしまっていたのですが、細かいことは気にしないので、スルーすることにしました。

sql_local < ~/Downloads/OUTPUT_TABLE
sql_local -f < ~/Downloads/OUTPUT_DATA

追記 201903201343 メモ

DDLとデータで分けたりせずにdump実行すれば、dumpファイルに

DROP TABLE IF EXISTS XXXTable

がつくので、ローカルDBの初期化処理は必要ない。

*1:VPN使えば良いって話はありますが