やりたいこと
ローカルのデータベースを本番のもので置き換えて動作検証がしたい。
そのためにRDSで作成している本番DBからdumpをとりたい!
やりかた
本番DBとローカルでsshトンネルを開通させる→dumpをとるコマンドを実行。
ポートフォワーディング(トンネル開通)とは?
https://www.clear-code.com/blog/2014/9/12.html
今回はローカルのポートから踏み台サーバーを経由してDBに接続する。
実行コマンド
ポートフォワーディング
必要な情報の取得方法は後述します。
ssh -N (実行ユーザーのuser name)@踏み台のIPアドレス -L ローカルのポート番号:DBのエンドポイント:DBのポート番号
必要によって以下のオプションを指定
-i: 秘密鍵の指定
-f: バックグラウンドで実行
DBのエンドポイント・ポート番号
RDS→Databases→該当DBの Endpoint name
と Port
をコピペ
踏み台のIPアドレス
EC2→Instances→該当インスタンスをチェックしたときに下に出てくる
このタブ内にある IPv4 Public IP
をコピペ
ローカルのポート番号
現在使っていない番号だったら何でもOK。例えば今回は既に 3316
を使っていたので 3317
にした。
dumpをとるコマンド
これでコンソールからコマンドを打ってdumpが取れる状態になったので、以下でdumpをとる。
mysqldump -u <ユーザー名> -p -h 127.0.0.1 -P 3317 <DB名> > 20200204.dump
パスワードを求められるので入力。このユーザー名とパスワードはRDSのDBのもの。
mysqlの場合は localhost
ではなく 127.0.0.1
とする必要があります。
これでdumpが取れました!🎉
補足
mysqldump: Couldn't execute 'SELECT COLUMN_NAME,
こんな感じで怒られる場合は、dumpのコマンドに --skip-column-statistics
オプションを追加して以下のようにして下さい。
mysqldump --skip-column-statistics -u <ユーザー名> -p -h 127.0.0.1 -P 3317 <DB名> > 20200204.dump