はじめに
リレーショナルデータベースでは、データベーススキーマはデータベースとその構成要素(テーブル、フィールド、インデックスなど)の構造を定義します。この情報を抽出およびエクスポートすることは、バックアップ、新しい環境への移行、データ構造の視覚化、コードベース内でのこれらの構造の管理など、多くのシナリオで役立ちます。
この短いガイドでは、mysqldump
コマンドを使用してMySQLデータベーススキーマをエクスポートする方法について説明します。このユーティリティはMySQLからさまざまな種類のデータをエクスポートできますが、このガイドではデータ構造自体を抽出することに焦点を当てます。
Prismaを使用している場合、MySQLデータベースコネクタを使用してMySQLサーバーに接続し、データを管理できます。
基本的な使用法
MySQLからデータベーススキーマをエクスポートするために必要な基本的なコマンドは次のとおりです。
mysqldump --user=USERNAME --host=HOSTNAME --password --no-data DATABASE > schema.sql
ここでのオプションは2つの異なるカテゴリに分けられます。
最初のカテゴリは、MySQLユーティリティに接続するために提供する必要がある一般的な基本接続情報を定義します。
--user=
/-u
: 認証に使用したいデータベースユーザー名--password
/-p
:mysqldump
に認証用のパスワード入力を強制する--host=
/-h
: MySQLが配置されているホスト名またはIPアドレス--port=
/-p
: MySQLがリッスンしているポート番号
デフォルト設定で実行されているローカルMySQLインスタンスに接続している場合、通常はホストとポートのオプションを省略できます。
2番目のカテゴリは、mysqldump
に何をエクスポートするかを指示します。
--no-data
/-d
: これは、ユーティリティが構造自体のみをエクスポートし、含まれるレコードはエクスポートしないことを指示します。
さらに、最初の非オプション引数(ここでは「DATABASE」という単語で表される)は、エクスポートする正確なデータベースを示します。
この情報を使用して、SALES
というデータベースのスキーマを、sales_reporter
という制限付きユーザーで次のようなコマンドでエクスポートできます。
mysqldump --user=sales_reporter --password --no-data SALES > sales_database_schema.sql
エクスポート動作の変更
上記で説明した基本的な使用法では、該当するデータベースに関連するすべての構造が出力されます。この動作は、いくつかの追加オプションで変更できます。
複数のデータベースを対象とする
エクスポートが対象とするデータベースの数は、次のいずれかのオプションで変更できます。
--databases
/-B
: すべての名前引数をデータベース名として扱います。これにより、複数のデータベースから同時にスキーマをエクスポートできます。--all-databases
/-A
: MySQL内のすべてのデータベースをエクスポートします(内部で使用されるperformance_schema
データベースを除く)。
したがって、すべてのデータベースをダンプするには、これを使用できます。
mysqldump --user=USERNAME --password --no-data --all-databases > all_schemas.sql
または、3つの異なるデータベースから構造をダンプするには、これを使用できます。
mysqldump --user=USERNAME --password --no-data --databases FIRST SECOND THIRD > three_db_schemas.sql
特定の構造のみをエクスポートする
データベース名の後にエクスポートする特定のテーブルを追加引数として指定することで、エクスポートされる構造を減らすこともできます。
例えば、SALES
データベースの3つのテーブルがEMPLOYEE
、STORE
、INVENTORY
である場合、次のように入力することでこれらの構造のみをエクスポートできます。
mysqldump --user=USERNAME --password --no-data SALES EMPLOYEE STORE INVENTORY > some_sales_tables.sql
この構文では、最初の引数は常にデータベース名であると見なされ、追加の名前付き引数はすべてそのデータベース内のテーブルであると解釈されます。このため、この使用法は、mysqldump
が追加の引数を解釈する方法を変更する--databases
オプションとは互換性がありません。
追加の構造をエクスポートする
データベースとテーブルに加えて、これらのオプションを含めることで、イベントとルーチンの定義を明示的にエクスポートすることもできます。
--routines
/-R
: エクスポートされるスキーマダンプにストアドプロシージャと関数を含める--events
/-E
: 出力にイベントスケジューラのイベント定義を含める
例えば、これらの追加定義を含むデータベースSALES
のダンプを含めるには、次のように入力します。
mysqldump --user=USERNAME --password --no-data --routines --events SALES > all_sales_schemas.sql
その他の関連オプション
目標によっては役立つ可能性のある追加オプションをいくつか紹介します。
--add-drop-database
: 各CREATE DATABASE
ステートメントの前に、ダンプファイルにDROP DATABASE
ステートメントを追加します。これにより、特定のデータベースに対して以前に定義された構造が最初に削除され、競合が回避されます。--single-transaction
: InnoDBのようなストレージエンジンでより一貫したデータベース状態を確保するために、トランザクション分離レベルを「リピータブルリード」に設定します。これにより、ダンプが初期化された時点のデータベースのスナップショットがダンプされます。
これらのオプションは、他のコンポーネントの基本的なセマンティクスや意味を変更することなく、スキーマダンプコマンドに追加できます。
結論
スキーマをエクスポートできると、データベース構造をデータベース自体とは別に保存できます。これは、新しい環境をセットアップする際、ニーズの変化に合わせてスキーマを進化させる際、および保存している情報の構造を視覚化する際に役立ちます。
Prismaを使用している場合、MySQLデータベースコネクタを使用してMySQLサーバーに接続し、データを管理できます。