メインコンテンツまでスキップ

RDB Migration

Overview

RDBマイグレーション処理のセクション。

DBマイグレーション

データベースを削除し手から作り直すと、DBに保存されている情報がすべて削除される。
こういった事態を回避する方法としてデータベースマイグレーションを行う方法がある。
マイグレーションとは、DBに保存されているデータを保持したままテーブルの作成やカラムの変更などを行うための機能。
運用中のデータベースにデータを入れたまま、テーブルを追加したりカラムを変更するなどして、スキーマを管理する機能 ※対象の言語ORMに対して、マイグレーションがない場合は汎用なマイグレーションツールを使うなど対策が必要。

注意

スケールされた環境で、複数のサーバーが同時にマイグレーションは行なってはいけない。
複数のサーバーインスタンスが同時にマイグレーションを走らせると、同じテーブルに対して並行して処理が走り、競合やエラーが発生する恐れ。
DBレイヤーではアドバイザリロック (Advisory Lock) という仕組みを使い、MySQLやPostgreSQLでは同時移行を防ぐ機能が提供されている。
データベースにロックをかけることで、他のプロセスが同時にマイグレーションを実行できないようにする。 ただし、このロックを完全に信用せず、同時移行を避けるために1台のインスタンスだけでマイグレーションを実行するのがベスト。

ロールバック

DBマイグレーションツールのロールバック機能は使うな

注意

本番環境でのロールバックは推奨されない。
down メソッドにはテーブルの削除や列の削除などの破壊的なアクションが含まれているため。
代わりに新しい移行を作成して問題を修正し、本番サーバー上で実行することをお勧めする。 メンテナンスモードを使用してもデータ損失リスクは回避できないため、基本的に本番環境でのロールバックは避けるべき。 スキーマ修正が必要な場合は新しいマイグレーションを作成して適用する」という方法が安全 ロールバックするのではなく、修正マイグレーションを適切に作成し、適用して対応する。