web-dev-qa-db-ja.com

openfireを組み込みから外部に移行する方法

Openfireが使用する組み込みデータベースは、Javaで記述されたHsqldbです。 Openfireには一種の migration-guide がありますが、完全ではありません。まず、そこで言及されているプログラム、hsqldb-transferは次のとおりです。

  1. GUIプログラム...
  2. これは、hsqldbデータベースの所有者と同じユーザーとして実行する必要があります。読み取りと書き込みアクセスが不十分ですか?!

グラフィックのないサーバーでopenfireが実行されている場合、これは次のことを意味します。

  1. マシン1のサーバーをオフにする
  2. Path-To/Embedded-dbをマシン2の(オフライン)openfire-installationにコピーします。これには、マシン1と同じグラフィックと同じopenfire-setup(同じプラグイン、バージョンなど)もあります。
  3. マシン2で直火を開始
  4. コピーされたデータベースが認識されるようにセットアップウィザードを再起動します
  5. マシン2の直火を遮断する
  6. マシン2でopenfireを実行するユーザーを、本格的な人間ユーザーに「アップグレード」する
  7. Openfireユーザーとしてログインする
  8. ...しかし、openfireがオフになっているため、データベースはディスク上にありません...つまり
  9. Hsqldb-transferを実行してデータベースを転送する

動作しません。

ガイドでは、URL jdbc:hsqldb:Path-To/embedded-db/openfireが使用されています。問題は、そのファイルが存在する場合と存在しない場合があります。私の場合、月曜日にマシン1で直火をオフにせずにドライランを行ったとき、それはありませんでした。

(私の成功したドライランの次のステップは次のとおりです。

  1. Hsqldb-transfer自体はSQLダイアレクト間のマッピングができないため、転送中に、新しいサーバーでサポートされていないデータ型をオンザフライで変更します
  2. 外部SQLサーバーでデータベースの変更を手動で実行して、目的のバージョンを取得します(既存のバージョンはテーブルバージョンにあるため、簡単です)。 3.5.2から3.6.4に移行しました...
  3. そのデータベースの内容をダンプし、光沢のある新しいスーパーSQLサーバーマシン3でインポートを実行します
  4. 3台の外部データベースを使用するために、バラバラになるほど古くないマシン4に直火を設定します。
  5. 利益!

hsqldb-transferが使用できるようにデータベースの更新されたコピーではなく、オフラインを取得するにはどうすればよいですか?

5
kaleissin

これは一種の不完全な方法ですが、オフラインのときにファイルを見つけるのに問題がある場合(私は説明できません):

バックアップ中にチェックポイントが発生していない限り、ライブhsqldbのバックアップを取ることができます。チェックポイントは、ログファイルがいっぱいになるたびに発生します。 Embedded-dbのプロパティファイルには次の設定があります。

hsqldb.log_size=50

(これはメガで-50M)

ライブデータベースファイルのファイルコピー中にログファイルがそのサイズに達しない限り、ファイルは一貫性があります。ログファイルにあるものは、まだデータベースに書き込まれていません。営業時間外にこれを行うことができれば、適度に優れたダンプファイルを取得できます。

したがって、アクティブなセッションをすべて強制終了し、ファイルコピーを実行し、サーバーをシャットダウンして、そこから続行できます。

1
rjewell