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