Rumah > Artikel > Tutorial sistem > Bagaimana untuk menyelesaikan kelewatan master-slave mysql
Keupayaan replikasi terbina dalam MySQL adalah asas untuk membina aplikasi berprestasi tinggi yang besar. Mengedarkan data MySQL kepada berbilang sistem Mekanisme yang diedarkan ini dicapai dengan menyalin data hos MySQL tertentu kepada hamba hos yang lain dan melaksanakannya semula.
Semasa replikasi, satu pelayan bertindak sebagai tuan dan satu atau lebih pelayan lain bertindak sebagai hamba. Master menulis kemas kini kepada fail log binari dan mengekalkan indeks fail untuk menjejaki putaran log. Log ini merekodkan kemas kini yang dihantar kepada pelayan hamba. Apabila hamba menyambung kepada tuan, ia memberitahu tuan lokasi kemas kini berjaya terakhir yang dibaca hamba dalam log. Pelayan hamba menerima sebarang kemas kini yang telah berlaku sejak itu, kemudian menyekat dan menunggu pelayan induk memberitahu mereka tentang kemas kini.
Masalah dengan replikasi master-slave mysql:
Jawapan: Apabila bercakap tentang prinsip kelewatan penyegerakan master-slave dalam pangkalan data MySQL, kita harus bermula dengan prinsip replikasi master-slave pangkalan data mysql ialah operasi berbenang tunggal untuk semua DDL dan DML Binlog adalah penulisan urutan, jadi kecekapan sangat tinggi, benang Slave_IO_Running hamba akan pergi ke perpustakaan utama untuk mendapatkan log, dan kecekapannya akan menjadi agak tinggi Operasi DDL dan DML perpustakaan utama pada hamba. Operasi IO DML dan DDL adalah rawak, bukan berurutan, jadi kosnya akan menjadi sangat tinggi pada hamba juga boleh menyebabkan pertikaian kunci Memandangkan Slave_SQL_Running juga berutas tunggal, induk kad DDL perlu melaksanakan 10 kali. minit, kemudian semua DDL berikutnya akan menunggu DDL ini selesai melaksanakan sebelum meneruskan, yang mengakibatkan kelewatan. Sesetengah rakan akan bertanya: "DDL yang sama pada perpustakaan utama juga perlu dilaksanakan selama 10 minit. Mengapa hamba ditangguhkan?"
Jawapan: Apabila konkurensi TPS perpustakaan utama adalah tinggi dan bilangan DDL yang dijana melebihi apa yang boleh ditanggung oleh satu benang SQL hamba, penangguhan akan berlaku .
Jawapan: Penyelesaian paling mudah untuk mengurangkan kelewatan penyegerakan hamba adalah dengan mengoptimumkan seni bina dan cuba menjadikan DDL perpustakaan utama dilaksanakan dengan cepat. Terdapat juga fakta bahawa perpustakaan utama ditulis dan mempunyai keselamatan data yang tinggi, seperti sync_binlog=1, innodb_flush_log_at_trx_commit = 1 dan tetapan lain Hamba tidak memerlukan keselamatan data yang tinggi Anda boleh menetapkan sync_binlog kepada 0 atau mematikan binlog . innodb_flushlog juga boleh ditetapkan kepada 0 untuk meningkatkan kecekapan pelaksanaan SQL. Yang lain adalah menggunakan peranti perkakasan yang lebih baik daripada perpustakaan utama sebagai hamba.
1. Kelewatan rangkaian
2. beban induk
3. beban hamba
Pendekatan umum ialah menggunakan berbilang hamba untuk mengedarkan permintaan baca, dan kemudian menggunakan pelayan khusus daripada hamba ini sahaja untuk sandaran tanpa sebarang operasi lain, supaya keperluan 'masa nyata' dapat dicapai pada tahap maksimum
Selain itu, mari perkenalkan 2 lagi parameter yang boleh mengurangkan kelewatan
–hamba-net-masa tamat=saat
Makna parameter: Apabila hamba gagal membaca data log dari pangkalan data utama, berapa lama menunggu untuk mewujudkan semula sambungan dan mendapatkan data
Unit slave_net_timeout ialah saat. Tetapan lalai ialah 3600 saat
|.hamba_net_masa tamat |
–master-connect-retry=saat
Makna parameter: Apabila mewujudkan semula sambungan tuan-hamba, jika sambungan gagal diwujudkan, berapa lama masa yang diperlukan untuk mencuba semula.
Unit master-connect-retry ialah saat Tetapan lalai ialah 60 saat
Biasanya mengkonfigurasi 2 parameter di atas boleh mengurangkan kelewatan penyegerakan data master-slave yang disebabkan oleh masalah rangkaian
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan kelewatan master-slave mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!