如何将 openfire 从嵌入式迁移到外部

kal*_*sin 5 openfire xmpp

openfire 使用的嵌入式数据库是 Hsqldb,用 Java 编写。Openfire 有一种迁移指南,但它并不完全完整。首先,那里提到的程序 hsqldb-transfer 是:

  1. 一个图形用户界面程序...
  2. 必须以与 hsqldb 数据库所有者相同的用户身份运行。读写权限不够?!

如果 openfire 在没有图形的服务器上运行,这意味着:

  1. 关闭机器一上的服务器
  2. 在第二台机器上的(离线)openfire 安装上复制 Path-To/embedded-db,这恰好也有图形和与第一台机器相同的 openfire 设置(相同的插件、版本等)
  3. 在机器 2 上启动 openfire
  4. 重新启动安装向导,以便识别复制的数据库
  5. 关闭机器 2 上的开火
  6. 将在机器 2 上运行 openfire 的用户“升级”为完全成熟的人类用户
  7. 以 openfire 用户身份登录
  8. ...但由于 openfire 已关闭,数据库现在不在磁盘上...这意味着
  9. 运行 hsqldb-transfer 来传输数据库

不起作用。

在指南中使用了 url jdbc:hsqldb:Path-To/embedded-db/openfire。问题是:有时该文件在那里,有时则不在。就我而言:星期一我在没有关闭第一台机器上的开火的情况下进行空运行时它就在那里,今天当我关闭开火时它不见了。

(我成功试运行的下一步是:

  1. 传输时,动态更改新服务器不支持的数据类型,因为 hsqldb-transfer 本身无法在 sql 方言之间进行映射
  2. 在外部 sql-server 上手动运行数据库更改以获得所需的版本(简单,因为现有版本在表版本中)。我从 3.5.2 到 3.6.4 ...
  3. 转储该数据库的内容并在超级 sql server 机器三上进行导入,这是闪亮的和新的
  4. 在机器四上设置openfire,它不是太旧以至于它崩溃了,在三上使用外部数据库
  5. 利润!

)

如何获得离线的、未被更新的数据库副本,以便 hsqldb-transfer 可以使用它?

小智 1

这是一种蹩脚的方法,但如果您在脱机时找不到文件时遇到问题(我无法解释):

只要备份期间未发生检查点,您就可以备份实时 hsqldb。每次日志文件填满时都会出现一个检查点。嵌入式数据库的属性文件中有一个设置:

hsqldb.log_size=50
Run Code Online (Sandbox Code Playgroud)

(以兆 - 50M 为单位)

只要日志文件在实时数据库文件的文件复制过程中没有达到该大小,该文件就会保持一致。日志文件中的任何内容尚未写入数据库。如果您可以在下班时间执行此操作,则可以获得相当好的转储文件。

所以..您可以终止任何活动会话,进行文件复制,关闭服务器,然后从那里继续。