9. 数据库管理

Tigase 被编码以使用多种数据库类型和数字来执行。由于它的多功能性,有一些工具和程序可能对某些管理员有用。

9.2. 数据库监管

只有当数据库连接空闲时,才可以定期测试 Tigase 的可用性和数据库的存在性。默认情况下,此 ping 每 60 分钟发送一次到每个连接的存储库。但是,这可以作为 dataSource 属性的一部分被覆盖:

dataSource {
    default () {
        uri = '....'
    }
    'test' () {
        uri =  '...'
        'watchdog-frequency' = 'PT30M'
    }
}

此设置将频率更改为 30 分钟。

dataSource {
    default () {
        uri = '...'
    }
    'watchdog-frequency' = 'PT15M'
}

这个更改为 15 分钟。

备注

有关格式详细信息,请参阅 Period / Duration values

9.3. 使用修改后的数据库模式

如果您正在使用带有修改架构(更改的过程或表)的 Tigase XMPP Server,并且您不希望 Tigase XMPP Server 维护它并自动升级,您可以对任何数据源禁用 schema-management。如果对特定数据源禁用了 schema-management,那么 Tigase XMPP 服务器将不会以任何方式更新或修改数据库模式。而且它将不会检查模式版本是否正确。

default 数据源禁用 schema-management

dataSource {
    default () {
        uri = '...'
        'schema-management' = false
    }
}

警告

如果 schema-management 被禁用,那么管理员有责任维护数据库架构并在需要时对其进行更新(也就是:如果 Tigase XMPP 服务器架构已更改)。

9.4. 架构文件维护

本文档描述了模式文件布局和有关它的假设。此外,它还描述了更新的方式和时间。

9.4.1. 假设

存在以下假设:

  • 所有模式文件都 可加载 多次 - 这是迄今为止最重要的假设,它允许在不明确和详细检查加载版本的情况下逃脱(它已经在版本 8.0.0 的模式级别上处理)

  • 所需的模式版本是根据组件版本计算的(其在项目配置文件中设置 - 通常是 pom.xml,但可以通过注释在代码中覆盖它 - 请参阅服务器文档中的开发者手册了解详细信息)

  • 我们将维护 “3 versions schema files”,即在分发包中,我们将为 current_version 和后面两个主要版本(以及所有维护版本模式文件)提供模式版本 - 这将允许 快速升级 即使是从更旧的版本

  • SNAPSHOT 版本将打印一个日志条目,其表面架构可能已经更改,并建议运行升级(我们的目标是频繁发布,因此强制架构版本检查将仅对最终版本进行)

9.4.2. 检查

我们将检查:

  • 是否可以升级模式(基于数据库中的当前模式版本和可用的 SQL 文件及其各自的版本 - 是否 );

  • 是否需要在服务器启动期间升级架构(直到 7.1.x [包括] 它仅用于 tigase-server,将由所有组件完成)

  • 是否在 upgrade-schema 运行期间需要升级架构(如果架构已经是所需的最新版本,则不需要执行所有 SQL 文件,因此可以加快升级速度)

    • SNAPSHOT 版本启动期间,即使架构版本匹配,也会在 logs/tigase-console.log 中打印重新运行 upgrade-schema 的提示

9.4.3. 架构文件布局

文件名布局

基本模式文件名布局由 3 个基本部分组成:

  • 它所针对的关系数据库管理系统 (RDBMS) 的名称(例如,derbymysqlpostgresqlsqlserver);

  • 预期的 Tigase 组件的名称;

  • 架构文件的版本。

对于每个组件和版本,可以(但不是强制)将所有与数据库相关的功能拆分为多个文件,但必须将它们链接/包含在特定数据库/组件/版本文件的基础文件中。这允许分离存储过程(-sp)、基本模式(-schema)和设置属性(-props)。原则上,文件名模式如下所示

<RDBMS_name>-<tigase_component>-schema-<version>[-<sub_schema>].sql

例如,Tigase Server for Derby 版本 7.0.0 的模式文件如下所示:

derby-server-schema-7.0.0-schema.sql

文件结构

如前所述,我们应该支持所有匹配 old-stable, stablemaster 的版本,这意味着 current-version 后面的两个主要版本,即版本: current-version - 2)。这导致在任何给定时间在存储库中都有 3 个版本的模式(其中两个是 upgrades`` 到最旧的基本模式):

  • current-version 2:基本架构

  • current-version 1: 从 current-version 2 到 current-version 1 的所有更改

  • current-version: 所有从 current-version 1 到 current-version 的改变

备注

current-version 必须 总是匹配组件的版本(在 pom.xml 中定义)。

备注

版本中可能有多个文件(与较小的维护升级相关),因为 SchemaLoader 会收集版本范围内的所有文件。

例如,随着版本 8.0.0 的发布,这将转换为以下版本:

  • 7.0.0: 基本架构

  • 7.1.0:从 7.0.07.1.0 的所有变化

  • 8.0.0:从 7.1.08.0.0 的所有变化

备注

所有架构文件必须存储在 src/main/database/

9.4.4. 处理架构中的更改

定义了两个主要工作流

在版本发布期间

由于我们最多只保留 3 个版本的架构,因此在版本发布后,我们需要调整(展平)文件以维护在 Files structure 中定义的结构(这可能会发生,特定版本的架构不会有任何更改,这将导致相对空的 current-version 架构文件 - 仅使用 setVersion('component','<current-version></current-version>'); 设置组件的当前版本)。

例如,我们即将发布版本 8.0.0。这会在存储库中生成以下架构版本(在服务器示例中):

  • <database>-server-schema-7.0.0.sql: 基本架构

  • <database>-server-schema-7.1.0.sql: 包括对 7.1.0 的更改

  • <database>-server-schema-8.0.0.sql: 包括对 8.0.0 的更改

备注

列表中也可能会有维护版本,例如:<database>-server-schema-7.1.1.sql<database>-server-schema-7.1.2.sql

