プログラミングと旅と映画の日々

普段はスマホ決済サービスの会社でバッグエンドを担当しているエンジニアです。プログラミングと趣味の映画、株、時々うどんに関してブログを書いていこうと思います。海外ドラマ、クロスバイクも好きです。

【heroku】herokuのpostgresqlをhobby-devからhobby-basicにupgradeする【rails5】

先日herokuから突然以下のメールが届きました。

[warning] Database disruption imminent, row limit exceeded for hobby-dev database on Heroku app APP名

heroku
The database DATABASE_URL on Heroku app APP名has exceeded its allocated storage capacity. Immediate action is required.

The database contains 10,551 rows, exceeding the Hobby-dev plan limit of 10,000. INSERT privileges to the database will be automatically revoked in 7 days. This will cause service failures in most applications dependent on this database.

要するにDBのレコード数が1万レコードを超過したから、
DBを有料プランに移行するかレコードを削除してくれ!
って事ですね。
今回は有料プランであるhobby-basicのDBを作成し、データを移行したいと思います。

今回は海外ドラマの視聴記録サービス mitano
のDBをhobby-devからhobby-basicにupgradeしたいと思います。
mitano - あなたが見ている海外ドラマの視聴記録を簡単に | mitano

STEP1. hobby-basicのDB作成

$ heroku addons:create heroku-postgresql:hobby-basic
Creating heroku-postgresql:hobby-basic on ⬢ infinite-mountain-○○○○... $9/month
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy
Created postgresql-flat-46737 as HEROKU_POSTGRESQL_AQUA_URL
Use heroku addons:docs heroku-postgresql to view documentation

STEP2. フォロワーがリーダー・データベースに追いつくのを待ちます。

$ heroku pg:wait

STEP3. データベースへの書き込み防止のためメンテナンスモードに!

$ heroku maintenance:on
Enabling maintenance mode for ⬢ infinite-mountain-92961... done

上記コマンドを実行するとサービスの画面が以下から
f:id:takanori5:20180722142855p:plain
以下のメンテナンス画面に自動で切り替わっていました。
素敵です!さすがheroku!
f:id:takanori5:20180722142819p:plain

STEP4. DB移行

旧DBから新DBにデータを移行します!

$ heroku pg:copyURLURLWARNING: Destructive action
 ▸    This command will remove all data from AQUAData from DATABASE will then be transferred to AQUATo proceed, type infinite-mountain-92961 or re-run this command with
 ▸    --confirm infinite-mountain-○○○○

> infinite-mountain-○○○○
Starting copy of DATABASE to AQUA... done
Copying... done

STEP5. DBの向き先を新DBに変更

$ heroku pg:promote HEROKU_POSTGRESQL_AQUA_URL
Ensuring an alternate alias for existing DATABASE_URL... HEROKU_POSTGRESQL_PINK_URL
Promoting postgresql-flat-46737 to DATABASE_URL on ⬢ infinite-mountain-○○○○... done

STEP6. メンテナンスモードを解除!

$ heroku maintenance:off
Disabling maintenance mode for ⬢ infinite-mountain-○○○○.. done

f:id:takanori5:20180722142855p:plain
メンテナンスモード解除後の画面
10分程で新DBに移行が完了しました!

緊張しましたがheroku はやはりなんでも手軽にできて便利ですねっ!

プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)

www.mitano.jp

takanori5.hatenablog.com
takanori5.hatenablog.com