如何将openfire从embedded式迁移到外部

openfire使用的embedded式数据库是用Java编写的Hsqldb。 Openfire有一种迁移指南 ,但并不完全。 首先提到的那个scheme,hsqldb-transfer,是:

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

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

  1. closures机器上的服务器
  2. 复制Path-To / embedded-db到第二台机器上的(离线)openfire-installation,这个机器上也有graphics和相同的openfire-setup(相同的插件,版本等)
  3. 在机器上启动openfire
  4. 重新启动安装向导,以便识别复制的数据库
  5. 在机器上closuresopenfire
  6. “升级”在机器上运行openfire的用户是一个完全成熟的人类用户
  7. 以openfire用户身份login
  8. …但由于openfireclosures,数据库现在不在磁盘上…这意味着
  9. 运行hsqldb-transfer来传输数据库

不起作用。

在指南中,使用了jdbc:hsqldb:Path-To / embedded-db / openfire。 问题是:有时该文件在那里,其他时间则不是。 就我而言:星期一是在那里,我没有closures机器上的开火,而是在干燥的情况下运行。

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

  1. 在传输时,更改新服务器中不支持的数据types,因为hsqldb-transfer本身不能在sql方言之间进行映射
  2. 在外部sql-server上手动运行数据库更改以获得所需的版本(因为现有版本在表格版本中很容易)。 我从3.5.2到3.6.4 …
  3. 转储该数据库的内容,并在超级SQL服务器计算机三,这是shiny的和新的import
  4. 在机器四上设置openfire,这个function不算太旧,以致于在三个上面使用外部数据库
  5. 利润!

如何得到一个离线的,而不是更新的数据库副本,使hsqldb-transfer可以使用它?

这是一种蹩脚的做法,但是如果在离线状态下找不到文件时遇到问题(我无法解释):

只要在备份期间没有发生检查点,您就可以对现场hsqldb进行备份。 每当日志文件填满时,就会出现一个检查点。 在embedded式数据库的属性文件中有一个设置:

hsqldb.log_size=50 

(这是在兆 – 50M)

只要日志文件在活动数据库文件的文件副本中没有达到该大小,文件就会一致。 无论在日志文件中还没有写入数据库。 如果你可以在下class时间这样做,你可以得到一个合理的转储文件。

所以..你可以杀死任何活动的会话,做文件复制,closures服务器,然后从那里继续。