背景
mysql可以支持多種不同的存儲引擎,innodb由于其高效的讀寫性能,并且支持事務(wù)特性,使得它成為mysql存儲引擎的代名詞,使用非常廣泛。隨著SSD逐漸普及,硬件存儲成本越來越高,面向?qū)憙?yōu)化的rocksdb引擎逐漸流行起來,我們也是看中了rocksdb引擎在寫放大和空間放大的優(yōu)勢,將其引入到mysql體系。兩種引擎的結(jié)構(gòu)B-Tree(innodb引擎)和LSM-Tree(rocksdb引擎)很好地形成互補(bǔ),我們可以根據(jù)業(yè)務(wù)類型來選擇合適的存儲。一般mysql默認(rèn)是mysql+innodb引擎,而mysql+rocksdb引擎稱之為myrocks。今天要討論的就是myrocks復(fù)制中斷問題,案例來源于真實(shí)的業(yè)務(wù)場景。
問題現(xiàn)象
復(fù)制過程中,出現(xiàn)了1756錯誤,根據(jù)錯誤日志和debug確認(rèn)是slave-sql線程在更新slave_worker_info表時(shí)出錯導(dǎo)致,堆棧如下: