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

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

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

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

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

  1. 关闭机器一上的服务器
  2. 将 Path-To/embedded-db 复制到机器二上的(离线)openfire 安装,该机器恰好也有图形和与机器一相同的 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 Server 机器三上进行导入,该机器是全新的
  4. 在机器四上设置 openfire,这台机器还没有老到崩溃,可以使用三上的外部数据库
  5. 利润!

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

答案1

这是一种蹩脚的方法,但如果您在离线时找不到该文件(我无法解释):

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

hsqldb.log_size=50

(单位:兆——50M)

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

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

相关内容