Confluence遷移中遇到的問題(Data too long for column 'STRINGVAL')及解決方法

今天因為團隊需要蝌借,協(xié)助幫忙看Confluence的這個問題,通過大半天的分析研究也得到不少收獲,在此記錄一下問題的原因以及最后的解決方案贩汉,希望對各位在遷移中碰到類似問題的大神們有所幫助。

遷移步驟


先大致說一下基本的遷移步驟:

創(chuàng)建備份

  • 使用管理員賬戶登錄Confluence锚赤,點擊右上角“齒輪”圖標匹舞,選擇General Configuration
  • 在側(cè)邊欄中,選擇Backup & Restore
  • 勾選Archive to backups folder讓生成的備份創(chuàng)建歸檔至Confluence自動備份目錄线脚,如果不點選會生成在臨時目錄中赐稽,并且會在24小時后自動清除
  • 勾選Backup attachments,將附件內(nèi)容加入到備份中
  • 點擊Backup按鈕浑侥,等待備份完畢姊舵。

系統(tǒng)恢復(fù)

  • 在新安裝的Confluence中,用管理員賬號登陸锭吨,點擊右上角“齒輪”圖標蠢莺,選擇General Configuration
  • 在側(cè)邊欄中,選擇Backup & Restore
  • 點擊Choose File零如,在彈出框中選擇上一步中創(chuàng)建的備份文件
  • 點擊Upload and Restore躏将,進行上傳和恢復(fù)

基本步驟如上所述,若沒有碰到任何問題那是最好的考蕾。若沒有成功祸憋,在日志中查看到類似這樣的錯誤:

com.atlassian.confluence.importexport.ImportExportException: Unable to complete import: Error while importing backup: could not insert: [com.atlassian.confluence.content.ContentProperty#32178794]
……
ERROR [Long running task: Importing data] [sf.hibernate.util.JDBCExceptionReporter] logExceptions Data truncation: Data too long for column 'STRINGVAL' at row 1

注:錯誤信息只截取了重要內(nèi)容,省略部分異常堆棧內(nèi)容肖卧。

關(guān)于這個錯誤在官方JIRA中已有Issue蚯窥,但還是open狀態(tài),所以應(yīng)該無法通過升級來解決塞帐,所以如果碰到類似的問題拦赠,那就繼續(xù)往下看,若是其他錯誤葵姥,可以查看這里是否有類似的錯誤原因:Troubleshooting XML backups that fail on restore

解決方法


由于Confluence沒有開源荷鼠,無法為其貢獻Patch,所以主要從備份文件的角度去分析與處理榔幸。

  • 報錯信息分析:我們可以定位是在插入數(shù)據(jù)庫的時候STRINGVAL字段超長允乐,并且該字段位于ContentProperty對象中
  • 查看數(shù)據(jù)庫中有相對應(yīng)的CONTENTPROPERTY表矮嫉,表結(jié)構(gòu)如下,可以看到STRINGVAL字段長度為255
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| PROPERTYID   | bigint(20)   | NO   | PRI | NULL    |       |
| PROPERTYNAME | varchar(255) | NO   | MUL | NULL    |       | 
| STRINGVAL    | varchar(255) | YES  | MUL | NULL    |       |
| LONGVAL      | bigint(20)   | YES  | MUL | NULL    |       |
| DATEVAL      | datetime     | YES  | MUL | NULL    |       |
| CONTENTID    | bigint(20)   | YES  | MUL | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
  • 解壓開備份文件牍疏,可以看到我們有下面三個內(nèi)容蠢笋,通過查看內(nèi)容大致可以定位導(dǎo)入出錯的數(shù)據(jù)來源自entities.xml

  • entities.xml

  • exportDescriptor.properties

  • plugin-data

  • 看看entities.xml的結(jié)構(gòu),大致如下:

<object class="ContentProperty" package="com.atlassian.confluence.content">
    <id name="id">1705394</id>
    <property name="name"><![CDATA[inline-original-selection]]></property>
    <property name="stringValue"><![CDATA[XXXXXXX]]></property>
    <property name="longValue"/><property name="dateValue"/>
</object>
  • 大致可以判斷出超長的字段特點為:class屬性為ContentPropertyObject標簽下鳞陨,namestringValueproperty標簽內(nèi)容昨寞。根據(jù)此特點,可通過下面的代碼找到超長的內(nèi)容厦滤。
File file = new File(getClass().getResource("/entities.xml").getFile());
SAXReader reader = new SAXReader();
Document document = reader.read(file);
List<Element> list = document.getRootElement().selectNodes("http://object[@class='ContentProperty']");
for(Element e : list) {
    Element element = (Element)e.elements("property").get(1);
    String text = element.getText();
    if(text.length() > 255) {
        System.out.println(text);
    }
}
  • 在找到對應(yīng)內(nèi)容后编矾,可以刪除一些內(nèi)容,再嘗試導(dǎo)入馁害。讀者也可以根據(jù)上述代碼稍作修改窄俏,來生成新的xml使用。

后記


由于數(shù)據(jù)庫定義字段為255碘菜,那么從數(shù)據(jù)庫中取出數(shù)據(jù)時凹蜈,肯定是255的不會錯,因此猜測是在export組織xml時增加了一些東西導(dǎo)致忍啸。根據(jù)我們這邊異常數(shù)據(jù)來看仰坦,最后超出部分正好是三個點:...,不知道遇到類似問題的大家是否也是類似情況计雌,歡迎留言一起找找具體原因悄晃。最近實在太忙,大致反編譯看了一些export的內(nèi)容凿滤,但是未找到具體原因妈橄,后續(xù)有時間再看看吧。

另外翁脆,confluence的這部分class并不在confluence/WEB-INF/classes目錄下眷蚓,大家有欲望研究的需要去confluence/WEB-INF/lib下解壓confluence-5.x.x.jar,并反編譯獲得反番,有讀者找到具體原因的話沙热,歡迎留言或郵件交流 _

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市罢缸,隨后出現(xiàn)的幾起案子篙贸,更是在濱河造成了極大的恐慌,老刑警劉巖枫疆,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爵川,死亡現(xiàn)場離奇詭異,居然都是意外死亡养铸,警方通過查閱死者的電腦和手機雁芙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钞螟,“玉大人兔甘,你說我怎么就攤上這事×郾酰” “怎么了洞焙?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拯啦。 經(jīng)常有香客問我澡匪,道長,這世上最難降的妖魔是什么褒链? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任唁情,我火速辦了婚禮,結(jié)果婚禮上甫匹,老公的妹妹穿的比我還像新娘甸鸟。我一直安慰自己,他們只是感情好兵迅,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布抢韭。 她就那樣靜靜地躺著,像睡著了一般恍箭。 火紅的嫁衣襯著肌膚如雪刻恭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天扯夭,我揣著相機與錄音鳍贾,去河邊找鬼。 笑死交洗,一個胖子當著我的面吹牛贾漏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播藕筋,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼纵散,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了隐圾?” 一聲冷哼從身側(cè)響起伍掀,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎暇藏,沒想到半個月后蜜笤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡盐碱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年把兔,在試婚紗的時候發(fā)現(xiàn)自己被綠了沪伙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡县好,死狀恐怖围橡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缕贡,我是刑警寧澤翁授,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站晾咪,受9級特大地震影響收擦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谍倦,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一塞赂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昼蛀,春花似錦减途、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至送淆,卻和暖如春税产,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偷崩。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工辟拷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阐斜。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓衫冻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谒出。 傳聞我的和親對象是個殘疾皇子隅俘,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容