2012-05-22 5 views
7

マニュアルを読みましたが、ダンプを取る前にすべてのトランザクションでBEGINという文が追加されることになりました。誰かがこれをより分かりやすい方法で詳しく説明できますか?シングルトランザクションのmysqldumpは、一貫性のないmysqldumpよりも安定しているのはなぜですか?

このオプションはサーバからデータをダンプする前に、SQL文を発行し、BEGIN:ここ

は、私が読んだものです。それはBEGIN、任意のアプリケーションをブロックせずに発行された時点のデータベースの一貫性のある状態をダンプ ので、唯一のInnoDBといったトランザクションテーブルと便利です。」

この上でいくつかの手の込んだことはできますか?

+1

おそらく助けが必要なマニュアルの特定の部分のリンクや引用符を追加してください。そうでなければ、あなたが知りたいことについて少し推測しています。 – Cylindric

+0

投稿を更新しました。見てください。 – Uday

答えて

23

ダンプは1つのトランザクション内にあるため、データベース内のすべてのテーブルを一貫して表示できます。これはおそらく反例によって最もよく説明されるでしょう。あなたは、単一のトランザクションなしでダンプを開始する二つのテーブル、OrdersOrderLines

  1. でデータベースをダンプすると言います。
  2. 別の処理では、行がOrdersテーブルに挿入されます。
  3. 別のプロセスでは、行がOrderLinesテーブルに挿入されます。
  4. ダンプはテーブルOrderLinesを処理します。
  5. 別の処理では、OrdersOrderLinesレコードが削除されます。
  6. ダンプはテーブルOrdersを処理します。

この例では、ダンプにはOrderLinesの行がありますが、Ordersではありません。データは矛盾した状態になり、OrdersOrderLinesの間に外部キーがある場合、リストアに失敗します。

1つのトランザクションで実行した場合、ダンプは、トランザクションの開始後に両方が挿入された後に削除されたため、順序または行はありません(ただし、一貫性があります)。

+0

あなたは私よりも優れた/明確な例を思いついたと思います。 :) – Cylindric

+1

その本当に良い説明..ありがとうエリック..私は疑いがあります。私のダンプが何時間もかかる場合、その1時間の間にトランザクションはどうですか?ダンプが完了すると、それらはバッファに格納され、ディスクにフラッシュされますか?どのように起こるか...? – Uday

5

ダンプ中にデータが変更されたために、--single-transactionパラメータを指定しないでmysqldumpが一貫して失敗する問題に遭遇しましたが、私が理解できる限り、1回のトランザクションで実行すると、ダンプ中に発生した変更は問題を引き起こすことはありません。本質的には、--single-transactionを発行すると、その時点でデータベースのスナップショットを取得していて、dumpinではなくダンプしていますgデータは、ユーティリティの実行中に変更される可能性があります。

+0

ダンプ中に、すべてのトランザクションはbuufersでのみ発生し、ダンプが完了するまでディスクに反映されません。 – Uday

+0

スナップショットをメモリや一時テーブルにコピーしてからダンプすると思います。 –

+1

@Udayすべての種類の要因に依存するため、*どのように*それを行うのか心配しないでください。このコンセプトは、MySQL、MSSQL、Oracleなど、さまざまな種類のエンジンで同じです。 – Cylindric

5

これはバックアップのために重要なことがあります。これは、すべてのデータを1つの時点で正確に取得することを意味するためです。

したがって、たとえば、簡単なブログのデータベースを想像し、活動の典型的なビットが削除ユーザーを削除するユーザー

  • で新しい投稿を作成し、新しいユーザー
    1. 作成される可能性がありますポスト

    今ときにデータベースをバックアップ、バックアップしてもよいバックアップの順にテーブル

    1. 投稿
    2. ユーザー

    誰かがバックアップが1位になった直後の記事、によって要求されたユーザーを、削除した場合はどうなりますか?

    データを復元すると、投稿はありますが、そのユーザーはバックアップに存在しません。

    トランザクション全体を処理するということは、バックアップ中にデータベース上で発生したすべての更新、挿入、および削除がバックアップによって認識されないことを意味します。

  • 関連する問題