????????在發(fā)上一個線上版本之前,由于開發(fā)的同學(xué)把流程性的東西拋到一邊,只想著省事,很多到測試這邊的版本都沒有打tag,也沒有給轉(zhuǎn)測試的腳本文件,為了這次版本的順利發(fā)布,要做一次線上環(huán)境的模擬發(fā)布流程。所以需要把生產(chǎn)上的redis數(shù)據(jù)導(dǎo)到測試的redis上面來。
? ? ? ? 我們的生產(chǎn)redis用的是阿里云的集群模式,在這里要說明一下,阿里云上面的redis的集群備份顯示讓我有點(diǎn)謎糊,因?yàn)樗厦姹4娴娘@示的都是DB0開頭的文件,當(dāng)時我還以為只是redis的db0的數(shù)據(jù),因?yàn)槲覀冇玫氖莇b10,所以當(dāng)時提了工單到阿里云,就問他們怎么只有db0數(shù)據(jù),沒有db10數(shù)據(jù),等了四五個小時,阿里云那邊才給回復(fù)說db0代表集群中的第一個數(shù)據(jù)庫,不是代表的DB0。好吧,因?yàn)槭羌耗J?,下載的下來的redis備份文件是兩個rdb文件,但是由于測試環(huán)境只是單機(jī)模式,那這兩個rdb文件要如何還原到單機(jī)的redis上面來呢?
? ? ? ? 找了好久,終于找到一個方法,那就是把手動把rdb文件合并成一個后,再還原到redis中去,合并方式如下:
cat 1.rdb > dump.rdb
cat 2.rdb >> dump.rdb
如果超過兩個,后面的可以依次通過cat x.rdb >> dump.rdb往同一個文件后面合并就行了。
合并后把dump.rdb的文件放到redis的data目錄下,重啟redis即可生效。
后面測試了一下數(shù)據(jù),redis的相關(guān)數(shù)據(jù)是完整的。
生產(chǎn)上mysql相關(guān)數(shù)據(jù)結(jié)構(gòu)也還原到測試環(huán)境上,然后進(jìn)行了預(yù)發(fā)布,預(yù)發(fā)布成功后,發(fā)現(xiàn)還是有一些腳本少了,更新腳本后,業(yè)務(wù)正常。
? ? ? ? 這一次經(jīng)歷有以下幾點(diǎn)可以借鑒:
1、關(guān)于流程,一定要規(guī)范化,否則很容易出現(xiàn)類似的問題。盡管我們現(xiàn)在的技術(shù)團(tuán)隊(duì)這一塊做得不是很好,但是本人一直在驅(qū)動著組內(nèi)的成員,不管是開發(fā)、還是測試或者是運(yùn)維。只有規(guī)范了,這種問題相對來講會少很多,但也不能完全保證,因?yàn)榇a和腳本的提交是由開發(fā)人員提交,這跟個人的經(jīng)驗(yàn)以及工作態(tài)度和責(zé)任心有很大的關(guān)系。
2、關(guān)于手動合并rdb問題,開始時想了很久一直沒想明白要如何還原多個rdb,這個可以算是一個比較好的經(jīng)驗(yàn)積累。
3、關(guān)于預(yù)部署,在流程不規(guī)范的情況下,這種方式有助于提高發(fā)布時不會出現(xiàn)問題的機(jī)率。