Xmpp

如何將openfire從嵌入式遷移到外部

  • June 30, 2011

openfire 使用的嵌入式數據庫是用 Java 編寫的 Hsqldb。Openfire 有一種遷移指南,但它並不完全完整。首先,這裡提到的程序 hsqldb-transfer 是:

  1. A GUI program…
  2. 這必須以與 hsqldb 數據庫所有者相同的使用者身份執行。讀寫權限不夠?!

如果 openfire 在沒有圖形的伺服器上執行,這意味著:

  1. 關閉第一台機器上的伺服器
  2. 在機器二上的(離線)openfire 安裝上複製 Path-To/embedded-db,它恰好也有圖形和與機器一相同的 openfire 設置(相同的外掛、版本等)
  3. 在機器二上啟動 openfire
  4. 重新啟動設置嚮導,以便辨識複製的數據庫
  5. 關閉機器二上的 openfire
  6. 將在機器二上執行 openfire 的使用者“升級”為成熟的人類使用者
  7. 以 openfire 使用者身份登錄
  8. …但是由於 openfire 已關閉,數據庫現在不在磁碟上…這意味著
  9. 執行 hsqldb-transfer 以傳輸數據庫

不起作用。

在指南中使用了 url jdbc:hsqldb:Path-To/embedded-db/openfire。問題是:有時該文件存在,有時則不存在。就我而言:週一我在沒有關閉第一台機器上的 openfire 的情況下進行了空執行,它在今天消失了,當時我確實關閉了 openfire。

(我成功試執行的下一步是:

  1. 傳輸時,動態更改新伺服器中不支持的數據類型,因為 hsqldb-transfer 本身無法在 sql 方言之間進行映射
  2. 在外部 sql-server 上手動執行數據庫更改以獲取所需的版本(很容易,因為現有版本在表版本中)。我從 3.5.2 到 3.6.4…
  3. 轉儲該數據庫的內容並在超級 sql 伺服器機器 3 上進行導入,這是閃亮的和新的
  4. 在機器四上設置openfire,它不是太舊以至於它崩潰了,以使用三上的外部數據庫
  5. 利潤!

)

如何獲得一個離線的、未更新的數據庫副本以便 hsqldb-transfer 可以使用它?

這是一種蹩腳的方法,但是如果您在離線時找不到文件(我無法解釋):

只要在備份期間沒有出現檢查點,您就可以對活動的 hsqldb 進行備份。每次日誌文件填滿時都會出現一個檢查點。嵌入式數據庫的屬性文件中有一個設置:

hsqldb.log_size=50

(以兆為單位 - 50M)

只要在實時數據庫文件的文件複製期間日誌文件沒有達到該大小,該文件將是一致的。日誌文件中的任何內容尚未寫入數據庫。如果您可以在非工作時間執行此操作,則可以獲得相當好的轉儲文件。

所以..您可以終止任何活動會話,複製文件,關閉伺服器,然後從那裡繼續。

引用自:https://serverfault.com/questions/212544