Dalam ciri-ciri ACID urus niaga, atomicity (A), konsistensi (C), dan ketahanan (D) direalisasikan dengan buat asal log dan buat semula log, dan pengasingan (I) direalisasikan dengan kunci + MVCC
buat asal log: Urus niaga belum dilakukan lagi, dan pelaksanaan tidak normal di tengah Anda boleh menggunakan log batal untuk memulihkan data kepada keadaan sebelum pelaksanaan urus niaga untuk memastikan atomicity transaksi
buat semula log: Urus niaga berjaya dilakukan, kerana keperluan untuk mengemas kini data cakera Selepas tempoh masa, jika pengecualian berlaku, anda boleh menggunakan log buat semula untuk melaksanakan semula SQL transaksi ini untuk memastikan ketahanan transaksi ( Selagi komit transaksi berjaya, tidak kira apa kejadian luar biasa yang berlaku, selagi perkhidmatan MySQL berjalan seperti biasa pada masa akan datang, maka data komit terakhir mesti dipulihkan )
log semula: Ia dipanggil log fizikal dan merekodkan data diubah suai akhir yang disimpan mengikut halaman Halaman data menyimpan secara langsung status akhir data dan digunakan untuk memastikan ketahanan transaksi
Log logik, juga dikenali sebagai log asal, merekodkan kandungan khusus pernyataan SQL yang sepadan. Jika sisipan dilaksanakan sekarang, padam akan dilaksanakan apabila melancarkan semula; jika kemas kini dilaksanakan sekarang, nilai lama asal akan dikemas kini semula
Log buat semula akan diletakkan di bawah /var/lib/mysql
secara lalai
Log buat semula mula merekodkan apabila transaksi bermula (ia tidak direkodkan apabila transaksi dilakukan, kerana keseluruhan transaksi boleh melakukan banyak operasi. Jika ia direkodkan hanya apabila urus niaga dilakukan, Tulis log buat semula Apabila pengecualian berlaku pada masa ini, log buat semula belum ditulis Sudah terlambat untuk memastikan ketahanan transaksi itu diserahkan. Apabila pengecualian berlaku (seperti kehilangan data semasa proses kegigihan data) kuasa), InnoDB akan menggunakan log semula untuk memulihkan kepada saat sebelum kegagalan kuasa untuk memastikan integriti data
innodb_log_buffer_size lalai kepada 16M, iaitu saiz penimbal log buat semula Ia mula menulis buat semula apabila urus niaga bermula log, jika transaksi agak besar, untuk mengelakkan menghabiskan terlalu banyak cakera IO semasa pelaksanaan transaksi, anda boleh menyediakan cache log buat semula yang agak besar untuk disimpan. cakera IO. Terdapat masa untuk menyegarkan apabila membilas ke cakera Apabila masa dicapai, cakera IO digunakan Jika penimbal agak besar, masa untuk menyegarkan akan dicapai dengan lebih perlahan dan kecekapan akan lebih tinggi.
InnoDB mengubah suai data operasi secara langsung Ia sebenarnya hanya mengubah suai data dalam Buffer Pool . InnoDB sentiasa merekodkan dahulu perubahan data dalam Kolam Penampan kepada log buat semula untuk pemulihan data selepas ranap sistem. Rakam log buat semula dahulu, dan kemudian cari peluang untuk menyegarkan semula data kotor secara perlahan dalam Kolam Penampan ke cakera.
Dua fail dalam direktori yang ditentukan oleh innodb_log_group_home_dir: ib_logfile0, ib_logfile1, fail ini dipanggil log buat semula
kolam cache kolam penimbal: boleh menyimpan cache indeks, Cache data , dsb., boleh mempercepatkan membaca dan menulis, mengendalikan halaman data secara langsung, menulis pengubahsuaian log semula, dan walaupun ia selesai, akan ada benang khusus untuk menulis halaman kotor dalam kolam penimbal ke cakera
Saiz lalai kolam penimbal ialah 134M ( MySQL 5.7)
Struktur umum adalah seperti yang ditunjukkan dalam rajah:
Bacaan transaksi dan pengubahsuaian semuanya mengutamakan operasi cache Data dalam kumpulan. Dalam projek sebenar, mysqld akan dijalankan pada mesin yang berasingan dan boleh memperuntukkan sejumlah besar memori khusus untuk kumpulan penimbal InnoDB untuk mempercepatkan CRUD
Apabila transaksi dilakukan, operasi pada rajah perhubungan adalah untuk menulis kandungan Penimbal Log InnoDB ke cakera Jika penulisan berjaya, log semula pada cakera akan merekodkan status - commit. jika tidak Jika penulisan berjaya atau selesai, status rekod - sediakan
log juga mungkin mempunyai pengecualian, gangguan bekalan elektrik dan masalah lain semasa proses menulis ke cakera, menyebabkan penulisan log semula tidak sedang diselesaikan (ini Setara dengan urus niaga yang tidak berjaya dilakukan Pada masa ini, MySQL tidak perlu mempertimbangkan integriti urus niaga apabila ia pulih pada masa akan datang, kerana status tidak komit Hanya apabila semuanya ditulis ke cakera adakah ini bermakna log buat semula berjaya ditulis dan status menjadi komit . Selepas status berubah menjadi komit, ciri ACID urus niaga perlu dikekalkan.
Adakah data kotor dalam tinjauan pendapat penimbal (data telah diubah suai) hanya ditulis pada cakera apabila melakukan?
Tidak perlu menunggu komitmen untuk bermula. Jumlah data yang boleh diubah suai oleh urus niaga adalah agak besar, dan kapasiti cache adalah terhad Untuk data yang dicache melalui tinjauan pendapat penimbal, akan ada urutan khusus untuk menyegarkan data pada cakera pada masa yang sesuai bekalan elektrik terputus, apabila MySQL dimulakan, ia akan disegarkan semula mengikut buat semula Data yang direkodkan dalam log dipulihkan.
buat asal log itu sendiri juga direkodkan dalam buat semula log
Log buat asal menyokong pemulangan semula transaksi, dan ia tidak boleh diselesaikan dalam sekelip mata Data pada cakera akhirnya akan diubah suai untuk mengelakkan pengecualian semasa proses pemulangan semula, log buat asal mesti direkodkan dalam buat semula log. Untuk lapisan bawah, selepas operasi berjaya ditulis ke log semula, sama ada transaksi berjaya dilakukan (komit) atau berjaya digulung semula (rollback), ia dianggap berjaya.
Apakah transaksi sebenar melakukan kejayaan?
Daripada membuang semua data ke cakera, log buat semula yang merekodkan operasi lengkap transaksi ditulis daripada penimbal log ke cakera, dan kemudian status data yang diubah suai ditetapkan untuk melakukan Komit transaksi telah berjaya. Walaupun data masih berada dalam tinjauan pendapat penimbal pada masa ini, selagi log ubah semula kami kekal utuh, data itu akan dipulihkan akan ada urutan khusus yang bertanggungjawab untuk menulis data dalam tinjauan pendapat penimbal ke cakera
urus niaga dijalankan Semasa beroperasi, sentiasa tulis log buat semula terlebih dahulu, dan kemudian tulis ke kumpulan penimbal jika transaksi berjaya dilakukan, adalah perlu untuk memastikan bahawa log buat semula direkodkan sepenuhnya pada cakera
Bagi perubahan pada data jadual, halaman data kotor kumpulan penimbal Kami tidak perlu risau sama ada ia disiram ke cakera Selagi log buat semula ditulis sepenuhnya ke cakera , kita boleh menggunakan log buat semula pada bila-bila masa untuk memulihkan status data transaksi yang berjaya dilakukan (Perkara yang paling penting tentang pangkalan data ialah log. bukannya data)
Atas ialah kandungan terperinci Apakah konsep log buat semula MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!