MySQL / ショートガイド

MySQL でデータベースとテーブルのスキーマをエクスポートする方法

シェア:

はじめに

リレーショナルデータベースでは、データベーススキーマはデータベースの構造と、テーブル、フィールド、インデックスなどの構成要素を定義します。この情報を抽出およびエクスポートすることは、バックアップ、新しい環境への移行、データ構造の視覚化、およびコードベース内でのこれらの構造の管理など、多くのシナリオで役立ちます。

このショートガイドでは、mysqldump コマンドを使用して 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 つが EMPLOYEESTORE、および 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 などのストレージエンジンでより一貫性のあるデータベース状態を確保するのに役立ちます。これにより、ダンプが初期化された時点のデータベースのスナップショットがダンプされます。

これらのオプションは、他のコンポーネントの基本的なセマンティクスや意味を変更することなく、スキーマダンプコマンドに追加できます。

結論

スキーマをエクスポートできることで、データベース構造をデータベース自体の外部に保存できます。これは、新しい環境をセットアップしたり、ニーズの変化に合わせてスキーマを進化させたり、保存している情報の構造を視覚化したりするのに役立ちます。

著者について
Justin Ellingwood

Justin Ellingwood

Justin は、2013 年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。彼は現在、妻と 2 羽のウサギと一緒にベルリンに住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって安心です。