MySQLでのbinlogの詳細な分析

MySQLのbinlogとは何ですか?

前の記事の内容を確認する

前回の記事では、InnoDBエンジンのアーキテクチャを紹介し、3つのREDOログログ損失戦略についても触れました。

次に、前の講義の内容を続けて、MySQLのbinlogが何であるかを調べます。

binlogとは何ですか?

前回の講義では、物性に偏ったやり直しログについて学びました。これは、どのデータページとどのレコードにどのような変更が加えられたかを記録し是属于InnoDB所特有的ます。覚えておいてください。皆さんがこれを覚えておいてください。

binlogはアーカイブログと呼ばれ、実行された操作も記録しますが、「usersテーブルのデータをid = 10で更新し、更新された値は「Xiao Ming」である」と同様に、少し異なります。它是属于MySQL Server自己的日志文件

したがって、トランザクションをコミットすると、REDOログがディスクに書き込まれるだけでなく、この操作に対応するbinlogログもディスクファイルに書き込まれます。binlogログはディスクに書き込まれることに注意してください。 InnoDBエンジンを通過しません

ここに画像の説明を挿入

前述のREDOログのフラッシュ戦略と同様に、binlogログにもフラッシュ戦略があります。次の方法を使用して、デフォルトでMySQLを使用している方法を確認できます。

mysql> show variables like '%sync_binlog%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog   | 1     |
+---------------+-------+
1 row in set (0.02 sec)
  • sync_binlog = 0

    このとき、binlogをディスクに書き込むと、実際にはディスクに直接ではなく、osキャッシュメモリキャッシュに書き込まれます。

  • sync_binlog = 1

    トランザクションをコミットすると、binlogは強制的にディスクに書き込まれます。トランザクションがコミットされた後にマシンがダウンしても、ディスク上のbinlogデータは失われません。

binlogを取得した後にトランザクションコミットを完了する方法は?

最終的にトランザクションがコミットされると、トランザクションに対応するbinlogファイルのファイル名とパスがREDOログに書き込まれ、コミットマークが書き込まれます。上記の操作が完了すると、トランザクションは送信されたと見なされます。 。

ここに画像の説明を挿入

この時点で、なぜこの最後のステップを追加するのかと疑問に思うかもしれません。

実際、このステップの目的は、REDOログとbinlogデータの一貫性を確保することです。ステップ5のみが完了した場合、またはステップ5と6のみが完了した場合、ステップ7が実行される前にマシンが突然クラッシュする限り、今回は、REDOログにコミットマークがないため、トランザクションはトランザクションコミット失敗と判断されます。

トランザクションがコミットされた後、ダーティデータはどのようにメモリにフラッシュされますか?

更新が発生すると、トランザクションが正常に送信されると、対応するデータがREDOログログに記録され、コミットによってマークされます。システムがダウンしているかどうかに関係なく、データが失われることはありません。簡単に実行できます。ディスクについて考えてみてください。のデータも遅かれ早かれ更新する必要がありますが、どのように更新されますか?

MySQLには、ダーティデータをディスクにフラッシュすることを特に担当するIOスレッドがあります。これらの操作を実行するためのプレッシャーがそれほど高くない場合は、データベースを選択します。

ここに画像の説明を挿入

そういえば、InnoDBの基本的なアーキテクチャはほぼ同じです。前述の内容を振り返ると、ディスク上のファイルが更新操作中に直接変更されるのではなく、バッファプール、元に戻すログ、やり直しログを介して変更されるのはなぜか疑問に思いました。 、binlog、トランザクションの送信、データのダーティデータの更新を完了するための多くのこと?

ディスク上のファイルを変更するが、バッファプールを介してデータの更新を完了するには、ログの取り消し、ログのやり直し、binlog、トランザクションのコミット、データのダーティなどを実行しますか?

更新操作を実行すると、ディスクへのランダムな読み取りと書き込みが実行されるため、ほとんどの友人が理由を理解できると思います。ディスク上のデータを直接操作すると、速度は非常に遅くなりますが、データをキャッシュします。バッファプールをメモリに基づいて変更すると、速度が大幅に向上します。次に、データのセキュリティを確保するためにREDOログ、binlogログを書き込みます。REDOログを書き込み、binlogがディスクにデータを書き込んでいない場合があります。効率は非常に低いのではないですか?ただし、これはディスク上での操作ですが、順次読み取りと書き込みを行います。ランダムな読み取りと書き込みに比べて、ディスクの順次読み取りと書き込みの効率は非常に高くなります。したがって、InnoDBエンジンは、MySQLデータベースの高い同時実行パフォーマンスと引き換えに、上記の一見複雑な手順を実行します。

おすすめ

転載: blog.csdn.net/weixin_44829930/article/details/111559363