跳还是不跳?这是个问题
周一(2014-11-17)有个项目进行变更,而且是重大变更,DB测操作从早上持续到下午17点,QA同事到晚上10点测试后发现,slave上的数据与master上不一致。 这个问题应该在情理之中但又在意料之外,其实DBA在下午DB变更时便遇到slave卡住: Could not execute Del
周一(2014-11-17)有个项目进行变更,而且是重大变更,DB测操作从早上持续到下午17点,QA同事到晚上10点测试后发现,slave上的数据与master上不一致。忘介绍了,该项目的该模块有读请求以及delete逻辑在上面,被吓到没?
这个问题应该在情理之中但又在意料之外,其实DBA在下午DB变更时便遇到slave卡住:
Could not execute Delete_rows event on table codcpc_1004pc_0x3EC.mail; Can't find record in 'mail ', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log binlog.010464, end_log_pos 82113, Error_code: 1032 141117 7:54:31 [Warning] Slave: Can't find record in 'mail' Error_code: 1032
我当时的做法是直接跳过不存在的表,写了下面这个脚本:
mysqlconn="mysql -uADMIN -p4word" #while [ "1" = "1" ] for i in `seq 1 30` do status=`$mysqlconn -e "show slave status\G;" | grep -i "Last_SQL_Error" | grep -i "mail"` if [ -n "$status" ];then $mysqlconn -vvve "stop slave;set global sql_slave_skip_counter=1;start slave;" sleep 1 else $mysqlconn -vvve "show slave status\G" echo "error is OK!" exit 0 fi done
很奇怪的,本以为得写死循环跑,没想到在调试 3次以内就过了,当时没有深究,也因为没时间深究导致后面的熬夜排查问题。
始作俑者是一条SQL:delete from mail where recipientEntityID in (select userid from test.deltb);
今天出现卡住,主要还是因为Delete_rows发现键不存在,如果改为statement,这个问题就不会出现。因为那条罪魁祸首的sql,在slave上肯定能执行下去。
可关键是我们的binlog_format是MIXED模式,那么问题来了,在什么情况下,binlog_format=mixed时,生成的binlog会转换为row格式?关于这点我查了官方文档,看得不是很明白,留待之后更新。
而binlog_format是row模式的时候,skip是以事务级别来的。
下午的删除里边,在master上做的delete,实际上binlog会转换为很多binlog event,而这些event仅仅被几个begin commit包围着。
这也就解释了上面我的问题。
那么跳还是不跳?sql_slave_skip_counter=N在线上跳确实存在一定风险。
⑴ InnoDB时,N=1是跳过整个事务,而不只是一条SQL语句
⑵ 当RBR模式时,无论是InnoDB 或MyISAM,binlog event都是以begin;row group;commit来组织,当N=1时跳过的还是整个事务内容
更安全的做法是sql_exec_mode=IDEMPOTENT,只跳过有问题的SQL或者row,相对于sql_slave_skip_counter而言,slave_exec_mode的处理范围更小、更安全,不过其仅仅适合RBR模式 :(

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Selesaikan masalah "error:redefinitionofclass'ClassName'" dalam kod C++ Dalam pengaturcaraan C++, kita sering menghadapi pelbagai ralat kompilasi. Salah satu ralat biasa ialah "error:redefinitionofclass 'ClassName'" (ralat definisi semula kelas 'ClassName'). Ralat ini biasanya berlaku apabila kelas yang sama ditakrifkan beberapa kali. Artikel ini akan

Masalah penilaian kesan pengelompokan dalam algoritma pengelompokan memerlukan contoh kod khusus Pengelompokan ialah kaedah pembelajaran tanpa pengawasan yang mengelompokkan sampel yang serupa ke dalam satu kategori dengan mengelompokkan data. Dalam algoritma pengelompokan, cara menilai kesan pengelompokan adalah isu penting. Artikel ini akan memperkenalkan beberapa penunjuk penilaian kesan pengelompokan yang biasa digunakan dan memberikan contoh kod yang sepadan. 1. Indeks penilaian kesan pengelompokan Pekali Siluet Pekali siluet menilai kesan pengelompokan dengan mengira kehampiran sampel dan tahap pemisahan daripada kelompok lain.

Steam ialah platform permainan yang sangat popular dengan banyak permainan berkualiti tinggi, tetapi sesetengah pengguna win10 melaporkan bahawa mereka tidak boleh memuat turun wap Apa yang sedang berlaku? Kemungkinan besar alamat pelayan IPv4 pengguna tidak ditetapkan dengan betul. Untuk menyelesaikan masalah ini, anda boleh cuba memasang Steam dalam mod keserasian, dan kemudian mengubah suai pelayan DNS secara manual kepada 114.114.114.114, dan anda sepatutnya boleh memuat turunnya kemudian. Apa yang perlu dilakukan jika Win10 tidak dapat memuat turun Steam: Di bawah Win10, anda boleh cuba memasangnya dalam mod keserasian Selepas mengemas kini, anda mesti mematikan mod keserasian, jika tidak, halaman web tidak akan dimuatkan. Klik sifat pemasangan program untuk menjalankan program dalam mod keserasian. Mulakan semula untuk meningkatkan memori, kuasa

Dikenali dengan prestasi yang berkuasa dan ciri serba boleh, iPhone tidak terlepas daripada cegukan atau kesukaran teknikal sekali-sekala, ciri biasa di kalangan peranti elektronik yang kompleks. Mengalami masalah iPhone boleh mengecewakan, tetapi biasanya penggera tidak diperlukan. Dalam panduan komprehensif ini, kami menyasarkan untuk menyahmistifikasi beberapa cabaran yang paling biasa dihadapi yang berkaitan dengan penggunaan iPhone. Pendekatan langkah demi langkah kami direka untuk membantu anda menyelesaikan isu lazim ini, menyediakan penyelesaian praktikal dan petua penyelesaian masalah untuk mengembalikan peralatan anda dalam keadaan berfungsi terbaik. Sama ada anda menghadapi masalah atau isu yang lebih kompleks, artikel ini boleh membantu anda menyelesaikannya dengan berkesan. Petua Penyelesaian Masalah Umum Sebelum menyelidiki langkah penyelesaian masalah khusus, berikut adalah beberapa yang berguna

Menyelesaikan ralat PHP: Masalah yang dihadapi apabila mewarisi kelas induk Dalam PHP, pewarisan ialah ciri penting pengaturcaraan berorientasikan objek. Melalui pewarisan, kita boleh menggunakan semula kod sedia ada dan melanjutkan serta menambah baiknya tanpa mengubah suai kod asal. Walaupun warisan digunakan secara meluas dalam pembangunan, kadangkala anda mungkin menghadapi beberapa masalah ralat semasa mewarisi daripada kelas induk Artikel ini akan menumpukan pada menyelesaikan masalah biasa yang dihadapi apabila mewarisi daripada kelas induk dan memberikan contoh kod yang sepadan. Soalan 1: Kelas induk tidak ditemui Semasa proses mewarisi kelas induk, jika sistem tidak

Untuk menyelesaikan masalah yang jQuery.val() tidak boleh digunakan, contoh kod khusus diperlukan Untuk pembangun bahagian hadapan, menggunakan jQuery ialah salah satu operasi biasa. Antaranya, menggunakan kaedah .val() untuk mendapatkan atau menetapkan nilai elemen borang adalah operasi yang sangat biasa. Walau bagaimanapun, dalam beberapa kes tertentu, masalah tidak dapat menggunakan kaedah .val() mungkin timbul. Artikel ini akan memperkenalkan beberapa situasi dan penyelesaian biasa, serta memberikan contoh kod khusus. Penerangan Masalah Apabila menggunakan jQuery untuk membangunkan halaman hadapan, kadangkala anda akan menghadapi

Masalah pemerolehan label dalam pembelajaran yang diselia dengan lemah memerlukan contoh kod khusus Pengenalan: Pembelajaran diselia dengan lemah ialah kaedah pembelajaran mesin yang menggunakan label yang lemah untuk latihan. Berbeza daripada pembelajaran tradisional yang diselia, pembelajaran yang diselia dengan lemah hanya perlu menggunakan lebih sedikit label untuk melatih model, berbanding setiap sampel perlu mempunyai label yang tepat. Walau bagaimanapun, dalam pembelajaran yang diselia dengan lemah, cara mendapatkan maklumat berguna dengan tepat daripada label yang lemah adalah isu utama. Artikel ini akan memperkenalkan masalah pemerolehan label dalam pembelajaran yang diselia dengan lemah dan memberikan contoh kod khusus. Pengenalan kepada masalah pemerolehan label dalam pembelajaran yang diselia dengan lemah:

Keupayaan generalisasi model pembelajaran mesin memerlukan contoh kod khusus Dengan pembangunan dan aplikasi pembelajaran mesin yang semakin meluas, orang ramai semakin memberi perhatian kepada keupayaan generalisasi model pembelajaran mesin. Keupayaan generalisasi merujuk kepada keupayaan ramalan model pembelajaran mesin pada data tidak berlabel, dan juga boleh difahami sebagai kebolehsuaian model dalam dunia sebenar. Model pembelajaran mesin yang baik harus mempunyai keupayaan generalisasi yang tinggi dan dapat membuat ramalan yang tepat pada data baharu. Walau bagaimanapun, dalam aplikasi praktikal, kita sering menemui model yang berprestasi baik pada set latihan, tetapi gagal pada set ujian atau sebenar.
