はじめに
リレーショナルデータベースでは、データベーススキーマはデータベースの構造と、テーブル、フィールド、インデックスなどの構成要素を定義します。この情報を抽出およびエクスポートすることは、バックアップ、新しい環境への移行、データ構造の視覚化、およびコードベース内でのこれらの構造の管理など、多くのシナリオで役立ちます。
このショートガイドでは、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_reporter
という制限付きユーザーを使用して、SALES
というデータベースのスキーマを次のようなコマンドでエクスポートできます。
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 データベースコネクタを使用してデータを管理できます。