つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

MySQLの本番DB、ステージングDBをローカルへ自動でコピーするスクリプト

   

こんにちは、@s_tsukaです。

今回はMySQLを使って開発をするときに、本番DB(ステージングDB)のデータをローカルDBへ持ってくる話です。(半)自動で行えるスクリプトも用意したので、良かったら使ってください。

概要

  • shell script用意する
  • mysqldump使う
  • 多分portforward必要でしょうし、それ使う

スクリプト

概要で大体察しが付く人もいるかと思うので、あれこれ解説する前に早速スクリプトを貼っておきますね。

使い方は以下の通りです。

  1. 上記のスクリプトをコピペする(sync_prod_to_local.shとか適当に)
  2. #Settingの部分にある設定を変える。ポートフォワード前提で作られてるので、不要な人は色々消してください。自分の場合は適当なEC2インスタンスにsshでトンネル作って、EC2経由でRDSを見るようにしました。
  3. chmod +x ./sync_prod_to_local.sh
  4. ./sync_prod_to_local.sh dbname
    dbnameはコピーしたいDBの名前です。(予めlocal DBでcreate database dbnameしておいてください。)

解説

まずPort forwardでSSHトンネルを作っています。これは大抵の本番環境やステージング環境のDBはセキュリティ上、local環境から接続できないようになっていると思われるためです。もし接続できるなら直接mysqldumpで良いですね。

SSHトンネルについては以前に記事を書いているので、そちらをご覧下さい。

MySQLにssh経由で接続する色々な方法

次にmysqldumpコマンドを実行しています。これはおなじみの方法ですね。指定したDBのデータを丸ごと取ってきています。ですので、本番やステージングのDBに当然負荷がかかりますし、データが多いと転送料金や時間の問題が出てきます。ご注意ください。

そしてmysqlコマンドでそのdumpファイルを取り込んでいます。

最後にTerminateのところで作成したdumpファイルを消したり、SSHトンネルのプロセスを殺したりして綺麗にしています。

まとめ

SSHトンネルやdumpコマンドを使って本番DBのデータをlocalへ持ってくる方法を解説しました。

クックパッドなどはもっと拘っています。

開発環境のデータをできるだけ本番に近づける

ここまで労力さけない、という人・チームも多いと思いますが、今回のdumpでコピる方法くらいならお手軽なので、1エンジニアのスキルとして持っておくと良いかと思います。

dumpとか既に出尽くしたネタではありますが、RDSのポートフォワードとか絡むと若干面倒だったので、良かったらスクリプト参考にしてみてくださいー。

本番(STG)データを使って、良い開発ライフを!

 - MySQL, ShellScript ,