Rumah >pangkalan data >tutorial mysql >Bagaimana untuk menyediakan fail log mysql buat asal log dan buat semula log
Log buat asal digunakan untuk menyimpan data sebelum itu diubahsuai, dengan mengandaikan bahawa data baris dengan id=2 dalam jadual tba diubah suai dan Name='B' ditukar kepada Name = 'B2', maka log buat asal akan digunakan untuk menyimpan rekod Name=' B'. Jika terdapat pengecualian dalam pengubahsuaian ini, Anda boleh menggunakan batal log untuk melaksanakan operasi rollback dan memastikan konsistensi transaksi.
Operasi perubahan data terutamanya datang daripada INSERT UPDATE DELETE, dan UNDO LOG terbahagi kepada dua jenis Satu ialah INSERT_UNDO (operasi INSERT), yang merekodkan nilai kunci unik yang dimasukkan; yang satu lagi ialah UPDATE_UNDO dan operasi DELETE), rekod nilai kunci unik yang diubah suai dan rekod lajur lama.
Id | Nama | ||||||||||
1 | A | ||||||||||
2 | B | ||||||||||
3 | C td> | ||||||||||
4 |
|
Tetapan parameter buat asal berkaitan MySQL termasuk yang berikut:
mysql> show global variables like '%undo%'; +--------------------------+------------+ | Variable_name | Value | +--------------------------+------------+ | innodb_max_undo_log_size | 1073741824 | | innodb_undo_directory | ./ | | innodb_undo_log_truncate | OFF | | innodb_undo_logs | 128 | | innodb_undo_tablespaces | 3 | +--------------------------+------------+ mysql> show global variables like '%truncate%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | innodb_purge_rseg_truncate_frequency | 128 | | innodb_undo_log_truncate | OFF | +--------------------------------------+-------+
innodb_max_undo_log_size
innodb_undo_tablespaces
Bilakah anda perlu menetapkan parameter ini?
Apabila tekanan penulisan DB tinggi, anda boleh menyediakan ruang jadual UNDO bebas, asingkan UNDO LOG daripada fail ibdata dan tentukan direktori innodb_undo_directory untuk penyimpanan Ia boleh dikonfigurasikan pada a cakera berkelajuan tinggi untuk mempercepatkan prestasi membaca dan menulis UNDO LOG.innodb_undo_log_truncate
Premis untuk parameter ini berkuat kuasa ialah ruang jadual bebas telah disediakan dan bilangan ruang jadual bebas lebih besar daripada atau sama dengan 2.
Dalam proses pangkas buat asal fail log, utas pembersihan perlu menyemak sama ada terdapat transaksi aktif pada fail Jika tidak, fail log batal perlu ditandakan sebagai tidak boleh diperuntukkan , undo log akan direkodkan ke fail lain, jadi sekurang-kurangnya 2 fail ruang jadual bebas diperlukan untuk melaksanakan operasi truncate Selepas menandakannya sebagai tidak boleh diperuntukkan, fail bebas undo_innodb_purge_rseg_truncate_frequency
Segmen putar balik diperuntukkan menggunakan penjadualan undian Jika ruang jadual bebas disediakan, segmen buat asal dalam segmen ruang jadual sistem tidak akan digunakan, tetapi ruang bebas akan digunakan , pada masa yang sama, jika segmen lihat kembali berada dalam operasi Truncate, ia tidak diperuntukkan.
Apabila pangkalan data mengubah suai data , halaman data perlu dibaca dari cakera ke dalam kumpulan penimbal, dan kemudian diubah suai dalam kumpulan penimbal Pada masa ini, halaman data dalam kumpulan penimbal akan tidak konsisten dengan kandungan halaman data pada halaman data dalam kolam penampan dipanggil halaman kotor Data, jika perkhidmatan DB dimulakan semula yang tidak normal berlaku pada masa ini, maka data itu belum lagi berada dalam memori dan belum disegerakkan ke fail cakera (perhatikan bahawa penyegerakan ke fail cakera adalah. IO rawak), iaitu, kehilangan data akan berlaku Jika kali ini, apabila terdapat fail, apabila halaman data dalam kumpulan penimbal ditukar, rekod pengubahsuaian yang sepadan boleh direkodkan ke fail ini (perhatikan bahawa rakaman log adalah. IO berurutan), kemudian apabila perkhidmatan DB ranap dan DB dipulihkan, Ia juga boleh digunakan semula pada fail cakera berdasarkan kandungan rakaman fail ini, dan data akan kekal konsisten.
Fail ini ialah log buat semula, yang digunakan untuk merekod data yang diubah suai mengikut turutan. Ia boleh membawa faedah ini:
Apabila halaman kotor dalam kumpulan penimbal belum dimuatkan semula ke cakera, ranap berlaku selepas memulakan perkhidmatan, anda boleh mengetahui perkara yang perlu diperbaharui melalui log buat semula.
Data dalam kumpulan penimbal disalurkan terus ke fail cakera, yang merupakan IO rawak dan mempunyai kecekapan yang lemah data dalam kumpulan penimbal ke log buat semula ialah IO berurutan boleh meningkatkan kelajuan penyerahan urus niaga; ='B' ditukar kepada Name = 'B2', kemudian Log buat semula akan digunakan untuk menyimpan rekod dengan Name='B2' Jika pengecualian berlaku apabila pengubahsuaian ini disalurkan ke fail cakera, log buat semula boleh digunakan untuk melaksanakan operasi buat semula untuk memastikan ketahanan transaksi.
Id | Nama |
1 | A |
2 | B |
3 | C td> |
4 | D |
Perhatikan di sini perbezaan antara log buat semula dan log binari dijana oleh lapisan enjin storan, manakala log binari dijana oleh lapisan pangkalan data. Katakan transaksi besar memasukkan 100,000 baris rekod ke dalam tba Semasa proses ini, rekod secara berterusan direkodkan secara berurutan dalam log buat semula, tetapi log perduaan tidak akan merekodkan Hanya apabila urus niaga dilakukan, ia akan ditulis ke fail log perduaan di sekali. Terdapat tiga format rakaman berbeza yang tersedia untuk log binari, iaitu baris, pernyataan dan campuran, dan borang rakaman antaranya adalah berbeza.
innodb_log_files_in_group
Laluan storan fail
innod_log
Kawasan cache Log Semula, lalai 8M, boleh ditetapkan kepada 1-8M. Tangguhkan penulisan log urus niaga ke cakera, masukkan log buat semula ke dalam penimbal, dan kemudian siram log daripada penimbal ke cakera mengikut tetapan parameter innodb_flush_log_at_trx_commit.
Nota: Disebabkan isu dasar penjadualan proses, "melakukan operasi flush (flush ke cakera) sekali sesaat" tidak menjamin 100% "sesaat" .
buat semulaib_logfile[number]
Andaikan terdapat dua data A dan B, masing-masing dengan nilai 1 dan 2 Mulakan a urus niaga. Kandungan operasi transaksi ialah: tukar 1 Ubah suai kepada 3 dan 2 kepada 4, maka rekod sebenar adalah seperti berikut (dipermudahkan):
F. Ubah suai B =4.
G. Rekod B=4 untuk buat semula log.
H. Tulis buat semula log pada cakera.
I. Penyerahan transaksi
3.2 Impak IOTujuan utama mereka bentuk Undo + Redo adalah untuk meningkatkan prestasi input dan output serta meningkatkan pemprosesan kapasiti pangkalan data. Dapat dilihat bahawa B D E G H adalah semua operasi baharu, tetapi B D E G ditimbal ke kawasan penimbal Hanya G menambah operasi IO Untuk memastikan Redo Log boleh mempunyai prestasi IO yang lebih baik, reka bentuk Log Redo InnoDB mempunyai Ciri-ciri berikut:
B. Cuba pastikan Redo Log disimpan dalam ruang berterusan. Oleh itu, ruang fail log akan diperuntukkan sepenuhnya apabila sistem dimulakan buat kali pertama. Untuk meningkatkan prestasi, Redo Log akan direkodkan dalam cara IO berurutan dan dilengkapkan dengan cara langkah demi langkah.
B. Tulis log dalam kelompok. Log tidak ditulis terus ke fail, tetapi terlebih dahulu ditulis ke penimbal log semula Apabila log perlu dibuang ke cakera (seperti penyerahan transaksi), banyak log ditulis ke cakera bersama-sama > C. Urus niaga serentak Berkongsi ruang storan Redo Log, Redo Log mereka direkodkan bersama secara bergilir-gilir mengikut susunan pelaksanaan penyata untuk mengurangkan ruang yang diduduki oleh log. Contohnya, kandungan rekod dalam Log Buat Semula mungkin seperti berikut:
Rekod 1:Rekod 2:Rekod 3:
Rekod 4:
Rekod 5:
D. Kerana C, apabila transaksi menulis Log Semula pada cakera, log transaksi lain yang tidak terikat juga akan ditulis pada cakera.
E. Hanya operasi tambah berurutan dilakukan pada Log Buat Semula Apabila transaksi perlu ditarik balik, rekod Log Buat Semulanya tidak akan dipadamkan daripada Log Buat Semula.
3.3 PemulihanA. Apabila memulihkan, hanya buat semula transaksi yang dilakukan.
Apabila pulih, semua urus niaga perlu dilaksanakan semula, termasuk urus niaga tanpa komitmen dan urus niaga yang ditarik balik. Kemudian gulung semula
urus niaga tidak komited melalui Undo Log.
Enjin storan InnoDB pangkalan data MySQL menggunakan strategi B.
Mekanisme pemulihan dalam enjin storan InnoDB mempunyai beberapa ciri: A. Apabila membuat semula Log Buat Semula, dan
Tidak mengambil berat tentang transaksi. Semasa pemulihan, tiada tingkah laku BEGIN, COMMIT atau ROLLBACK. Tidak kira transaksi yang mana setiap log milik. Walaupun kandungan berkaitan transaksi seperti ID transaksi akan direkodkan dalam Log Buat Semula, kandungan ini hanya dianggap sebagai sebahagian daripada data yang akan dikendalikan. B. Apabila menggunakan strategi B, Undo Log mesti diteruskan dan Undo Log yang sepadan mesti ditulis pada cakera sebelum menulis Redo Log. Hubungan antara Undo dan Redo Log ini menjadikan kegigihan menjadi rumit. Untuk mengurangkan kerumitan, InnoDB menganggap Undo Log sebagai data, jadi operasi merekod Undo Log juga akan direkodkan dalam redo log. Dengan menyimpan log buat asal dalam memori, keperluan menulis semula log ke cakera sebelum menulisnya dielakkan.
Log Buat Semula yang mengandungi operasi Buat Asal Log kelihatan seperti ini:Rekod 1:Buat asal sisipan log
> ; Rekod 2: Rekod 3: Buat asal sisipan log
> Rekod 4: Rekod 5:
Buat asal sisipan log> Rekod 6: < ;trx3 , padam …>
C. Pada ketika ini, masih terdapat isu yang belum dijelaskan. Memandangkan Buat Semula bukan transaksional, bukankah mungkin untuk melaksanakan semula transaksi terbalik?
Memang benar. Pada masa yang sama, Innodb juga akan merekodkan operasi semasa rollback transaksi ke log buat semula. Apabila operasi rollback dilakukan, pengubahsuaian pada data direkodkan dalam Redo Log, kerana operasi rollback pada dasarnya juga mengubah suai data.
Log Buat Semula bagi transaksi yang digulung semula kelihatan seperti ini:
Rekod 1:…>
Rekod 3:
…>
Rekod 5:
…>
Rekod 7:
Rekod 8:
Atas ialah kandungan terperinci Bagaimana untuk menyediakan fail log mysql buat asal log dan buat semula log. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!