新しいテーブルの追加や他のテーブルの変更など、開発中にデータベーススキーマを大幅に変更しました。実装に約15時間かかったすべての変更を繰り返すことなく、このスキーマをサーバーに転送し、新しいテーブルを構築し、他のテーブルを再構築する簡単な方法はありますか?
答え1
もちろんです。しかし、あらかじめ計画を立てれば簡単にできます。
多様性
sql
データベース移行(スキーマの変更など)を作成するときは、変更をカプセル化するステートメントを生成する必要があります。データを含む既存のテーブルに列を追加する場合は、sql
変更を説明するステートメントを生成できる必要があります。たとえば、
ALTER TABLE `myTable`.`local`
ADD COLUMN `last_update` timestamp NULL AFTER `location_name`,
...;
各変更を追跡するステートメントを含むファイルをアーカイブしてから、本番sql
テーブルでそのステートメントを正しい順序で実行しても問題ありません。追跡している場合は、この種類のコンテンツをバージョン管理に追加することもできます。これは、すでにこれらのサポートを提供しているフレームワークの助けを借りずにこれを行うための最良の方法です。
新しいテーブル
新しい方が簡単です。すべてのインデックスとデータ型がわかるまで作業を続け、スキーマをファイルにダンプします.sql
。本番サーバーでこのコマンドを実行すると、テーブルがそこにあるはずです。
mysqldump -d -h localhost -u root -pmypassword databasename > dumpfile.sql
-d
データではなくスキーマのみをダンプする必要があります。
難しい道
増分変更の実行リストを維持しない場合や、スキーマを大幅に変更しないと、少し難しくなります。運用表と開発表のスキーマを手動で比較し、移行を手動で作成する必要がある場合があります。既存のデータがフィールド定義に収まらないほどテーブルを変更しすぎていないとします。
本番テーブルからスキーマをダンプし、それを開発システムの他のデータベースにインポートしてから、そこから移行を作成できます。ただし、古いスキーマから新しいスキーマへの移行を作成するだけで済みます。新しいスキーマを設計するよりもスピードが速くなることに注意してください。