1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ruby on rails + Mysql】herokuからAWSに切り替える際のデータ移行手順メモ

Last updated at Posted at 2021-01-11

##内容
ruby on railsで作成したアプリケーションの本番環境をherokuからAWSに移行する際のデータ移行について備忘録として書き残す。

実際には本番稼働後にサーバー環境を移すというのはリスクと手間ばかりかかって悪手だとは思うのですが、個人開発なのでお許しを・・。

##環境
・ruby 2.7.1
・Rails 6.0.3.2
・mysql 5.7

以下のような形でAWSインフラを構築していることを想定

スクリーンショット 2021-01-11 10.27.31.png

##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/

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?