這篇文章主要為大家展示了“從MySQL源碼看日志命令失效的原因有哪些”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“從MySQL源碼看日志命令失效的原因有哪些”這篇文章吧。
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)撫順,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220今天看數(shù)據(jù)庫(kù)內(nèi)核月報(bào),發(fā)現(xiàn)一個(gè)蠻有意思的問(wèn)題,就是show binary logs的時(shí)候沒(méi)有任何結(jié)果,這個(gè)問(wèn)題的原因很簡(jiǎn)單,但是分析問(wèn)題的過(guò)程相比是艱辛的,需要在各種潛在的可能中找到那個(gè)肯定的結(jié)果。當(dāng)然這個(gè)問(wèn)題帶給我的大福利不是解決了這個(gè)問(wèn)題,而是通過(guò)這個(gè)問(wèn)題我們可以換一個(gè)思路來(lái)分析,比如說(shuō)通過(guò)源碼的方式來(lái)了解更多的細(xì)節(jié)。
我在自己的電腦上下載了MySQL近幾個(gè)版本的源碼,平時(shí)很少看,但是環(huán)境基本配置好了,就等待一些實(shí)用快捷的案例了。
首先復(fù)現(xiàn)下問(wèn)題,我所測(cè)試的版本是5.6,使用show binary logs查看binlog的信息時(shí),得到的結(jié)果如下:
mysql> show binary logs;
Empty set (0.00 sec)
而實(shí)際上這個(gè)環(huán)境是存在binlog的,毫無(wú)疑問(wèn),binlog是打開(kāi)的。
我們可以在系統(tǒng)層面看到這些binlog
可以通過(guò)binlog.index文件看到,確實(shí)是存在這些binlog的。
因?yàn)槲抑懒藛?wèn)題的答案,所以就順著里面的疑點(diǎn)來(lái)看,上面的index文件看起來(lái)比較奇怪,怎么第1行是空著的。
所以順著這個(gè)思路,可以看看是否是由于這個(gè)問(wèn)題導(dǎo)致。
阿里的同學(xué)在文章 http://mysql.taobao.org/monthly/2017/09/03/
給出了參考的文件,是rpl_master.cc,簡(jiǎn)單翻譯就是屬于replication部分,master端的。我們?cè)趍aster端使用的命令show master status,或者是reset master,里面的實(shí)現(xiàn)細(xì)節(jié)都在這個(gè)文件里面,所以我們舉一反三,還有一個(gè)文件是rpl_slave,使用的reset_slave, start slave,stop slave,show slave status等等,都是在這個(gè)文件里面的。
我們查看文件rpl_master.cc文件看看里面的實(shí)現(xiàn)部分。如果使用eclipse的方式查看基本就能通過(guò)幾個(gè)維度來(lái)看到一些明細(xì)的信息,左邊的是代碼的層級(jí)結(jié)構(gòu),中間的是指定的函數(shù),比如show binary logs的實(shí)現(xiàn),右邊的是一些概覽,比如變量,方法等。
當(dāng)然rpl_master和rpl_slave的代碼量相差巨大,rpl_slave加入了GTID的部分,可以看到大量的注釋。
而rpl_master中,我們可以很快看到下面的邏輯。如果是空行或者是EOF結(jié)尾都會(huì)被視為文件的末尾,上面1行是調(diào)用了index文件得到一個(gè)列表的信息。
所以這個(gè)問(wèn)題的明白了原委,修復(fù)起來(lái)也就很簡(jiǎn)單了。直接刪掉那個(gè)空行,然后再次刷新日志即可。
先刪掉空格,然后刷新日志,如下所示。
所以按照這個(gè)思路,我們可以在rpl_slave中找到自己自己想得到的內(nèi)容,比如Seconds_Behind_Master的含義,代碼中自有黃金屋。注釋中甚至給出了偽代碼,把計(jì)算的流程說(shuō)得很詳細(xì)。
里面的代碼解釋還是很詳細(xì)的,感覺(jué)和讀文檔的感覺(jué)差不多。
當(dāng)然里面也說(shuō)得很明確,Seconds_Behind_Master不能全信,有時(shí)候也是不準(zhǔn)的。
讀了一會(huì)代碼,發(fā)現(xiàn)request_dump的實(shí)現(xiàn)里還有些不完善的地方。代碼里看起來(lái)也是很無(wú)奈,只能以后修復(fù)了。
以上是“從MySQL源碼看日志命令失效的原因有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!