タイトルの内容を作業する際にイメージできていなかったので、備忘録として残します。
この記事で分かること
- DB(MySQL)のインポート、エクスポート方法
- AWSへのssh方法(ローカル環境→踏み台サーバー接続→本番環境サーバー接続)
- AWSのDBデータをローカルにコピー(インポート)する方法
行きましょう!
DB(MySQL)のインポート、エクスポート方法
エクスポート
$ mysqldump -u migration_user -p --set-gtid-purged=OFF --no-tablespaces -R -h hoge-aurora.cluster-ro-fuga.ap-northeast-1.rds.amazonaws.com hogefuga > hoge.sql
ホスト名はamazon-aurora。
データベース名はhogefuga。
これらをhoge.sqlというファイル名でエクスポートします。
オプションの意味は以下の通りです。
mysqldump:DBのバックアップコマンド(「ダンプ」と呼ばれます)
-u : ユーザー名
-p : パスワード指定ログイン
-R(—routines) : ストアドプロシージャ・CREATE FUNCTION、トリガーをダンプに含めるオプション
-h : ホスト名
--set-gtid-purged : @@GLOBAL.gtid_purgedステートメントを出力に追加するかを指定し、GTID情報を制御します。GTIDは、マスターで作成され、コミットされた各トランザクションに関連づけられる一位識別子です。つまり、ダンプファイルに書き込まれる位置識別子を追加するか否かということ。今回はローカル環境にインポートするため、他の環境に持ち出した時にGTIDが悪さをするリスクを排除するためにOFFに設定しています。
—no-tablespaces : CREATE LOGFILE GROUP ステートメントおよび CREATE TABLESPACE ステートメントを出力に書き出さない。tablespacesはDB側で作成されるファイルを任意に指定できる機能。ちゃんと理解していませんが、このオプションがないことによって、権限関係のエラーが発生する記事がたくさんありました。テーブルスペース情報が不要ならば-no-tablespacesを記述しておくのが良いと思います。
インポート
# DB名hogefugaにhoge.sqlのデータを投入
$ mysql -u root -p hogefuga < hoge.sql
インポートはシンプルですが、hoge.sqlが存在するディレクトリに移動していないと実行エラーが発生します。別ディレクトリの場合は正しいPATHをしていしてください。
AWSへのssh方法(ローカル環境→踏み台サーバー接続→本番環境サーバー接続)
基本的なコマンドですが、よく忘れて調べるので、、、
# ssi -i 秘密鍵ファイル ユーザー名@IPアドレス
$ ssh -i ~/.ssh/hoge.pem fuga@〇〇.〇〇.〇〇.〇〇
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
# ssh権限ユーザに切り替え
$ sudo su fuga
# 秘密鍵不要
$ ssh fuga@〇〇.〇〇.〇〇.〇〇
__| __| __|
_| ( \__ \ Amazon Linux 2 (ECS Optimized)
____|\___|____/
# ここでmysqldumpを実行する
AWSのDBデータをローカルにコピー(インポート)する方法
手順
①踏み台サーバーから本番環境にscpコマンドでdumpファイルを取り込む
②ローカル環境から踏み台サーバーにscpコマンドでdumpファイルを取り込む
③ローカル環境で自分のMySQLにファイルをインポート
順番にやっていきましょう。
①踏み台サーバーから本番環境にscpコマンドでdumpファイルを取り込む
# scp ユーザー名@IPアドレス:dumpファイルの階層 踏み台サーバーでのファイル保存場所
$ scp fuga@〇〇.〇〇.〇〇.〇〇:/path/to/hoge.sql /tmp/hoge.sql
すごく初歩的ですが、/tmp/は一時保存用のディレクトリです。
基本的には誰でも「読み書き」可能で、ファイルを一時保存する際には便利なディレクトリです。
②ローカル環境から踏み台サーバーにscpコマンドでdumpファイルを取り込む
①と同じ要領です。
scp -i ~/.ssh/hoge.pem hogehoge@IPアドレス /tmp/hoge.sql ~/Download/hoge.sql
これで、ローカル環境にDBデータを持ってこれました。
③ローカル環境で自分のMySQLにファイルをインポート
先ほど紹介したコマンドで実行
# DB名hogefugaにhoge.sqlのデータを投入
$ mysql -u root -p hogefuga < hoge.sql
これで完了です。
AWSのDBをローカルにインポートする方法について書かれた記事があまりなかったので少し苦戦しました。
環境構築系は幅広い知識が必要なので非常に勉強になりますが、大変ですね。