##内容
ruby on railsで作成したアプリケーションの本番環境をherokuからAWSに移行する際のデータ移行について備忘録として書き残す。
実際には本番稼働後にサーバー環境を移すというのはリスクと手間ばかりかかって悪手だとは思うのですが、個人開発なのでお許しを・・。
##環境
・ruby 2.7.1
・Rails 6.0.3.2
・mysql 5.7
以下のような形でAWSインフラを構築していることを想定
##heroku側:clearDB(Mysql)からデータのエクスポート
※本番環境の場合は、タイムラグによるデータ欠落等を防ぐため、一時的にサーバーを停止する等の措置が必要かと。詳しくはチームの方針に従ってください。ここではタイトル通りデータ移行の手順についてのみ記載します。
###データベースURL取得
$heroku config --app アプリ名 | grep DATABASE_URL
CLEARDB_DATABASE_URL: mysql://<USER_NAME>:<PASSWORD>@< HOST >/<DB_NAME>?reconnect=true
###データのエクスポート
データのエクスポートをします。おそらくしばらく時間がかかるため気長に待ちましょう。
カレントディレクトリにdump.sqlが出力されていれば成功です。
mysqldump -uUSER_NAME -p -h HOST -r dump.sql --single-transaction DB_NAME --skip-column-statistics
パスワードを聞かれると思うので、入力してください。
オプションの内容を軽く説明しておくと、
--single-transaction・・・ダンプ処理をトランザクションで囲む。データの整合性を保つのに有効。MyISAMテーブルが含まれるDBでは別オプションが必要らしい。
--skip-column-statistics・・・mysqldump 8以降でそれ以前 (5.7とか) のMySQLサーバに対してダンプをする際に起こるエラーを回避。詳しくは筆者もよくわからない。。
以下記事参考
https://blog.pinkumohikan.com/entry/mysqldump-disable-column-statistics
mysqldumpのよく使うオプションを書いてくれている記事もあったため、リンクを貼っておきます。
よく使うmysqldumpのオプションと使用例
https://qiita.com/ryounagaoka/items/7be0479a36c97618907f
##AWS側:EC2へsqlを転送
前提
・ssh接続ができている
・クライアントのssh/configは以下の場合
Host myapp
HostName IPAddress
Port 22
IdentityFile ~/.ssh/myapp_rsa
User hoge
以下コマンドを叩く
scp 転送元ファイル myapp:/転送先ディレクトリ
転送できない場合以下サイト等を参照
http://gallardolp570.hatenablog.com/entry/2014/11/17/205325
##AWS側:RDSにsqlをインポート
事前に接続先のエンドポイント、ユーザー名、パスワードを確認しておく。
mysql -h エンドポイント -u ユーザー名 -p DB名> dump.sql
進捗状況を確認したい場合はパイプで繋ぎpvコマンドをつけると良き
https://qiita.com/hiroq/items/efd8c3580c9c9457c869
反映されていればインポート成功です。お疲れ様でした。
見よう見まねの部分も多いため、何か誤り等あればご指摘いただけますと幸いです。
##参考サイト
http://kayakuguri.github.io/blog/2015/09/10/mysql-postgres-import-export/