あなたは間違いなくここで正しい方向に進んでいます。
InnoDBがコミットする必要のあるトランザクションを実行するときは常に、2フェーズコミットとして実行されます。トランザクションは最初にこれらのログに書き込まれます。次に、そこからコミットします。
これは、MySQLのクラッシュやサーバーのクラッシュが発生した場合に大いに役立ちます。
mysqlを再起動すると、ib_logfile0とib_logfile1のコミットされていないすべてのエントリが、InnoDBのクラッシュリカバリの一部として再生され、InnoDBが調和のとれた状態になります(これは、ACIDコンプライアンス )
ib_logfile0とib_logfile1を削除してmysqlを起動すると、これらのファイルに含まれているコミットされていないトランザクションはすべて失われます。クラッシュリカバリサイクル中に、ログファイルが欠落している場合、ログファイルは innodb_log_file_size 設定。
詳細については、MySQLドキュメントを参照してください。 InnoDBの説明 。
@karatedog InnoDBのMVCC部分は、ibdata1としてよく知られているシステムテーブルスペース内で発生します。トランザクションの開始前に表示されるデータはすべて記録され、更新が適用される前に、必要な行にアクセスする他のユーザーがデータを表示できるようにします。これにより、REPEATABLE-READと呼ばれるものが可能になります。これは、ACID準拠のIに該当します。つまり、分離を意味します。トランザクション分離が良い、悪い、または醜いさまざまなシナリオに関して、DBAStackExchangeにこれに関する投稿を書きました。
MyISAMの場合、クラッシュリカバリは自動ではありません。かなり簡単にクラッシュします
。そのため、SQLコマンドREPAIR TABLE
存在します。これが、MySQLユーティリティmyisamchk
の理由でもあります。 -r
があります REPAIR TABLE
を実行するオプション オンラインではないMyISAMテーブルの場合。
MariaDBとAria MyISAMの代わりにクラッシュセーフなストレージエンジンを作成する試みがなされてきました。