web-dev-qa-db-ja.com

rsyncを使用してオンラインでデータベースをバックアップすることは可能ですか?

Rsyncを使用してオンザフライでバックアップデータベースを作成することが可能であると言う人もいます。一部のログ、バッファ...がフラッシュされないため、それは可能ではあるが安全ではないと思います。バックアップからデータベースをリカバリしていますが、一貫性がありません。

実際、rsyncを使用したバックアップが安全でない理由はわかりません。誰かが理由でmysqlの基礎を説明できますか?

5
Luke Nguyen

InnoDBに関しては、心配する必要があります。

これはInnoDBの図解です(Percona CTO Vadim Tkachenko作)。

InnoDB Internal Plumbing

図の左側全体は、メモリ内のInnoDBの可動部分を表しています。ここで重要なのはInnoDBバッファープールです。

InnoDBバッファープールは3つのものを保持します

  • データページ:ページがダーティである場合、最終的に.ibdファイルに書き込まれます
  • インデックスページ:ページがダーティである場合、最終的に.ibdファイルに書き込まれます
  • セカンダリインデックスの変更:一意でないインデックスに関連するダーティインデックスページがibdata1に書き込まれる

更新されたページも、ibdata1内の二重書き込みバッファーに事前に書き込まれます。

Datadirのすべてをrsyncすると、移動するファイルが多すぎます

  • ibdata1自体には可動部分があります
    • 二重書き込みバッファ
    • インセットバッファー
    • ロールバックセグメント
    • ログを元に戻す
  • REDOログ(ib_logfile0およびib_logfile1)
  • 更新されるすべての.ibdファイル

バックアップするためにdatadirをrsyncする必要があり、それをセットアップしてmysqlを開始しようとした場合、最良のシナリオは、クラッシュリカバリー、二重書き込みバッファーと挿入バッファーを使用したデータおよびインデックスページの初期修復、およびいくつかの再生です。 REDOログから。これにより、クラッシュリカバリで保存できるすべてのデータがロールフォワードされます。

Rsyncがすでにそれを渡した場合、rsyncが二重書き込みバッファーと挿入バッファーに書き込まれていないダーティページを失う可能性があると言っても過言ではありません。

バックアップのためのrsyncの実行に関する投稿を書いています

Rsyncを実行したい場合は、次のスクリプトを使用できます mysqldumpを使用せずにMySqlサーバーのデータを複製するにはどうすればよいですか ただし、すべての可動部分を適切にフラッシュする必要があります

バックアップの約10分前に、ダーティーページが集合的にフラッシュするようにバッファープールを設定します。

SET GLOBAL innodb_max_dirty_pages_pct = 0;

次に、rsyncを開始する直前に、次のコマンドを実行します

FLUSH LOGS;
FLUSH TABLES WITH READ LOCK;
SELECT CONNECTION_ID() ID_With_Lock;
SELECT SLEEP(86400);

この時点でrsyncを実行することもできますが、新しいトランザクションはバッファープールに保持され、別のセッションでMySQLにログインしてプロセスID(ID_With_Lock)を強制終了するまでディスクにコミットされません。

エピローグ

細心の注意を払って取り扱うと、適切なrsyncバックアップが可能です。 Percona XtraDBクラスターには、Galeraクラスターに新しいノードを追加する3つのモード(xtrabackup、mysqldump、rsync)

Rsyncバックアップの実行に自信がない場合は、mysqldump --single-transactonを実行し、binlogイベントを取得してデータをコピーし、必要な時点にロールフォワードすることをお勧めします。また、Percona XtraBackupを使用して、手間のかかる作業を行うこともできます。

8
RolandoMySQLDBA

同様の質問に対する私の回答を見てみましょう ここここ および ここ 。基本的に、それは非常に単純です。データベースは、RAMとCPUに同時にディスク上にあるコンポーネントを持つ動的エンティティです。あらゆる種類のバッファとキャッシュが満たされ、空にされ、ディスク、RAMとCPUの間で切り替えます。

InnoDBはMVCCエンジンであり、バックアップソフトウェアが特定の瞬間に「スナップショット」を取得できるようにします(バックアップの実行中もdbが機能し続けることができます)。 MyISAMでは、バックアップの取得中はデータベースをアクティブにできません。

ここで、データベースファイル、バッファ、およびキャッシュを単にコピーして、[〜#〜]一貫性を保つためにディスクに配置する必要がある場合は、[〜#〜]作成されるデータベースコピー(つまり、特定の時点でコヒーレントなもの)は[〜#〜]ではありません[〜#〜](必要に応じて)ディスク上。これが、バックアップの一貫性と破損のないことを保証するさまざまなユーティリティ( PerconaのXtraBackup および Amanda Network Ba​​ckup )が開発された理由です。再起動の作業(およびPITR-ポイントインタイムリカバリ-シナリオで使用)。

他に何もない場合は、なぜ非常にインテリジェントな人々が単にrsyncに依存するのではなく、これらのプログラムを作成するのに苦労したのか、自分自身に質問してください。単純なcpを実行しないのはなぜですか?

4
Vérace