发布后,我们在 pom.xml 中指定下一个发布的版本(例如和 8.1.0 相同的版本将是 current-version 这使得最旧的可用版本是 7.1.0。因此,我们 必须7.1.0 中的所有更改合并到 7.0.0 中,创建版本为 7.1.0 的新基础文件,即:

  • <database>-server-schema-7.1.0.sql: 基本架构

  • <database>-server-schema-8.0.0.sql: 包括对 8.0.0 的更改

  • <database>-server-schema-8.1.0.sql: 包括对 8.1.0 的更改

维护发布

以下案例将使用实体版本示例进行讨论。评论将在线提供并做以下假设:

  • 版本继承: 5.1.0, 5.2.0, 7.0.0, 7.1.0, 8.0.0

  • 版本映射:master (8.0.0), stable (7.1.0), old-stable (7.0.0):

    • old-stable 分支中的架构文件

      • 5.1.0 (基础版)

      • 5.2.0 (升级版)

      • 7.0.0 (升级版)

    • stable 分支中的架构文件

      • 5.2.0 (基础版)

      • 7.0.0 (升级版)

      • 7.1.0 (升级版)

    • master 分支中的架构文件

      • 7.0.0 (基础版)

      • 7.1.0 (升级版)

      • 8.0.0 (升级版)

9.4.5. old-stable (和 stable) 中进行更改

如果我们在 old-stable 版本(和它的分支)中进行了架构更改,我们必须:

  • 创建具有升级版本号的新文件;

  • 将更改传播到 stablemaster 分支。

存储库更改:

  • old-stable 分支中的架构文件

    • 5.1.0 (基础版)

    • 5.2.0 (升级版)

    • 7.0.0 (升级版)

    • 7.0.1(升级) 在此处进行 更改 会导致架构版本升级到 7.0.1

  • stable 分支中的架构文件

    • 5.2.0 (基础版)

    • 7.0.0 (升级版)

    • 7.0.1(升级) 我们必须在此处移植 变化

    • 7.1.0 (升级版)

  • master 分支中的架构文件

    • 7.0.0 (基础版)

    • 7.0.1(升级) 我们必须在此处移植 变化

    • 7.1.0 (升级版)

    • 8.0.0 (升级版)

9.4.6. master 中进行更改

如果我们在 master 版本中进行了架构更改,我们不会将更改传播到 stableold-stable 分支。

  • old-stable 分支中的架构文件

    • 5.1.0 (基础版)

    • 5.2.0 (升级版)

    • 7.0.0 (升级版)

  • stable 分支中的架构文件

    • 5.2.0 (基础版)

    • 7.0.0 (升级版)

    • 7.1.0 (升级版)

  • master 分支中的架构文件

    • 7.0.0 (基础版)

    • 7.1.0 (升级版)

    • 8.0.0 (升级) 我们在此处进行 更改,因为这是开发版本,架构版本保持不变。

9.4.7. 实施细节

文件内控制

有两个主要的控制指令(用于 SchemaLoader):

  • -- QUERY START:-- QUERY END: 表示查询 - 每个都必须放在自己的单独文件中,查询由它们两个包围,例如:

    -- QUERY START:
    call TigPutDBProperty('schema-version', '5.1');
    -- QUERY END:
    
  • 使用 -- LOAD FILE: <path to .sql file> 获取其他文件 - 路径必须在同一行,遵循控制指令,例如:

    -- LOAD FILE: database/mysql-server-schema-7.0.0-schema.sql
    

在数据库中存储版本

每个存储库都有一个表 tig_schema_versions ,其中包含了有关所有已安装组件的信息及其在该特定存储库中的版本。此时会有一个关联的存储过程来获取和设置版本:

  • 表:

    tig_schema_versions (
      component varchar(100) NOT NULL,
      version varchar(100) NOT NULL,
      last_update timestamp NOT NULL,
      primary key (component)
    );
    
  • 存储过程 get/setVersion(‘component’,'version');

它将在名为 <RDBMS_name>-common-schema-<version>.sql 的文件中存储和维护

9.5. 数据库准备

Tigase 通常在每个数据库上使用相同的数据库模式和同一组存储过程和函数。但是,每个数据库的存储过程的架构创建的脚本和代码是不同的。因此,每个数据库系统手动准备数据库的过程是不同的。

从 v8.0.0 开始,大部分数据库任务已经自动化,其可以使用简单的文本调用,也可以使用交互式问答风格。我们 **不推荐**手动操作,但是我们将不同数据库的手动激活保留在附录中。如果您对我们如何管理和更新我们的数据库模式感兴趣,您可以访问我们 Redmine 安装的 Schema 文件维护 部分以获取更多详细信息。

附录条目

9.5.1. 架构实用程序

随着 v8.0.0 的发布,现在可以使用任务而不是调用特定方法来调用 Tigase dbSchemaLoader 实用程序。支持 Derby,MySQL,PostgreSQL,MSSQL 和 MongoDB。

要将此实用程序与任何数据库一起使用,您首先需要启动并运行数据库环境,并建立用户凭据。您可以使用 root 或具有管理员写入权限的帐户。

操作和变量

操作

操作架构实用程序非常简单!要使用它,请从安装目录运行此命令:

./scripts/tigase.sh [task] [params_file.conf] [options]

操作现在转换为任务,现在有其中三个:install-schema, upgrade-schema, 和 destroy-schema

  • upgrade-schema: 升级 config.tdsl 配置文件中指定的数据库架构。(此选项在这里被忽略)

  • install-schema:将架构安装到数据库。

  • destroy-schema: 销毁数据库和架构。危险

选项

使用以下选项进行自定义。粗体选项是必需的,{可能的选项在括号中}:

  • --help 打印任务的帮助。

  • -I--interactive - 启用交互模式,该模式将提示输入未定义的参数。

  • -T--dbType - 数据库类型 {derby,mongodb,mysql,postgresql,sqlserver}。

  • -C--components - 允许指定在安装架构时使用的组件。

用法

升级-架构

此任务将找到高于您当前版本的任何架构版本,并将它们安装到``config.tdsl`` 文件里配置的数据库中。

备注

要使用此实用程序,您必须使用已配置的配置文件完全设置 Tigase XMPP 服务器。

./scripts/tigase.sh upgrade-schema etc/tigase.conf

Windows 用户需要使用以下命令运行该命令:

java -cp "jars/*" tigase.db.util.SchemaManager "upgrade-schema" --config-file=etc/config.tdsl
安装架构

此任务将使用提供的参数安装架构。

如果您手动设置服务器,我们强烈建议使用此方法

./scripts/tigase.sh install-schema [Options]

此命令将使用 Derby 数据库在 localhost 上托管的名为 tigasedb 的数据库上安装 tigase。编辑数据库的用户名和密码是 tigase_passroot。请注意,-J 显式添加管理员,强烈建议使用 -N 传递密码。

如果使用的是windows系统,需要直接调用程序:

java -cp "jars/*" tigase.db.util.SchemaManager "install-schema" [options]
选项

架构安装选项如下,必填选项以粗体显示

  • --help, 输出帮助。

  • -I, --interactive - 启用交互模式,这将导致提示任何缺少的参数。

  • -C, --components= - 启用的组件标识符列表(+/-),可能的值: [amp, bosh, c2s, eventbus, ext-disco, http, mdns, message-archive, monitor, muc, pubsub, push, s2s, socks5, test, unified-archive, upload, ws2s] (默认: amp,bosh,c2s,eventbus,http,message-archive,monitor,muc,pubsub,s2s,ws2s) 。这对于某些组件(如 socks5)是必需的。

  • -T, --dbType= - 数据库服务器类型,可能的值为: [derby, mongodb, mysql, postgresql, sqlserver] (必需的)

  • -D, --dbName= - 数据库的名称将被创建(默认为 tigasedb)。(必需的

  • -H, --dbHostname= - 数据库实例的地址(默认为 localhost)。(必需的

  • -U, --dbUser= - 将专门创建用于访问 Tigase XMPP 服务器数据库的用户名(默认为 tigase_user)。(必需的

  • -P, --dbPass= - 将专门创建用于访问 Tigase XMPP 服务器数据库的用户密码(默认为 tigase_pass)。(必需的

  • -R, --rootUser= - 创建数据库 root 帐户用户名(默认为 root)其用于创建用户和数据库。(必需的

  • -A, --rootPass= - 创建数据库 root 帐户用户名(默认为 root)其用于创建用户和数据库。(必需的

  • -S, --useSSL - 为数据库连接启用 SSL 支持(如果数据库支持)(默认为 false)。

  • -F, --file= - 用逗号分隔的将要被处理的 SQL 文件列表。

  • -Q, --query= - 要执行的自定义查询,请参阅 Query function 了解详细信息。

  • -L, --logLevel= - 加载过程中使用的记录器级别(默认为 CONFIG)。

  • -J, --adminJID= - 用逗号分隔的管理员 JID(s) 的列表。

  • -N, --adminJIDpass= - 将用于输入JID(s) 的密码 - 一个密码可用于所有配置的JIDs。

  • --getURI= - 生成数据库 URI(默认为 false)。

  • --ignoreMissingFiles= - 强制忽略丢失的文件错误(默认为 false)。

查询功能

如果您决定自定义自己的函数,或者想要将特定信息放入数据库,您可以使用 -query 函数执行单个查询步骤。

./scripts/tigase.sh install-schema -T mysql -D tigasedb -R root -A root -Q "CREATE TABLE tigasedb.EXTRA_TABLE (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10) NOT NULL)"

当然,这会添加一个意想不到的表其会破坏 tigasedb 的架构,您将收到以下消息:

tigase.db.util.DBSchemaLoader       printInfo          WARNING       Database schema is invalid

但这是一个示范,演示如何通过数据库运行查询而无需使用其他工具。请注意,您需要为每个查询选择特定的数据库。

破坏架构

这将破坏配置文件中指定的数据库。

警告

此操作不可逆

./scripts/tigase.sh destroy-schema etc/config.tdsl

仅当您希望破坏数据库并且没有可恢复信息时才使用此选项。

Windows 用户需要直接调用该方法:

java -cp "jars/*" tigase.db.util.SchemaManager "destroy-schema" etc/config.tdsl

关于 MySQL 的注意事项

如果您使用这些命令,可能会导致以下错误:

tigase.util.DBSchemaLoader       validateDBConnection    WARNING    Table 'performance_schema.session_variables' does not exist

如果发生这种情况,您将需要使用以下命令升级您的 MySQL 版本:

mysql_upgrade -u root -p --force

输入密码并升级 MySQL 后,在使用 Tigase 数据库时不应再显示架构错误。

9.5.2. 为 Tigase 服务器准备 MySQL 数据库

本指南介绍如何准备 MySQL 数据库以连接 Tigase 服务器。

MySQL 数据库可以通过多种方式进行准备。大多数 Linux 发行版都包含一些工具,其允许您从 shell 命令行完成所有步骤。为了确保它以相同的方式在所有平台上工作,我们将首先展示如何在 MySQL 命令行客户端下进行操作。

从 MySQL 命令行工具配置

在 Linux 或 MS Windows 环境中运行 MySQL 命令行客户端,并从 Tigase 安装目录输入以下指令:

mysql -u root -p

登录后,为 Tigase 服务器创建数据库:

mysql> create database tigasedb;

添加 tigase_user 用户并授予它对 tigasedb 数据库的访问权限。取决您计划如何连接到数据库(本地或通过网络),如果您不确定,请使用以下全部命令或命令之一:

  • 授予对从任何网络地址连接的 tigase_user 的访问权限。

    mysql> GRANT ALL ON tigasedb.* TO tigase_user@'%'
                IDENTIFIED BY 'tigase_passwd';
    
  • 授予对从 localhost 连接的 tigase_user 的访问权限。

    mysql> GRANT ALL ON tigasedb.* TO tigase_user@'localhost'
                IDENTIFIED BY 'tigase_passwd';
    
  • 仅授予对从本地计算机连接的 tigase_user 的访问权限。

    mysql> GRANT ALL ON tigasedb.* TO tigase_user
                IDENTIFIED BY 'tigase_passwd';
    

现在您可以更新数据库中的用户权限变化:

mysql> FLUSH PRIVILEGES;

重要

必须在 MySQL 服务器中启用 log_bin_trust_function_creators 选项,例如通过运行:

mysql> SET GLOBAL log_bin_trust_function_creators = 1;

安装架构

从 v8.0.0 开始,架构不再链接,需要按照以下顺序手动安装。

切换到您创建的数据库:

mysql> use tigasedb;

备注

我们假设您在 Linux 中从 Tigase 安装目录运行 mysql 客户端,因此所有文件链接都是相对的。

接下来安装架构文件:

mysql> source database/mysql-common-0.0.1.sql;

您需要对以下文件重复此过程:

mysql-common-0.0.1.sql
mysql-common-0.0.2.sql
mysql-server-7.0.0.sql
mysql-server-7.1.0.sql
mysql-server-8.0.0.sql
mysql-muc-3.0.0.sql
mysql-pubsub-3.1.0.sql
mysql-pubsub-3.2.0.sql
mysql-pubsub-4.0.0.sql
mysql-http-api-2.0.0.sql

其他组件可能需要安装,例如:

mysql-socks5-2.0.0.sql
mysql-push-1.0.0.sql
mysql-message-archiving-2.0.0.sql
mysql-unified-archive-2.0.0.sql

Windows 说明:

在 Windows 上,您可能必须输入完整路径,假设 Tigase 安装在 C:Program FilesTigase 中:

mysql> source c:/Program Files/Tigase/database/mysql-common-0.0.1.sql;
mysql> source c:/Program Files/Tigase/database/mysql-common-0.0.2.sql;
mysql> source c:/Program Files/Tigase/database/mysql-server-7.0.0.sql;
and so on...

从 Linux Shell 命令行进行配置

按照以下步骤准备 MySQL 数据库:

为 Tigase 服务器创建数据库空间:

mysqladmin -p create tigasedb

添加 tigase_user 用户并授予它对 tigasedb 数据库的访问权限。取决您计划如何连接到数据库(本地或通过网络),如果您不确定,请使用以下全部命令或命令之一:

选择性访问配置

授予对从任何网络地址连接的 tigase_user 的访问权限。

echo "GRANT ALL ON tigasedb.* TO tigase_user@'%' \
            IDENTIFIED BY 'tigase_passwd'; \
            FLUSH PRIVILEGES;" | mysql -u root -pdbpass mysql

授予对从 localhost 连接的 tigase_user 的访问权限。

echo "GRANT ALL ON tigasedb.* TO tigase_user@'localhost' \
            IDENTIFIED BY 'tigase_passwd'; \
            FLUSH PRIVILEGES;" | mysql -u root -pdbpass mysql

仅授予对从本地计算机连接的 tigase_user 的访问权限。

echo "GRANT ALL ON tigasedb.* TO tigase_user \
            IDENTIFIED BY 'tigase_passwd'; \
            FLUSH PRIVILEGES;" | mysql -u root -pdbpass mysql

架构安装

将正确的 mysql 架构加载到数据库中。

mysql -u dbuser -p tigasedb < mysql-common-0.0.1.sql
mysql -u dbuser -p tigasedb < mysql-common-0.0.2.sql
etc..

您需要对以下文件重复此过程:

mysql-common-0.0.1.sql
mysql-common-0.0.2.sql
mysql-server-7.0.0.sql
mysql-server-7.1.0.sql
mysql-server-8.0.0.sql
mysql-muc-3.0.0.sql
mysql-pubsub-3.1.0.sql
mysql-pubsub-3.2.0.sql
mysql-pubsub-4.0.0.sql
mysql-http-api-2.0.0.sql

其他组件可能需要安装,例如:

mysql-socks5-2.0.0.sql
mysql-push-1.0.0.sql
mysql-message-archiving-2.0.0.sql
mysql-unified-archive-2.0.0.sql

为支持 UTF-8 配置 MySQL

在 my.conf 中放入以下几行:

[mysql]
default-character-SET=utf8

[client]
default-character-SET=utf8

[mysqld]
init_connect='SET collation_connection = utf8_general_ci; SET NAMES utf8;'
character-set-server=utf8
default-character-SET=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake

然后从命令行shell检查设置连接到数据库:

SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'character_set_client';

如果其中任何一个显示其他内容然后显示 ‘utf8’,那么您需要使用以下命令对其进行修复:

ALTER DATABASE tigasedb DEFAULT CHARACTER SET utf8;

您现在还可以测试您的数据库安装是否接受 UTF-8 数据。确保这一点的最简单方法是创建一个带有 UTF-8 字符的帐户:

call TigAddUserPlainPw('żół[email protected]', 'żółw');

然后检查该帐户是否已创建:

SELECT * FROM tig_users WHERE user_id = 'żół[email protected]';

如果最后一个命令没有给您任何结果,则意味着您的设置仍然存在问题。您可能还想检查您的 shell 设置以确保您的命令行 shell 支持 UTF-8 字符并将它们正确传递给 MySQL:

export LANG=en_US.UTF-8
export LOCALE=UTF-8
export LESSCHARSET='utf-8'

似乎 MySQL 5.0.x 在连接字符串中还需要额外的参数:’&useUnicode=true&characterEncoding=UTF-8’ 而 MySQL 5.1.x 似乎不需要它,但对于两个版本都有此字符串并没有什么坏处。您必须编辑 etc/config.tdsl 文件并将其附加到数据库连接字符串上。

但是,对于 MySQL 5.1.x,您还需要更新 Tigase 使用的所有数据库存储过程和函数的代码。此更新针对 Tigase 版本 4.4.x 及更高版本,但是如果您使用旧版本的 Tigase 服务器,您可以使用来自 SVN 的文件重新加载存储过程。

其他值得考虑的 MySQL 设置

还有许多其他尤其是对于性能改进有用的选项。请注意,您必须查看它们,因为其中一些可能会影响数据可靠性,并且仅对性能或负载测试安装有用。

# InnoDB seems to be a better choice
# so lets make it a default DB engine
default-storage-engine = innodb

一些主要影响性能的通用MySQL 设置:

key_buffer = 64M
max_allowed_packet = 32M
sort_buffer_size = 64M
net_buffer_length = 64K
read_buffer_size = 16M
read_rnd_buffer_size = 16M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 10M
query_cache_size = 64M

InnoDB 特定设置:

# Keep data in a separate file for each table
innodb_file_per_table = 1
# Allocate memory for data buffers
innodb_buffer_pool_size = 1000M
innodb_additional_mem_pool_size = 100M
# A location of the MySQL database
innodb_data_home_dir = /home/databases/mysql/
innodb_log_group_home_dir = /home/databases/mysql/
# The main thing here is the 'autoextend' property
# without it your data file may reach maximum size and
# no more records can be added to the table.
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_file_size = 10M
innodb_log_buffer_size = 32M
# Some other performance affecting settings
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_thread_concurrency = 16

这些设置可能未针对您的系统进行全面优化,并且仅在我们的系统上进行了测试。如果您为您的系统找到了更好的设置,请随时 让我们知道

支持表情符号和其他图标

Tigase 数据库架构可以支持表情符号和其他图标,但是在 mysqld 设置中使用 UTF-8 将不允许这样做。要使用设置来支持表情符号和其他图标,我们建议您在 MySQL 配置文件中使用以下内容:

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
character-set-client-handshake = FALSE

这样做,Tigase XMPP 服务器数据库仍将使用 utf8 字符集,以 utf8_general_ci 作为排序规则,并且只有需要支持表情符号的字段才会转换为 utf8mb4

备注

如果由于某种原因,将上述设置应用于您的 MySQL 实例,您仍然会收到 java.sql.SQLException: Incorrect string value: ` you should add to your database URI passed in Tigase XMPP Server following configuration `&useUnicode=true&characterEncoding=UTF-8。如果这也失败了,那么你可以尝试添加 &connectionCollation=utf8mb4_bin 作为最后一着。这改变了以前发布旧 MySQL JDBC 连接器的版本的情况。

备注

Tigase XMPP 服务器数据库应该使用 utf8_general_ci 排序规则创建,因为它可以正常工作并且是 MySQL 支持的 utf8mb4_general_ci 排序规则中最快的

9.5.3. 为 Tigase 服务器准备 Derby 数据库

本指南介绍如何准备 Derby 数据库以连接 Tigase 服务器。

基本设置

Derby 数据库的准备非常简单,但是做了以下假设

  • DerbyDB - Derby 数据库名称

  • database/ 目录包含所有必要的架构文件

  • jars/libs/ 目录包含 Tigase 和 Derby 二进制文件

通常的做法

从 Tigase 主目录执行以下命令(相应的 Linux 和 Windows)

备注

您必须首先使用这些 sql 文件!

Linux

java -Dij.protocol=jdbc:derby: -Dij.database="DerbyDB;create=true" -cp libs/derby.jar:libs/derbytools.jar:jars/tigase-server.jar org.apache.derby.tools.ij database/derby-common-0.0.1.sql

Windows

java -Dij.protocol=jdbc:derby: -Dij.database="DerbyDB;create=true" -cp libs\derby.jar;libs\derbytools.jar;jars\tigase-server.jar org.apache.derby.tools.ij "database\derby-common-0.0.1.sql"

这将在 Tigase 主目录中创建名为 DerbyDB 的 Derby 数据库,并加载 common v0.1 的 common 版本。

您将需要按以下顺序再次重复此过程:

derby-common-0.0.1.sql
derby-common-0.0.2.sql
derby-server-7.0.0.sql
derby-server-7.1.0.sql
derby-server-8.0.0.sql
derby-muc-3.0.0.sql
derby-pubsub-3.1.0.sql
derby-pubsub-3.2.0.sql
derby-pubsub-4.0.0.sql
derby-http-api-2.0.0.sql

其他组件可能需要安装,例如:

derby-socks5-2.0.0.sql
derby-push-1.0.0.sql
derby-unified-archive-2.0.0.sql

将 Tigase 连接到数据库

设置数据库后,在 Tigase 中配置 config.tdsl 文件并添加以下配置:

dataSource {
    default () {
        uri = 'jdbc:derby:{location of derby database};'
    }
}

9.5.4. 为 Tigase 服务器准备 MS SQL Server 数据库

本指南介绍如何准备 MS SQL Server 数据库以将 Tigase 服务器连接到它。

预计存在 Microsoft SQL Server 的有效安装。以下指南将描述将 MS SQL Server 与 Tigase XMPP Server 一起使用所需的必要配置。

准备 MS SQL Server 实例

安装 MS SQL Server 后,需要配置实例以处理传入的 JDBC 连接。为此,需要打开 SQL Server Configuration Manager。在左侧面板中找到 SQL Server Configuration Manager,然后找到 SQL Server Network Configuration → Protocols for ${INSTANCE_NAME}。在右侧面板中选择实例后,选择 TCP/IP 并打开 Properties,在 General 部分的 Protocol 选项卡中为 Enabled 属性选择 Yes。在 IP 地址选项卡中,为您希望 MS SQL Server 处理的所有 IP 地址的活动和启用属性选择是。随后将 TCP 端口属性(如果缺失)设置为默认值 - 1433。之后可能需要重新启动实例。

使用 MS SQL Server Management Studio 进行配置

为了准备数据库,您可以使用向导或在查询编辑器中直接执行查询。首先,您需要建立与 MS SQL Server 实例的连接。从对象资源管理器中选择连接并在连接到服务器对话框中输入管理员凭据。

使用向导

  • 创建登录

    在左侧面板中选择 Security → Logins 并从上下文菜单中选择 New Login,在向导窗口中输入所需的登录名,选择 SQL Server 身份验证并输入所需的密码,然后单击 OK 确认操作

  • 创建数据库

    从对象资源管理器中选择数据库节点并从上下文菜单中选择新数据库;在向导窗口中输入所需的数据库名称,并在所有者字段中输入先前创建的登录名;随后用 OK 确认操作。

使用查询

从 Object Explorer 根节点的上下文菜单中选择 New Query。在查询窗口中执行以下语句,根据您的喜好调整详细信息:

USE [master]
GO

CREATE DATABASE [tigasedb];
GO

CREATE LOGIN [tigase] WITH PASSWORD=N'tigase12', DEFAULT_DATABASE=[tigasedb]
GO

ALTER AUTHORIZATION ON DATABASE::tigasedb TO tigase;
GO
导入架构

从文件菜单中选择 Open → File(或使用 Ctrl+O),然后打开以下文件:

sqlserver-common-0.0.1.sql
sqlserver-common-0.0.2.sql
sqlserver-server-7.0.0.sql
sqlserver-server-7.1.0.sql
sqlserver-server-8.0.0.sql
sqlserver-muc-3.0.0.sql
sqlserver-pubsub-3.1.0.sql
sqlserver-pubsub-3.2.0.sql
sqlserver-pubsub-4.0.0.sql
sqlserver-http-api-2.0.0.sql

备注

这些文件必须按顺序完成!它们没有关联,因此可能需要一次完成一个。

其他组件可能需要安装,例如:

sqlserver-socks5-2.0.0.sql
sqlserver-push-1.0.0.sql
sqlserver-message-archiving-2.0.0.sql
sqlserver-unified-archive-2.0.0.sql

随后从工具栏上可用的数据库 (Ctrl+U) 列表中选择创建的数据库,并按上面列出的顺序执行每个打开的文件。

从命令行工具配置

数据库的创建和架构的导入也可以从命令行完成。为此,请从安装 Tigase XMPP 服务器的目录中执行以下命令,否则需要相应地调整架构的路径:

sqlcmd -S %servername% -U %root_user% -P %root_pass% -Q "CREATE DATABASE [%database%]"
sqlcmd -S %servername% -U %root_user% -P %root_pass% -Q "CREATE LOGIN [%user%] WITH PASSWORD=N'%password%', DEFAULT_DATABASE=[%database%]"
sqlcmd -S %servername% -U %root_user% -P %root_pass% -d %database% -Q "ALTER AUTHORIZATION ON DATABASE::%database% TO %user%;"
sqlcmd -S %servername% -U %root_user% -P %root_pass% -d %database% -i database\sqlserver-schema-7-1-schema.sql
sqlcmd -S %servername% -U %root_user% -P %root_pass% -d %database% -i database\sqlserver-schema-7-1-sp.sql
sqlcmd -S %servername% -U %root_user% -P %root_pass% -d %database% -i database\sqlserver-schema-7-1-props.sql
sqlcmd -S %servername% -U %root_user% -P %root_pass% -d %database% -i database\sqlserver-pubsub-schema-3.2.0.sql

以上可以使用提供的脚本 %tigase-server%scriptsdb-create-sqlserver.cmd 自动化(注意:由于保持正确的路径,它需要从主 Tigase XMPP Server 目录执行):

$ scripts\db-create-sqlserver.cmd %database_servername% %database_name% %tigase_username% %tigase_password% %root_username% %root_password%

如果未提供参数,则使用以下默认值:

%database_servername%=localhost
%database_name%=tigasedb
%tigase_username%=tigase
%tigase_password%=tigase12
%root_username%=root
%root_password%=root

Tigase 配置 - config.tdsl

MS SQL Server 的配置遵循普遍数据库约定。

dataSource {
    default () {
        uri = 'jdbc:sqlserver://db_hostname:port[;property=val]'
    }
}

其中任何数量的附加参数可以(并且应该)包括:

  • databaseName - 数据库名称

  • user - 配置为访问数据库的用户名

  • password - 上述用户名的密码

  • schema - 数据库架构的名称

  • lastUpdateCount - ‘false’ value 导致返回所有更新计数,包括服务器触发器返回的更新计数

例子:

dataSource {
    default () {
        uri = 'jdbc:sqlserver://hostname:1433;databaseName=tigasedb;user=tigase;password=tigase12;schema=dbo;lastUpdateCount=false'
    }
}

JDBC:jTDS 与 MS JDBC 驱动程序(已过时)

以前 Tigase XMPP 服务器附带 jTDS 开源驱动程序,但是从 8.3.0 开始,我们切换到 Microsoft 自己提供的 FOSS 驱动程序。以前的 jdbc url 将自动回退到 Microsoft 驱动程序。

  • Microsoft 驱动:

    dataSource {
        default () {
            uri = 'jdbc:sqlserver://...'
        }
    }
    

为 Tigase 服务器准备 PostgreSQL 数据库

本指南介绍如何准备 PostgreSQL 数据库以连接到 Tigase 服务器。

可以通过多种方式准备 PostgreSQL 数据库。下面介绍两种可能的方式。以下假设适用于这两种方法:

  • admin_db_user - 具有管理员权限的数据库用户

  • tigase_user - Tigase 的数据库用户

  • tigasedb - Tigase 数据库

从 PostgreSQL 命令行工具配置

运行 PostgreSQL 命令行客户端并输入以下指令:

添加 tigase_user:

psql=# create role tigase_user with login password 'tigase123';

接下来,为 Tigase 服务器创建数据库,并使用 tigase_user 作为数据库所有者:

psql=# create database tigasedb owner tigase_user;

架构安装

加载数据库架构以从您要使用的 Tigase 版本相对应的文件中初始化 Tigase 服务器。首先你需要切换到 tigasedb

psql=# \c tigasedb

首先应用基本架构

psql=# \i database/postgresql-common-0.0.1.sql

继续添加下面列出的架构文件:

postgresql-common-0.0.1.sql
postgresql-common-0.0.2.sql
postgresql-server-7.0.0.sql
postgresql-server-7.1.0.sql
postgresql-server-8.0.0.sql
postgresql-muc-3.0.0.sql
postgresql-pubsub-3.1.0.sql
postgresql-pubsub-3.2.0.sql
postgresql-pubsub-4.0.0.sql
postgresql-http-api-2.0.0.sql

其他组件可能需要安装,例如:

postgresql-socks5-2.0.0.sql
postgresql-push-1.0.0.sql
postgresql-message-archiving-2.0.0.sql
postgresql-unified-archive-2.0.0.sql

从 Linux Shell 命令行进行配置

按照以下步骤准备 PostgreSQL 数据库:

首先,添加 tigase_user:

createuser -U admin_db_user -W -D -R -S -P tigase_user

系统将要求您提供 admin_db_user 的凭据和新数据库用户的密码。

使用 tigase_user 作为数据库所有者为 Tigase 服务器创建数据库:

createdb -U admin_db_user -W -O tigase_user tigasedb

数据库架构安装

加载数据库模式以初始化 Tigase 服务器

psql -q -U tigase_user -W tigasedb -f database/postgresql-common-0.0.1.sql
psql -q -U tigase_user -W tigasedb -f database/postgresql-common-0.0.2.sql
etc..

继续添加下面列出的架构文件:

postgresql-common-0.0.1.sql
postgresql-common-0.0.2.sql
postgresql-server-7.0.0.sql
postgresql-server-7.1.0.sql
postgresql-server-8.0.0.sql
postgresql-muc-3.0.0.sql
postgresql-pubsub-3.1.0.sql
postgresql-pubsub-3.2.0.sql
postgresql-pubsub-4.0.0.sql
postgresql-http-api-2.0.0.sql

其他组件可能需要安装,例如:

postgresql-socks5-2.0.0.sql
postgresql-push-1.0.0.sql
postgresql-message-archiving-2.0.0.sql
postgresql-unified-archive-2.0.0.sql

备注

上述命令应从 Tigase 主目录执行。初始化架构文件也应该在 Tigase 安装的 database/ 目录中本地可用。

9.5.5. 为 MongoDB 准备 Tigase

Tigase 现在支持 MongoDB 进行身份验证,设置和存储库。如果您希望将 MongoDB 用于 Tigase,请使用本指南来帮助您。

依赖项

要运行 Tigase MongoDB 支持库,需要适用于 Java 的 MongoDB 驱动程序,可以从 这里 下载。此驱动程序需要放置在 Tigase XMPP Server 安装目录中的 jars/ 目录中。如果您使用的是 dist-max 发行版,则它已经包含在内。

配置

请注意,全新安装的 MongoDB 没有安装用户或数据库。设置 MongoDB 后,您将需要创建一个用于 Tigase 的用户。为此,通过在 windows 的 cmd 窗口中运行 mongo.exe 来调出 mongo 控制台,或者在 linux 中运行 mongo。连接后,输入以下内容:

use admin
db.createUser( { user: "tigase",
                 pwd: "password",
                 customData: { employeeId: 12345 },
                 roles: [ "root" ]
                }
              )

一定要给这个用户一个 root 角色,以便正确地写入数据库。一旦收到 user successfully created 消息,就可以在 MongoDB 上安装 tigase。

Tigase XMPP 服务器的用户存储库配置

要将 Tigase XMPP 服务器配置用于 MongoDB,您需要在 etc/config.tdsl 文件中将 dataSource 设置为正确的 MongoDB URI,其指向应该使用的 MongoDB 数据库(如果不存在,它将由 MongoDB 创建)。 userRepository 属性不应设置为让 Tigase XMPP 服务器自动检测 UserRepository 的正确实现。 Tigase XMPP 服务器将在 MongoDB 中创建适当的集合(如果它们不存在),则不需要架构文件。

XMPP 服务器在本地实例中指向 MongoDB 数据库 tigase_test 的示例配置:

dataSource {
    default () {
        uri = 'mongodb://user:pass@localhost/tigase_test'
    }
}
userRepository {
    default () {}
}
authRepository {
    default () {}
}

如果 Tigase 服务器无法检测到正确的存储层实现,则可以强制使用由Tigase通过 etc/config.tdsl 文件中的以下行提供的其中之一:

userRepository {
    default () {
        cls = 'tigase.mongodb.MongoRepository'
    }
}
authRepository {
    default () {
        cls = 'tigase.mongodb.MongoRepository'
    }
}

每个组件都应该能够使用正确的实现来支持使用此 URI 的 MongoDB。 MongoDB URI 也可以作为任何组件配置中的任何 URI 传递。

MUC 的配置

默认情况下,如果 Tigase 配置使用 MongoDB 作为默认存储,MUC 组件将使用 MongoDB 存储数据。但是,如果您想使用不同的 MongoDB 数据库来存储 MUC 消息存档,您可以通过在 etc/config.tdsl 文件中添加以下行来做到这一点:

muc {
    'history-db-uri' = 'mongodb://user:pass@localhost/tigase_test'
}

如果 MUC 组件无法为 MongoDB 检测和使用适当的存储层,您可以通过在 config.tdsl 文件中使用以下行来强制它使用 Tigase 提供的存储层:

muc {
    'history-db' = 'tigase.mongodb.muc.MongoHistoryProvider'
}

PubSub 的配置

默认情况下,如果 Tigase 配置将MongoDB 用作默认存储,则 PubSub 组件将使用 MongoDB 存储数据。但是,如果您想使用不同的 MongoDB 数据库来存储 PubSub 组件数据,您可以通过在 etc/config.tdsl 文件中添加以下行来实现:

pubsub {
    'pubsub-repo-url' = 'mongodb://user:pass@localhost/tigase_test'
}

如果 MUC 组件无法为 MongoDB 检测和使用适当的存储层,您可以通过在 config.tdsl 文件中使用以下行来强制它使用 Tigase 提供的存储层:

pubsub {
    'pubsub-repo-class' = 'tigase.mongodb.pubsub.PubSubDAOMongo'
}

消息归档的配置

默认情况下,如果将 Tigase 配置将MongoDB 用作默认存储,则消息存档组件将使用 MongoDB 存储数据。但是,如果您想使用不同的 MongoDB 数据库来存储消息存档,您可以通过在 etc/config.tdsl 文件中添加以下行来做到这一点:

'message-archive' {
    'archive-repo-uri' = 'mongodb://user:pass@localhost/tigase_test'
}

如果消息存档组件未能检测到并为 MongoDB 使用适当的存储层,您可以通过在 config.tdsl 文件中使用以下行来强制它使用 Tigase 提供的存储层:

'message-archive' {
    'archive-repo-class' = 'tigase.mongodb.archive.MongoMessageArchiveRepository'
}

架构描述

该描述仅包含架构的基本描述,并且仅包含其基本部分。如果加载并配置 Tigase XMPP 服务器的其他组件以使用 MongoDB,则可能会创建更多集合。

9.5.6. Tigase XMPP 服务器架构

UserRespository 和 AuthRepository 的基本架构由两个集合组成: . tig_users - 包含用户列表。 tig_nodes - 以树状方式包含与用户相关的数据

tig_users 集合包含以下字段:

Table 9. tig_users

名称

描述

_id

用户 id 是用户 jid 的 SHA256 哈希(原始字节数组)。

user_id

包含完整的用户 jid。

用户所属的域,以便于按域查找用户。

密码

用户密码(升级到 8.0.0 后将被删除)。

tig_nodes 集合包含以下字段

Table 10. tig_nodes

名称

描述

_id

由 MongoDB 自动生成的行的 id。

uid

用户 id 是用户 jid 的 SHA256 哈希(原始字节数组)。

节点

树状结构中节点的完整路径,由 / 分隔(可能不存在)。

为其设置节点值的键。

为节点键设置的值。

Tigase XMPP 服务器还使用其他的集合来存储离线消息

Table 11. msg_history collection

名称

描述

from

消息发送者的完整用户 jid。

from_hash

消息发送者 jid 的 SHA256 哈希作为原始字节数组。

to

消息接收者的完整用户 jid。

to_hash

消息接收者完整 jid 的 SHA256 哈希作为原始字节数组。

ts

消息的时间戳作为日期。

消息

包含消息的序列化 XML 节。

expire-at

消息过期的时间戳(如果消息包含 AMP expire-at set)。

由于 AuthRepository 中身份验证和凭据存储的变化,我们将 password 字段从 tig_users 集合移动到了一个新创建的名为 tig_user_credentials 的集合。

这个新集合有以下字段:

名称

描述

_id

MongoDB自动生成的文档id

uid

存储凭据用户的 SHA256 哈希

用户名

身份验证期间提供的用户名(或 default

帐户状态

帐户状态的名称(来自`tig_users`的用户文档中存储的值的副本)

此外,对于每种机制,我们在此对象中存储单独的字段,因此对于:

  • PLAIN 我们有 PLAIN 字段,该字段具有此机制的值

  • SCRAM-SHA-1 我们有 SCRAM-SHA-1 字段,该字段具有此机制的值

  • 等等……​

升级不是一步完成的,而是在特定用户登录后完成。在身份验证期间,如果 tig_user_credentials 中没有数据,Tigase XMPP Server 将检查 tig_userpassword 字段是否存在。如果确实存在,并且已填写凭据,则将迁移到新集合。

9.6. 数据库中的哈希用户密码

警告

此功能仍然可用,但自 v8.0.0 起,密码默认加密存储。我们不建议使用这些设置。

默认情况下,用户密码以纯文本形式存储在 Tigase 的数据库中。但是,有一种简单的方法可以让它们以一种已经支持的方式进行编码,甚至可以自己添加新的编码算法。

在数据库中以哈希格式存储密码可以避免使用纯文本密码验证机制。您不能在数据库中使用哈希密码和非纯文本密码身份验证。另一方面,服务器和客户端之间的连接几乎总是由 SSL/TLS 保护,因此纯文本密码验证方法可能比将纯文本密码存储在数据库中的问题更小。

尽管如此,在 Tigase 的数据库中进行调整还是很简单的。

9.6.1. 快捷方式

从命令行连接到您的数据库并对 MySQL 数据库执行以下语句:

call TigPutDBProperty('password-encoding', 'encoding-mode');

其中编码模式是以下之一:

  • MD5-PASSWORD 数据库存储来自用户密码的 MD5 哈希码。

  • MD5-USERID-PASSWORD 数据库存储来自连接用户的裸 JID 和密码的 MD5 哈希码。

  • MD5-USERNAME-PASSWORD 数据库存储来自连接用户名(localpart)和密码的 MD5 哈希码。

例如:

call TigPutDBProperty('password-encoding', 'MD5-PASSWORD');

9.6.2. 全程路线

密码存储在数据库中的方式由 Tigase 数据库架构属性控制。数据库架构中的属性可以通过一个名为 TigPutDBProperty(key, value) 的存储程序来设置。还可以用另一个名为 TigGetDBProperty(key) 的存储函数从 DB 架构中检索属性。

调用它们的最简单方法是通过数据库的命令行界面。

就本指南而言,假设我们有一个 MySQL 数据库和一个测试帐户:test@example.com,密码为 test77

默认情况下,Tigase 的大多数 DB 操作包括用户身份验证都是使用存储程序执行的。因此,首先要做的是确保存储程序正常工作。

创建测试用户帐户

要添加新用户帐户,我们使用存储程序:TigAddUserPlainPw(bareJid, password)。如您所见,程序名称有一个奇怪的附录:PlainPw。不管它是如何存储在数据库中的,这个程序接受普通密码。因此,无论是明文密码还是在数据库中哈希码,它都是安全且易于使用的。也有没有此附录的程序版本,但它们对数据格式很敏感,并且始终必须以存储在数据库中的确切格式传递密码。

所以,让我们添加一个新的用户帐户:

call TigAddUserPlainPw('[email protected]', 'test77');

如果结果为’Query OK’,则表示用户帐户已成功创建。

测试用户身份验证

我们现在可以验证用户身份:

call TigUserLoginPlainPw('[email protected]', 'test77');

如果身份验证成功,结果如下所示:

+--------------------+
| user_id            |
+--------------------+
| '[email protected]' |
+--------------------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

如果身份验证不成功,结果如下所示:

+---------+
| user_id |
+---------+
|    NULL |
+---------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

密码编码检查

TigGetDBProperty 是一个函数,而不是 MySQL 数据库中的程序,所以我们必须使用 select 来调用它:

select TigGetDBProperty('password-encoding');

最有可能的输出是这样的:

+---------------------------------------+
| TigGetDBProperty('password-encoding') |
+---------------------------------------+
| NULL                                  |
+---------------------------------------+
1 row in set, 1 warning (0.00 sec)

这意味着使用默认密码编码,以纯文本形式,因此没有编码。我们实际上可以直接在数据库中检查这个:

select uid, user_id, user_pw from tig_users where user_id = '[email protected]';

纯文本密码格式的预期结果是:

+-----+--------------------+---------+
| uid | user_id            | user_pw |
+-----+--------------------+---------+
|  41 | '[email protected]' | test77  |
+-----+--------------------+---------+
1 row in set (0.00 sec)

密码编码更改

现在让我们将密码编码设置为 MD5 哈希:

call TigPutDBProperty('password-encoding', 'MD5-PASSWORD');

‘Query OK’,表示密码编码已成功更改。当然,我们只是改变了属性。数据库中所有现有的密码仍然是纯文本格式。因此,我们预计对用户进行身份验证的尝试会失败:

call TigUserLoginPlainPw('[email protected]', 'test777');
+---------+
| user_id |
+---------+
|    NULL |
+---------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

我们可以通过更新数据库中的用户密码来解决这个问题:

call TigUpdatePasswordPlainPw('[email protected]', 'test777');
Query OK, 1 row affected (0.01 sec)

mysql> call TigUserLoginPlainPw('[email protected]', 'test777');
+--------------------+
| user_id            |
+--------------------+
| '[email protected]' |
+--------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

9.7. Tigase 服务器和多个数据库

在 Tigase XMPP Server 中几乎总是可以从所有其他 XMPP 信息(如花名册、电子名片等)中分离用户身份验证数据。配置可能而且非常简单。此外,始终可以容易地为每个 Tigase 组件(MUC, PubSub, AMP)分配不同的数据库,以记录服务器统计信息。几乎每种数据类型或组件都可以将信息存储在不同的位置,这些可通过配置文件简单易行地进行设置。

然而,鲜为人知的是,每个虚拟域也可以有不同的数据库。这可用于用户存储库和身份验证存储库。这也允许非常有趣的配置,例如用户数据库共享,其中每个分片保留特定域的用户,或者如果每个域指的是不同的客户或一组人,则基于虚拟域物理拆分数据。

那我们怎么做呢?

这通过 Tigase 的配置文件很容易做到。

dataSource {
    default () {
        uri = 'jdbc:mysql://db2.tigase/dbname?user&password'
    }
    'default-auth' () {
        uri = 'jdbc:mysql://db1.tigase/dbname?user&password'
    }
}
userRepository {
    default () {}
}
authRepository {
    default () {
        cls = 'tigase.db.jdbc.TigaseCustomAuth'
        'data-source' = 'default-auth'
    }
}

此配置仅为用户存储库和身份验证存储库定义了一个默认数据库。默认意味着当没有为特定虚拟域指定存储库时使用它。但是,对每个虚拟域您可以拥有一个单独的用户和身份验证存储库。

下面是它的工作原理:

首先,让我们为所有 VHost 定义我们的默认数据库

dataSource {
    default () {
        uri = 'jdbc:mysql://db2.tigase/dbname?user&password'
    }
    'default-auth' () {
        uri = 'jdbc:mysql://db1.tigase/dbname?user&password'
    }
}
userRepository {
    default () {}
}
authRepository {
    default () {
        cls = 'tigase.db.jdbc.TigaseCustomAuth'
        'data-source' = 'default-auth'
    }
}

现在,我们有了 VHost: domain1.com 这个 VHost 的用户身份验证数据存储在 Drupal 数据库中

dataSource {
  'domain1.com-auth' () {
    uri = jdbc:mysql://db7.tigase/dbname?user&password'
  }
}
authRepository {
  domain1.com () {
    cls = 'tigase/db/jdbc.TigaseCustomAuth'
    'data-source' = 'domain1.com-auth'
  }
}

所有其他用户数据都存储在 Tigase 的 MySQL 标准数据库中

dataSource {
  'domain1.com' () {
    uri = jdbc:mysql://db4.tigase/dbname?user&password'
  }
}
userRepository {
  domain1.com () {}
}

Next VHost: domain2.com 用户身份验证在 LDAP 服务器中,但所有其他用户数据都存储在 Tigase 的标准数据库中

authRepository {
    domain2.com () {
        cls = 'tigase.db.ldap.LdapAuthProvider'
        uri = 'ldap://ldap.domain2.com:389'
        'data-source' = 'default'
    }
}

现在这是新事物,我们有一个自定义身份验证存储库和单个域的单独用户设置。请注意我们如何定义为其设置自定义参数的 VHost

authRepository {
    domain2.com {
        'user-dn-pattern' = 'cn=,ou=,dc=,dc='
    }
}

所有其他用户数据存储在与默认存储库相同的位置

userRepository {
    domain2.com () {}
}
dataSource {
    domain2.com () {
        uri = 'jdbc:mysql://db2.tigase/dbname?user&password'
    }
}

组合后,DSL 输出应如下所示:

dataSource {
    domain2.com () {
        uri = 'jdbc:mysql://db2.tigase/dbname?user&password'
    }
}
userRepository {
    domain2.com () {}
}
authRepository {
    domain2.com () {
        cls = 'tigase.db.ldap.LdapAuthProvider'
        uri = 'ldap://ldap.domain2.com:389'
        'user-dn-pattern' = 'cn=,ou=,dc=,dc='
    }
}

Next VHost: domain3.com 用户身份验证再次在 LDAP 服务器中,但指向具有不同访问凭据和参数的不同 LDAP 服务器。用户信息存储在 postgreSQL 数据库中。

dataSource {
    domain3.com () {
        uri = 'jdbc:pgsql://db.domain3.com/dbname?user&password'
    }
}
userRepository {
    domain3.com () {}
}
authRepository {
    domain3.com () {
        cls = 'tigase.db.ldap.LdapAuthProvider'
        uri = 'ldap://ldap.domain3.com:389'
        'user-dn-pattern' = 'cn=,ou=,dc=,dc='
    }
}

对于 VHost: domain4.com 的所有数据,身份验证和用户 XMPP 数据都存储在单独的 MySQL 服务器上,并带有用于用户登录和用户注销处理的自定义存储过程。

dataSource {
    domain4.com () {
        uri = 'jdbc:mysql://db14.domain4.com/dbname?user&password'
    }
}
userRepository {
    domain4.com () {}
}
authRepository {
    domain4.com () {
        cls = 'tigase.db.jdbc.TigaseCustomAuth'
        'user-login-query' = '{ call UserLogin(?, ?) }'
        'user-logout-query' = '{ call UserLogout(?) }'
        'sasl-mechs' = [ 'PLAIN', 'DIGEST-MD5' ]
    }
}

如您所见,它需要一些编写,但灵活性非常广泛,您可以根据需要或想要设置任意数量的单独数据库。如果一个数据库(由数据库连接字符串识别)在不同的 VHost 之间共享,Tigase 仍然使用单个连接池,因此它不会创建过多的数据库连接。

9.8. 导入用户数据

您可以轻松地在 Tigase 兼容存储库之间复制数据,这些存储库是具有数据库连接器的存储库。但是,从外部源导入数据并不容易。因此,一个简单的数据导入功能已添加到存储库实用程序包中。

您可以通过命令 ./bin/repo.sh./scripts/repo.sh 访问存储库实用程序,其取决于您使用的是二进制包还是源代码分发。

-h 参数为您提供所有可能参数的列表:

./scripts/repo.sh -h

Parameters:
 -h          this help message
 -sc class   source repository class name
 -su uri     source repository init string
 -dc class   destination repository class name
 -du uri     destination repository init string
 -dt string  data content to set/remove in repository
 -u user     user ID, if given all operations are only for that ID
             if you want to add user to AuthRepository parameter must
             in form: "user:password"
 -st         perform simple test on repository
 -at         simple test for adding and removing user
 -cp         copy content from source to destination repository
 -pr         print content of the repository
 -n          data content string is a node string
 -kv         data content string is node/key=value string
 -add        add data content to repository
 -del        delete data content from repository
 ------------
 -roster     check the user roster
 -aeg [true|false]  Allow empty group list for the contact
 -import file  import user data from the file of following format:
         user_jid, password, roser_jid, roster_nick, subscription, group



Note! If you put UserAuthRepository implementation as a class name
      some operation are not allowed and will be silently skipped.
      Have a look at UserAuthRepository to see what operations are
      possible or what operation does make sense.
      Alternatively look for admin tools guide on web site.

最关键的参数是源存储库类名和初始化字符串。因此,您可以使用一些示例预设参数并针对您的系统进行调整。如果您查看 repo.sh 脚本,您可以在脚本末尾找到以下几行:

XML_REP="-sc tigase.db.xml.XMLRepository -su ../testsuite/user-repository.xml_200k_backup"
MYSQL_REP="-sc tigase.db.jdbc.JDBCRepository -su jdbc:mysql://localhost/tigase?user=root&password=mypass"
PGSQL_REP="-sc tigase.db.jdbc.JDBCRepository -su jdbc:postgresql://localhost/tigase?user=tigase"

java $D -cp $CP tigase.util.RepositoryUtils $MYSQL_REP $*

您可以看到源存储库已被设置为 MySQL 数据库,其数据库名称为 tigase ,数据库用户为 root ,用户密码为 mypass

您可以为您的系统调整这些设置。

现在要将数据导入您的存储库,只需执行以下命令:

./bin/repo.sh -import import-file.txt

注意,导入功能可从 b895 获得

导入文件的格式非常简单。这是一个带有逗号分隔值的平面文件:

jid,password,roster_jid,roster_nick,subscriptio,group

要从 MySQL 数据库创建这样的文件,您必须执行如下命令:

SELECT a, b, c, d INTO OUTFILE 'import-file.txt'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
FROM test_table;

9.9. 导入现有数据

关于从其他数据库导入用户数据的信息。

9.9.1. 将 Tigase 服务器连接到 MySQL 数据库

在继续阅读本手册之前,请先查看 初始 MySQL 数据库设置。它将帮助您准备用于连接 Tigase 服务器的数据库。

本指南介绍 MySQL 数据库连接参数。

本指南实际上非常短,因为有一些示例配置文件可用于您的环境并对其进行自定义。

dataSource {
    default () {
        uri = 'jdbc:mysql://localhost/tigasedb?user=tigase_user&password=mypass'
    }
}
userRepository {
    default () {}
}
authRepository {
    default () {}
}

这是为 Tigase 设置 SQL 存储库的基本设置。 dataSource 包含 default 的 uri,它是 mysql 数据库。 MySQL 连接器需要以下格式的连接字符串:jdbc:mysql://[hostname]/[database name]?user=[user name]&password=[user password]

为您的环境编辑 config.tdsl 文件。

使用以下命令启动服务器:

./scripts/tigase.sh start etc/tigase.conf

9.9.2. 将 Tigase 服务器与 Drupal 集成

首先,Tigase 可以根据 Drupal 数据库对用户进行身份验证,这意味着您在 Drupal 网站和 XMPP 服务器上拥有相同的用户帐户。此外,在这样的配置中,所有帐户管理都是通过 Drupal Web 界面完成的,例如帐户创建,密码更改更新用户详细信息等。管理员可以暂时禁用用户帐户,随后 Tigase 服务器也可以这样做。

连接到 Drupal 数据库

使用 Drupal 数据库设置 Tigase 的最佳方法是通过 config.tdsl 文件,您可以在其中放置 Tigase 配置的初始设置。

如果你查看 Tigase 安装的 etc/ 目录,你应该会在那里找到一个文件。

连接到 Drupal 数据库所需的所有设置如下:

dataSource {
    'default-auth' () {
        uri = 'jdbc:mysql://localhost/drupal?user=drupalusr&password=drupalpass'
    }
}
authRepository {
    default () {
        cls = 'tigase.db.jdbc.DrupalWPAuth'
        'data-source' = 'default-auth'
    }
}

通常,您需要一个用于身份验证的 drupal,另一个用于用户存储库。在这种情况下,我们将对用户 DB 使用 SQL。

dataSource {
    default () {
        uri = 'jdbc:mysql://localhost/tigasedb?user=tigase_user&password=mypass'
    }
    'default-auth' () {
        uri = 'jdbc:mysql://localhost/drupal?user=drupalusr&password=drupalpass'
    }
}
userRepository {
    default () {}
}
authRepository {
    default () {
        cls = 'tigase.db.jdbc.DrupalWPAuth'
        'data-source' = 'default-auth'
    }
}

理论上,您可以将 Tigase 数据库模式加载到 Drupal 数据库,然后两个 db-uris 将具有相同的数据库连接字符串。有关设置和连接 MySQL 数据库的更多详细信息,请参阅 MySQL 指南

现在运行 Tigase 服务器。

./scripts/tigase.sh start etc/tigase.conf

现在您可以在您的 Drupal 网站上注册一个帐户,并使用帐户详细信息与 XMPP 客户端连接。

备注

您必须在 XMPP 客户端中启用纯密码身份验证才能使 Drupal 数据库连接到 Tigase 服务器。

9.9.3. PostgreSQL 数据库使用

本指南介绍如何配置 Tigase 服务器以使用 PostgreSQL 数据库作为用户存储库。

如果您使用基于 XML 的用户存储库,则可以使用存储库管理工具将所有用户数据复制到 PostgreSQL 数据库。所有步骤如下所述。

PostgreSQL 数据库准备

创建将用于连接到您的数据库的新数据库用户帐户:

# createuser
Enter name of user to add: tigase
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) y

现在使用新的数据库用户帐户为您的服务创建数据库:

# createdb -U tigase tigasedb
CREATE DATABASE

现在您可以加载数据库架构:

# psql -U tigase -d tigasedb -f postgresql-schema.sql

现在数据库已准备好供 Tigase 服务器使用。

服务器配置

服务器配置几乎与 MySQL 数据库设置相同。唯一的区别是连接字符串通常看起来像这样:

dataSource {
    default () {
        uri = 'postgresql://localhost/tigasdb?user=tigase'
    }
}

9.10. 架构更新

这是架构更新的存储库,以防您必须从旧安装升级。

9.10.1. v8.0.0 中对架构的更改

对于 Tigase XMPP Server 8.0.0 版,我们决定改进其所提供的身份验证和安全性。为此,需要更改存储库和数据库架构的实现以达到此目标。本文档以及 HTTP API 中的文档将描述此新版本中架构的更改。

原因

在 8.0.0 版之前,用户密码存储在 tig_users 表中的 user_pw 数据库字段中,但以明文形式存储。也可以将其改为启用存储密码的 MD5 哈希,但是这种有限的身份验证机制仅限 SASL PLAIN。然而,密码的 MD5 哈希并不是一种真正安全的方法,因为可以使用彩虹表恢复这种机制。

因此,我们决定改变这一点,仅以 PBKDF2 形式存储密码的加密版本,这可以很容易地用于 SCRAM-SHA-1 身份验证机制或 SCRAM-SHA-256。 SASL PLAIN 机制也可以使用这些加密密码。现在在 Tigase v8.0.0 中 默认情况下 启用了加密密码的存储。

变更摘要

增加了对存储加密密码的支持

密码不再以明文形式存储在任何数据库中。

对任何后续身份验证使用相同的盐

这允许客户端重新用计算的凭据并保留它们,而不是存储明文密码。

禁止使用存储过程进行身份验证

在以前的版本中,Tigase 使用存储程序 TigUserLoginPlainPwTigUserLogin 进行 SASL PLAIN 身份验证。从版本 8.0.0 开始,这些程序不再使用,但它们已被更新为使用存储在 tig_user_credentials 表中的密码。

仍然可以使用此程序进行身份验证,但要做到这一点,您需要添加:

'user-login-query' = '{ call TigUserLoginPlainPw(?, ?) }'

every 身份验证存储库的配置块。

要为默认存储库启用此功能,authRepository 配置块将如下所示:

authRepository () {
    default () {
        'user-login-query' = '{ call TigUserLoginPlainPw(?, ?) }'
    }
}

已弃用的 API

AuthRepository API 的某些方法已被弃用,不应使用。它们中的大多数用于使用存储程序进行身份验证,以明文检索密码或更改密码。

对于这些方法中的大多数,在可能的情况下提供了基于 tig_user_credentials 表和用户凭证存储的新版本。

不推荐使用的存储程序

用于身份验证和密码操作的存储程序已被更新为新形式,从而旧版本的 Tigase XMPP 服务器可以在集群滚动更新期间使用它们。但是,这些程序将不再被使用,并且将在 Tigase XMPP Server 的未来版本中不被推荐和删除。

密码的 MD5 哈希值的使用

如果您在以前版本的 Tigase XMPP 服务器中更改了 password-encoding 数据库属性,那么您将需要修改您的配置以使其正常工作。如果您只希望允许使用旧密码进行访问并以新形式存储更改的密码,那么您需要为正确的身份验证存储库来启用凭据解码器。在此示例中,我们将提供 password-encoding 数据库属性的 MD5-PASSWORD 值所需的更改。如果您使用了不同值,那么只需将 MD5-PASSWORD 替换为 MD5-USERNAME-PASSWORDMD5-USERID-PASSWORD

使用 MD5 解码器。

authRepository () {
    default () {
        credentialDecoders () {
            'MD5-PASSWORD' () {}
        }
    }
}

如果您希望以 MD5 形式存储密码,请在配置文件中使用以下条目:

使用 MD5 编码器。

authRepository () {
    default () {
        credentialEncoders () {
            'MD5-PASSWORD' () {}
        }
    }
}

启用和禁用凭证编码器/解码器

您可以启用安装中使用的编码器和解码器。通过启用编码器/解码器,您可以决定密码以何种形式存储在数据库中。这些更改可能会影响允许在您的安装中使用哪些 SASL 机制。

启用 PLAIN 解码器。

authRepository () {
    default () {
        credentialDecoders () {
            'PLAIN' () {}
        }
    }
}

禁用 SCRAM-SHA-1 编码器。

authRepository () {
    default () {
        credentialEncoders () {
            'SCRAM-SHA-1' (active: false) {}
            'SCRAM-SHA-256' (active: false) {}
        }
    }
}

警告

如果您启用了相同类型的解码器,强烈建议不要禁用编码器,因为如果客户端尝试使用不可用的机制,可能会导致身份验证问题。

架构更改

此更改导致创建具有以下字段的新表 tig_user_credentials

uid

tig_users 中用户行的 id。

用户名

用于身份验证的用户名(如果未提供 authzidauthzid localpart 等于 authcid,则将使用具有 default 值的行)。

机制

将使用此凭据的机制的名称,即 SCRAM-SHA-1PLAIN

确认凭据匹配的机制所需的序列化值。

警告

在执行 upgrade-schema 任务期间,密码将从 tig_users 表的 user_pw 字段中删除并移动到 tig_user_credentials 表。

添加密码重置机制

作为 Tigase HTTP API 组件和 Tigase Extras 的一部分,我们开发了一种允许用户重置密码的机制。要使用此机制, HTTP API 组件及其 REST 模块 必须 在Tigase XMPP 服务器安装上启用。

备注

此外,需要在配置文件中启用此机制。有关此机制配置的更多信息,请查看 Tigase HTTP API 组件文档。

假设 HTTP API 组件配置为在端口 8080 (默认) 上运行,那么在 Web 浏览器中访问地址 http://localhost:8080/rest/user/resetPassword 后,它将出现一个 Web 表单。通过填写并提交此表格,用户将启动密码重置过程。在此过程中,Tigase XMPP 服务器将向用户的电子邮件地址(在注册时提供)发送一封电子邮件,其中包含指向密码更改表单的链接。

9.10.2. 从 v7.1.x 升级

从以前版本的 Tigase 升级时,建议您先备份数据库。请参阅数据库软件的文档以了解如何导出副本。备份完成后,就该运行架构升级了。确保您的架构是最新的,并且应该是 v7.1.0 架构。

要升级,请使用 SchemaManager 的 upgrade-schema 新任务:

  • 在linux中

    ./scripts/tigase.sh install-schema etc/tigase.conf
    
  • 在 Windows 中

    java -cp "jars/*" tigase.db.util.SchemaManager "install-schema"
    

您将需要配置以下开关语句:

  • -T 指定数据库类型
    可能的值为:mysql, derby, sqlserver, postgresql, mongodb
  • -D 指定数据库名称
    您要升级的数据库的显式名称。
  • -H 指定主机地址
    默认情况下,这是 localhost,但可以设置为 IP 地址或 FQDNS 地址。
  • -U 指定用户名
    这是被授权对 -D 中定义的数据库进行更改的用户名。
  • -P 指定密码
    -U 中指定的用户名密码。
  • -R 管理员或 Root DB 帐户的密码。

  • -A 管理员或 Root DB 帐户的密码。

  • -J Tigase 授权为管理员用户的用户 Jid。

  • -N 在 -J 中指定的用户密码。

  • -F 指向将执行升级的文件。
    将遵循这种形式 database/{dbname}-server-schema-8.0.0.sql

9.10.3. Tigase 服务器架构 v7.2 更新

适用于从 v7.0.2 安装升级到 v8.0.0 的所有用户

主数据库和 pubsub 存储库的架构已更改。为了升级到新模式,您需要执行以下操作:
  1. 使用 database/${DB_TYPE}-schema-upgrade-to-7-1.sql 文件将主数据库模式升级到 v7.1

  2. 使用 database/${DB_TYPE}-pubsub-schema-3.1.0.sql 文件将 Pubsub 架构升级到 v3.1.0

  3. 使用 database/${DB_TYPE}-pubsub-schema-3.2.0.sql 文件将 Pubsub 架构升级到 v3.2.0

  4. 使用 database/${DB_TYPE}-pubsub-schema-3.3.0.sql 文件将 Pubsub 架构升级到 v3.3.0

这三个命令可以按顺序同时执行,建议您对当前数据库进行备份,以防止数据丢失。

v7.1 的 Tigase 架构更改

Tigase 对其数据库进行了更改,以在 tig_pairs 表中包含主键,来提高 Tigase 服务器的性能。这是附加到先前架构的主键项的自动递增列。

警告

您必须更新您的数据库以符合新架构。否则,Tigase 将无法正常工作。

备注

此更改将影响所有使用 v7.1.0 及更高版本的 Tigase 用户。

如果要在新数据库上安装新版本的 v8.0.0,则应自动安装架构。

首先,关闭所有正在运行的 Tigase 实例,以防止与数据库编辑发生冲突。然后从命令行使用 DBSchemaLoader 类将 -schema-upgrade-to-7.1.sql 文件运行到数据库。命令如下:

在linux环境下

java -cp "jars/*" tigase.db.util.DBSchemaLoader -dbHostname ${HOSTNAME} -dbType ${DB_TYPE} -rootUser ${ROOT_USER} -dbPass ${DB_USER_PASS} -dbName ${DB_NAME} -schemaVersion ${DB_VERSION} -rootPass ${ROOT_USER_PASS} -dbUser ${DB_USER}  -adminJID "${ADMIN_JID}" -adminJIDpass ${ADMIN_JID_PASS}  -logLevel ALL -file database/${DB_TYPE}-schema-upgrade-to-7-1.sql

在windows环境下

java -cp jars/* tigase.db.util.DBSchemaLoader -dbHostname ${HOSTNAME} -dbType ${DB_TYPE} -rootUser ${ROOT_USER} -dbPass ${DB_USER_PASS} -dbName ${DB_NAME} -schemaVersion ${DB_VERSION} -rootPass ${ROOT_USER_PASS} -dbUser ${DB_USER}  -adminJID "${ADMIN_JID}" -adminJIDpass ${ADMIN_JID_PASS}  -logLevel ALL -file database/${DB_TYPE}-schema-upgrade-to-7-1.sql

所有变量都是必需的,它们如下:

  • ${HOSTNAME} - 您要升级的数据库的主机名。

  • ${DB_TYPE} - 数据库类型 [derby, mysql, postgresql, sqlserver]。

  • ${ROOT_USER} - root 用户的用户名。

  • ${ROOT_USER_PASS} - 指定 root 用户的密码。

  • ${DB_USER} - 可以用来编辑数据库的用户的登录名。

  • ${DB_USER_PASS} - 指定用户的密码。

  • ${DB_NAME} - 要编辑的数据库的名称。

  • ${DB_VERSION} - 在这种情况下,我们希望这是 7.1。

  • ${ADMIN_JID} - 具有管理员权限的数据库用户的裸 JID。必须包含在引号内。

  • ${ADMIN_JID_PASS} - 关联管理员 JID 的密码。

请注意,用于更新的 SQL 文件将有与文件名关联的数据库。即 postgresql-update-to-7.1.sql 用于 postgresql 数据库。

最终的命令将如下所示:

java -cp "jars/*" tigase.db.util.DBSchemaLoader -dbHostname localhost -dbType mysql -rootUser root -rootPass root -dbUser admin -dbPass admin -schemaVersion 7.1 -dbName Tigasedb -adminJID "[email protected]" -adminJIDPass adminpass -logLevel ALL -file database/mysql-schema-upgrade-to-7.1.sql

成功执行后,您可以重新启动服务器。观察任何可能表明架构升级不完整的数据库错误的日志。

对 Pubsub 架构的更改

Tigase 对 PubSub 架构进行了更改,要升级到 PubSub Schema v7.1 而无需改进您的数据库,请使用本指南更新您的数据库以使其与新版本的 Tigase 兼容。

备注

当前的 PubSub Schema 是 v3.3.0,在运行 Tigase V7.1.0 之前,您需要对 v3.1.0,v3.2.0 和 v3.3.0 重复这些说明。

PubSub Schema 已被简化以更好地利用资源,此更改会影响 Tigase 的所有用户。要为新架构准备数据库,首先要确保创建备份!然后将适当的 PubSub 架构应用于您的 MySQL,它将添加新的存储程序。

所有这些文件都应该在 Tigase 中的 /database 文件夹中,但是如果您缺少相应的文件,请使用下面的链接并将它们放入该文件夹中。

这里 可以找到 MySQL 架构。

这里 可以找到Derby架构。

这里 可以找到PostGRESQL 架构。

相同的文件也包含在 [tigaseroot]/database/ 的所有 v8.0.0 发行版中。对数据库模式的所有更改都是为了向后兼容。

您可以使用 Tigase 中的实用程序从 Tigase 根目录使用以下命令更新架构:

  • Linux

    java -cp "jars/*" tigase.db.util.DBSchemaLoader
    
  • Windows:

    java -cp jars/* tigase.db.util.DBSchemaLoader
    

备注

可能需要一些变化,取决于您的 java 构建如何使用 -cp 选项

使用以下选项进行自定义。粗体字为必填项:

  • -dbType database_type {derby, mysql, postgresql, sqlserver} (必需)

  • -schemaVersion 架构版本 {4, 5, 5-1}

  • -dbName 数据库名称(必需

  • -dbHostname 数据库主机名(默认为 localhost)

  • -dbUser tigase 用户名

  • -dbPass tigase 用户密码

  • -rootUser 数据库根用户名(必填

  • -rootPass 数据库根密码(必需

  • -file path 到 sql 架构文件(必需

  • -query 要执行的sql查询

  • -logLevel java logger 级别

  • -adminJID 逗号分隔的管理员 JID 列表

  • -adminJIDpass 密码(一个其可用于所有输入的 JIDs )

备注

参数接受以下先例:查询,文件,整个架构

因此,您的最终命令应如下所示:

java -cp "jars/*" tigase.db.util.DBSchemaLoader -dbType mysql -dbName tigasedb -dbUser root -dbPass password -file database/mysql-pubsub-schema-3.1.0.sql