web-dev-qa-db-ja.com

LSN(ログシーケンス番号)とは何ですか? xtrabackup増分バックアップはどのように機能しますか?

xtrabackupが増分バックアップをサポートしていることに驚きました。 xtrabackupはデータファイルをコピーし、データファイルの形式を理解します(内部を確認できます)?ダミーのLSNとは何ですか?私は ログシーケンス番号とは何ですか?それはMySQLでどのように使用されますか? です。

増分バックアップ からの引用

増分バックアップは、LSNが以前の増分または完全バックアップのLSNよりも新しい各ページをコピーします。コピーされるそのようなページのセットを見つけるために使用されている2つのアルゴリズムがあります。すべてのサーバータイプとバージョンで利用できる最初の方法は、すべてのデータページを読み取ることによってページLSNを直接チェックすることです。 Perconaサーバーで利用可能な2番目の機能は、サーバーで変更されたページの追跡機能を有効にすることです。これにより、ページが変更されているときにページが記録されます。この情報は、コンパクトな別のいわゆるビットマップファイルに書き込まれます。 xtrabackupバイナリは、そのファイルを使用して、増分バックアップに必要なデータページのみを読み取るため、多くの読み取り要求が節約される可能性があります。 xtrabackupバイナリがビットマップファイルを見つけた場合、後者のアルゴリズムはデフォルトで有効になります。 xtrabackup --incremental-force-scanを指定して、ビットマップデータが使用可能な場合でもすべてのページを読み取ることができます。

これがどのように機能するのかまだわかりません。 xtrabackup増分バックアップを使用していますか? xtrabackup増分バックアップをお勧めしますか?

1
Ivanov

LSN a.k.a.ログシーケンス番号は、REDOログエントリのバージョンとして機能する8バイトの整数です(ib_logfile*)。データを変更するたびに、REDOログにエントリが作成され、新しいLSNが取得されます。 LSNは変更のたびに増分されます。

すべてのInnoDBインデックスページ(ユーザーデータが格納されている)には、ヘッダーにLSNフィールドがあります。ページを最後に変更したのはLSNです。

そう。最後のLSNがわかっている場合(それをlsn_full)はフルバックアップを行ったときでした。それ以降、特定のページが変更されたかどうかがわかります。ページのLSN(それをlsn_current) よりも高い lsn_full、最後のバックアップ以降にページが変更されました。

Xtrabackupはこのアイデアを使用して、増分バックアップを実装します。実際、Xtrabackupを使用すると、増分バックアップと差分バックアップの両方を実装できます。オプションをチェック--incremental-lsnおよび--incremental-basedir

増分バックアップを使用するかどうかは、プロセス全体に対する自信に依存します。バックアップと復元のプロセスで何が行われているのかを完全に理解していないと、混乱するのは簡単です。 (TwinDBでは、何らかの理由で増分バックアップが使用できない多くのケースに対処する必要があります)。

バックアップを確認することを強くお勧めします。バックアップコピーを使用できるようにする最も信頼できる方法は、データベースからデータベースを復元することです。だから私はアルゴリズムを提案します:

  • 最新のコピーを入手してください。
  • そこに開始MySQLインスタンスを復元します。
  • 最近のデータが含まれているかどうか、テーブルを確認してください。たとえば、データベースにトランザクションを保存する場合は、1日以上前のものがないことを確認してください。
2
akuzminsky