web-dev-qa-db-ja.com

sql-dumpとは何ですか?

SQLダンプは、データベース内のすべてのレコードを反映する一連の挿入SQLステートメントであることを私は知っています。しかし、それは何のために使われますか?データベースレコードをダンプする必要があるのはなぜですか?すべてのデータベースはダンプ機能をサポートしていますか?

15
Yang

少し奇妙なことに、これは実際にはデータベースをバックアップする通常の方法です。実際にデータを保持しているファイル自体をコピーすることは、さまざまな複雑な理由から、通常のバックアップ方法ではありません。

すべてのリレーショナルデータベースはこのように機能します。少なくとも、そうでないものは聞いたことがありません。すべてのリレーショナルデータベースには、実行時にデータベースを元の状態と同じ状態で再作成する一連のSQLコードをエクスポートする機能があります。ダンプが開始されたとき。

ただし、これらのさまざまな形式は、さまざまなデータベースシステムで使用されるSQLのさまざまな方言が微妙に異なるため、一般的に互換性がありません。それらの間で変換できるユーティリティがありますが、考えられるすべてのケースを処理する「RosettaStone」を私は知りません。

この手法は、データベースをバックアップする主要な方法であるだけでなく、異なるサーバー間でdbアプリのデータをステージングする場合、つまり開発からテスト、本番までの場合にも役立ちます。

26
intuited

mysqldump は、1つ以上のテーブルまたはデータベースのデータのSQL表現を生成します。形式はSQLであるため、アーキテクチャやメジャー/マイナーバージョンに関係なく、他のMySQLサーバーで実行されます(明らかに、ビューは4.xなどでは機能しませんが、ほとんどの場合、上位互換性があります)。

別のツール mysqlhotcopy がありますが、このツールはバイナリファイルを生成するため、それらが生成されたマシンに関連付けられており、他の場所では使用できません。 SQLには、任意のMySQLサーバーで実行でき、データベースの基盤となるファイルストレージメカニズムから独立しているという利点があります。

SQLをダンプするための2つの主なユースケースは次のとおりです。

  • データベースデータのバックアップ。 SQLは空のデータベースサーバーに読み込む(「再生」)ことができ、テーブルを再作成して行を入力します。
  • データを別のサーバーに移行します。 MySQL5.0から5.1にアップグレードするとします。 2台のマシンがあります。 mysqldumpを使用して5.0マシンでSQLダンプを生成し、それを5.1にフィードします。

あまり一般的ではない用途がいくつかあります。たとえば、アプリケーションのデータベースのSQLスナップショットを取得して、既知の状態に対する単体テストを行うことができます。 SQLコードを別の方言に変換することも可能です。 PostgeSQLまたはSQLite。データを別のデータベースに移植します。

他のデータベースがSQLダンプ機能を提供しているかどうかを尋ねました。ほとんどの場合、答えはイエスです。 PostgreSQLは pg_dump を提供し、SQLiteには.dumpコマンドなど。

3
rjh