SQLダンプは、データベース内のすべてのレコードを反映する一連の挿入SQLステートメントであることを私は知っています。しかし、それは何のために使われますか?データベースレコードをダンプする必要があるのはなぜですか?すべてのデータベースはダンプ機能をサポートしていますか?
少し奇妙なことに、これは実際にはデータベースをバックアップする通常の方法です。実際にデータを保持しているファイル自体をコピーすることは、さまざまな複雑な理由から、通常のバックアップ方法ではありません。
すべてのリレーショナルデータベースはこのように機能します。少なくとも、そうでないものは聞いたことがありません。すべてのリレーショナルデータベースには、実行時にデータベースを元の状態と同じ状態で再作成する一連のSQLコードをエクスポートする機能があります。ダンプが開始されたとき。
ただし、これらのさまざまな形式は、さまざまなデータベースシステムで使用されるSQLのさまざまな方言が微妙に異なるため、一般的に互換性がありません。それらの間で変換できるユーティリティがありますが、考えられるすべてのケースを処理する「RosettaStone」を私は知りません。
この手法は、データベースをバックアップする主要な方法であるだけでなく、異なるサーバー間でdbアプリのデータをステージングする場合、つまり開発からテスト、本番までの場合にも役立ちます。
mysqldump は、1つ以上のテーブルまたはデータベースのデータのSQL表現を生成します。形式はSQLであるため、アーキテクチャやメジャー/マイナーバージョンに関係なく、他のMySQLサーバーで実行されます(明らかに、ビューは4.xなどでは機能しませんが、ほとんどの場合、上位互換性があります)。
別のツール mysqlhotcopy がありますが、このツールはバイナリファイルを生成するため、それらが生成されたマシンに関連付けられており、他の場所では使用できません。 SQLには、任意のMySQLサーバーで実行でき、データベースの基盤となるファイルストレージメカニズムから独立しているという利点があります。
SQLをダンプするための2つの主なユースケースは次のとおりです。
あまり一般的ではない用途がいくつかあります。たとえば、アプリケーションのデータベースのSQLスナップショットを取得して、既知の状態に対する単体テストを行うことができます。 SQLコードを別の方言に変換することも可能です。 PostgeSQLまたはSQLite。データを別のデータベースに移植します。
他のデータベースがSQLダンプ機能を提供しているかどうかを尋ねました。ほとんどの場合、答えはイエスです。 PostgreSQLは pg_dump を提供し、SQLiteには.dump
コマンドなど。