Artikel ini membawa anda pengetahuan yang berkaitan tentang proses menulis Log Binari dalam mysql, termasuk isu yang berkaitan dengan "sync_binlog", "binlog_cache_size" dan "max_binlog_cache_size".
Mari kita lihat dulu penerangan dokumen rasmi tentang konfigurasi sync_binlog.
命令行格式 | --sync-binlog=# |
系统变量 | sync_binlog |
影响范围 | Global |
动态的 | Yes |
SET_VAR提示适用 | No |
类型 | Integer |
默认值 | 1 |
最小值 | 0 |
最大值 | 2^32=4294967295 |
Kawal kekerapan pelayan MySQL menyegerakkan log binari ke cakera.
sync_binlog=0: Melumpuhkan pelayan MySQL daripada menyegerakkan log binari ke cakera. Sebaliknya, pelayan MySQL bergantung pada sistem pengendalian untuk membuang log binari ke cakera dari semasa ke semasa, sama seperti ia akan melakukan mana-mana fail lain. Tetapan ini memberikan prestasi terbaik, tetapi sekiranya berlaku kegagalan kuasa atau ranap sistem pengendalian, pelayan mungkin telah melakukan transaksi yang masih belum dibuang.
sync_binlog=1: Dayakan penyegerakan log binari ke cakera sebelum melakukan transaksi. Ini adalah tetapan paling selamat, tetapi mungkin mempunyai kesan negatif terhadap prestasi disebabkan peningkatan penulisan cakera. Sekiranya berlaku kegagalan kuasa atau kemalangan sistem pengendalian, urus niaga yang hilang dalam log binari hanya dalam keadaan yang disediakan. Ini membolehkan pemulihan automatik biasa untuk melancarkan urus niaga, sekali gus menjamin urus niaga tidak akan hilang daripada log binari.
sync_binlog=N, iaitu nilai selain daripada 0 atau 1: Selepas N kumpulan penyerahan log binari dikumpulkan, log binari akan disegerakkan ke cakera. Sekiranya berlaku kegagalan kuasa atau ranap sistem pengendalian, pelayan mungkin telah melakukan transaksi yang masih belum dialihkan ke log binari. Tetapan ini mungkin mempunyai kesan negatif terhadap prestasi disebabkan peningkatan penulisan cakera. Nilai yang lebih tinggi meningkatkan prestasi tetapi meningkatkan risiko kehilangan data.
InnoDB
Untuk mendapatkan ketahanan dan ketekalan yang terbaik dalam persediaan replikasi yang digunakan dengan transaksi, gunakan persediaan berikut:
RingkasanAMARAN
Banyak sistem pengendalian dan beberapa perkakasan cakera menipu semasa curahan ke cakera beroperasi. Mereka mungkin memberitahu mysqld bahawa penyegaran telah berlaku walaupun ia belum berlaku lagi. Dalam kes ini, ketahanan transaksi tidak dijamin walaupun dengan tetapan yang disyorkan, dan dalam kes yang paling teruk, gangguan bekalan elektrik mungkin merosakkan data anda. Menggunakan cache cakera bersandarkan bateri dalam pengawal cakera SCSI atau cakera itu sendiri mempercepatkan penyegaran fail dan menjadikan operasi lebih selamat. Anda juga boleh cuba melumpuhkan caching penulisan cakera dalam cache perkakasan.
InnoDB
Saiz penimbal memori untuk menyimpan log binari berubah semasa transaksi. Nilai mestilah gandaan 4096.
Apabila pengelogan binari didayakan pada pelayan (pembolehubah sistem log_bin ditetapkan kepada HIDUP), setiap pelanggan diperuntukkan cache log binari jika pelayan menyokong sebarang enjin storan transaksi. Jika data transaksi melebihi ruang dalam penimbal memori, lebihan data disimpan dalam fail sementara. Apabila penyulitan log binari aktif pada pelayan, penimbal memori tidak disulitkan, tetapi (bermula dengan MySQL 8.0.17) mana-mana fail sementara yang digunakan untuk menyimpan cache log binari disulitkan. Selepas setiap transaksi dilakukan, cache log binari ditetapkan semula dengan mengosongkan penimbal memori dan memotong fail sementara (jika digunakan).
Jika anda kerap menggunakan transaksi yang besar, anda boleh meningkatkan saiz cache ini untuk prestasi yang lebih baik dengan mengurangkan atau menghapuskan keperluan untuk menulis fail sementara. Binlog_cache_use (pembolehubah status perkhidmatan - bilangan transaksi menggunakan cache Log Binari) dan Binlog_cache_disk_use (pembolehubah status perkhidmatan - bilangan transaksi menggunakan cache log binari sementara tetapi melebihi nilai binlog_cache_size dan menggunakan fail sementara untuk menyimpan penyata transaksi.) pembolehubah status boleh digunakan untuk melaraskan saiz pembolehubah ini. Lihat Bahagian 5.4.4, “Log Perduaan”.
binlog_cache_size
Hanya menetapkan saiz cache transaksi; saiz cache penyata dikawal oleh pembolehubah sistem binlog_stmt_cache_size.
命令格式 | --max-binlog-cache-size=# |
系统变量 | max_binlog_cache_size |
范围 | Golbal |
动态的 | Yes |
SET_VAR提示适用 | No |
类型 | Integer |
默认值 | 2^64=18446744073709547520 |
最小值 | 4096 |
最大值 | 2^64=18446744073709547520 |
块大小 | 4096 |
Jika transaksi memerlukan lebih daripada banyak bait memori ini, pelayan akan menjana transaksi berbilang penyata yang memerlukan lebih daripada 'max_binlog_cache_size' bait ralat storan. Nilai minimum ialah 4096. Nilai maksimum yang mungkin ialah 16EiB (exbibait). Nilai maksimum yang disyorkan ialah 4GB ini kerana MySQL pada masa ini tidak boleh mengendalikan lokasi log binari yang lebih besar daripada 4GB. Nilai mestilah gandaan 4096.
max_binlog_cache_size
Hanya menetapkan saiz cache transaksi; had atas cache penyata dikawal oleh pembolehubah sistem max_binlog_stmt_cache_size.
Keterlihatan sesi max_binlog_cache_size
sepadan dengan keterlihatan pembolehubah sistem binlog_cache_size, dengan kata lain, menukar nilainya hanya akan menjejaskan sesi baharu yang dimulakan selepas nilai ditukar.
Daripada konfigurasi di atas, kita boleh membuat kesimpulan bahawa proses penulisan Log Binari adalah secara kasar:
Jadi proses umum adalah seperti berikut:
Setakat ini kita mempunyai pemahaman umum tentang proses menulis Mysql ke Binari Melalui: cache binlog yang dipegang oleh setiap transaksi -> Strategi pelaksanaan khusus boleh dikawal melalui sync_binlog.
Pembelajaran yang disyorkan: tutorial video mysql
Atas ialah kandungan terperinci Kuasai sepenuhnya proses menulis Log Binari dalam MySql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!