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というデータベースのスキーマを、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つのテーブルがEMPLOYEESTOREINVENTORYである場合、次のように入力することでこれらの構造のみをエクスポートできます。

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

ジャスティン・エリングウッド

ジャスティンは2013年からデータベース、Linux、インフラストラクチャ、開発者ツールについて執筆しています。現在は妻と2羽のウサギとともにベルリンに住んでいます。彼は通常、三人称で書く必要がないため、関係者全員にとって安心です。
© . All rights reserved.