docker_admin> cd ~/otobo-docker
docker_admin> docker-compose start daemon
1. Login after migration not possible
在我们的迁移测试中,用于迁移的浏览器有时会出现问题。重新启动浏览器后,通常可以解决此问题。使用Safari,有时需要手动删除旧的OTRS会话。
2. Final page of the migration has a strange layout due to missing CSS files
当ScriptAlias的配置不是标准值时,可能会发生这种情况。迁移简单地用otrs代替otobo可能会导致无法在OTOBO中检索CSS和JavaScript。发生这种情况时,请检查Kernel / Config.pm中的设置并将其恢复为合理的值。
3.迁移因 MySQL 错误而停止
在过去升级时遇到过问题的系统上,迁移过程可能会因 ticket 和 ticket_history 表中的 MySQL 错误而停止。这些错误通常是源表中的 NULL 值在目标表中不再允许存在。在继续迁移之前,必须手动解决这些冲突。
从 OTOBO 10.0.12 起,migration.pl 中有一项检查功能,可在数据传输之前检查是否存在 NULL 值。需要注意的是,仍然需要手动进行解析。
4.迁移到 PostgreSQL 时步骤 5 中的错误
在这种情况下,migration.pl*会显示 "System was unable to complete data transfer."(系统无法完成数据传输)这条不太有用的信息。而 Apache 日志文件和 OTOBO 日志文件则显示了一条更有意义的信息:"Message:ERROR: permission denied to set parameter "session_replication_role", SQL: 'set session_replication_role to replica;'"。为了给数据库用户 **otobo* 所需的超级用户权限,请以 PostgreSQL 管理员身份运行以下语句:ALTER USER otobo WITH SUPERUSER;`。然后重新运行 http://localhost/otobo/migration.pl。迁移后,运行 ALTER USER otobo WITH NOSUPERUSER
返回正常状态。
目前还不清楚是否每次设置都必须授予扩展权限。
See also
https://otobo.de/de/forums/topic/otrs-6-mysql-migration-to-otobo-postgresql/ 中的讨论。
5.合并系统配置的部署问题
系统配置是在数据库表迁移后迁移的。在这种情况下,迁移意味着将 OTOBO 的默认设置与源 OTRS 系统的系统配置合并。在这一步骤中可能会出现不一致的情况。一个真实的例子是 "Ticket::Frontend::AgentTicketQuickClose###State "设置。该设置是OTOBO 10中的新设置,默认值为``关闭成功``状态。但如果源系统中的状态 "关闭成功 "已被删除或重命名,则该设置无效。在迁移步骤**迁移配置设置**中,这种不一致会被检测为错误。实际上,合并后的系统配置存储在数据库中,但在部署过程中会执行额外的有效性检查。
必须使用 OTOBO 控制台命令手动解决这个问题。
使用``bin/otobo.Console.pl Admin::Config::ListInvalid`` 命令列出不一致之处。
使用 bin/otobo.Console.pl Admin::Config::FixInvalid
交互式修复无效值
使用 bin/otobo.Console.pl Maint::Config::Rebuild
部署从 migration.pl 中收集的更改,包括停用的 SecureMode
完成这些手动步骤后,你就可以再次运行 migration.pl。迁移将从发生错误的步骤继续进行。
步骤 7:手工迁移的任务和修改
1. Password policy rules
如果使用本地身份验证,对于OTOBO 10,代理和客户用户的新的默认密码策略将生效。可以在系统配置(“ PreferencesGroups ### Password”和“ CustomerPersonalPreference #### Password”)中更改密码策略规则。
从 Oracle 迁移到 Oracle
要迁移到 Oracle,必须采用类似 ETL 的策略。这是因为 Oracle 没有提供暂时关闭外键检查的简单方法。
在 OTOBO 主机上必须安装 Oracle 客户端和 Perl 模块 DBD::Oracle
。
使用 Oracle 即时客户端时,还需要安装可选的 SDK DBD::Oracle。
克隆模式的方法有很多种。在示例命令中,我们使用了 expdb
和 impdb
,它们在引擎盖下使用 Data Pump。
本文档中显示的连接字符串指的是源数据库和目标数据库都在 Docker 容器中运行的情况。另请参见 https://github.com/bschmalhofer/otobo-ideas/blob/master/oracle.md 。
清空奥托博
停止 otobo 的网络服务器,关闭 otobo 的数据库连接。
-- in the OTOBO database
DROP USER otobo CASCADE
导出完整的 OTRS 模式。
mkdir /tmp/otrs_dump_dir
-- in the OTRS database
CREATE DIRECTORY OTRS_DUMP_DIR AS '/tmp/otrs_dump_dir';
GRANT READ, WRITE ON DIRECTORY OTRS_DUMP_DIR TO sys;
expdp \"sys/Oradoc_db1@//127.0.0.1/orclpdb1.localdomain as sysdba\" schemas=otrs directory=OTRS_DUMP_DIR dumpfile=otrs.dmp logfile=expdpotrs.log
导入 OTRS 模式,将模式重命名为 "otobo"。
impdp \"sys/Oradoc_db1@//127.0.0.1/orclpdb1.localdomain as sysdba\" directory=OTRS_DUMP_DIR dumpfile=otrs.dmp logfile=impdpotobo.log remap_schema=otrs:otobo
-- in the OTOBO database
-- double check
select owner, table_name from all_tables where table_name like 'ARTICLE_DATA_OT%_CHAT';
-- optionally, set the password for the user otobo
ALTER USER otobo IDENTIFIED BY XXXXXX;
调整克隆模式 otobo
cd /opt/otobo
scripts/backup.pl --backup-type migratefromotrs # it's OK that the command knows only about the otobo database, only last line is relevant
sqlplus otobo/otobo@//127.0.0.1/orclpdb1.localdomain < /home/bernhard/devel/OTOBO/otobo/2021-03-31_13-36-55/orclpdb1.localdomain_post.sql >sqlplus.out 2>&1
double check with `select owner, table_name from all_tables where table_name like 'ARTICLE_DATA_OT%_CHAT';
再次启动 otobo 的网络服务器
继续第 5 步,即运行 migration.pl
。
如果迁移到大于或等于 10.1 的 OTOBO 版本,必须执行脚本 /opt/otobo/scripts/DBUpdate-to-10.1.pl
以创建在 10.1 版本中新增的表 stats_report 和 data_storage。
可选步骤:简化数据库迁移(仅适用于专家和特殊情况)
在一般迁移策略中,数据库表中的所有数据都将从 OTRS 数据库逐行复制到 OTOBO 数据库中。将数据从 OTRS 数据库导出并导入 OTOBO 数据库可能会节省时间,而且在某些情况下更为稳定。
该变体既适用于基于 Docker 的安装,也适用于本机安装。
这些说明假定 OTRS 使用 MySQL 作为后台。
首先,我们需要转储所需的 OTRS 数据库表。然后,我们需要进行一些转换:
将字符集转换为 utf8mb4
重命名几个表格
缩短某些表格列
转换后,我们可以用 OTRS 转换后的数据覆盖 OTOBO 模式中的表。实际上,我们需要的不是一个转储文件,而是几个 SQL 脚本。
当安装了mysqldump并且可以连接到OTRS数据库时,您可以直接在Docker主机上创建数据库转储。脚本* bin / backup.pl *支持这种情况。
Warning
在本节中,我们假设Docker主机上有* / opt / otrs *。
otobo> cd /opt/otobo
otobo> scripts/backup.pl -t migratefromotrs --db-name otrs --db-host=127.0.0.1 --db-user otrs --db-password "secret_otrs_password"
或者,也可以将数据库转储到另一台服务器上,然后再传输到 Docker 主机上。一种简单的方法是将 /opt/otobo 复制到运行 OTRS 的服务器上,然后执行与上述相同的命令。
脚本 bin/backup.pl 会在转储目录中生成四个 SQL 脚本,例如 2021-04-13_12-13-04 为了执行 SQL 脚本,我们需要运行 mysql
命令。
本地安装:
otobo> cd <dump_dir>
otobo> mysql -u root -p<root_secret> otobo < otrs_pre.sql
otobo> mysql -u root -p<root_secret> otobo < otrs_schema_for_otobo.sql
otobo> mysql -u root -p<root_secret> otobo < otrs_data.sql
otobo> mysql -u root -p<root_secret> otobo < otrs_post.sql
基于 Docker 的安装:
在 Docker 容器 db 中运行 mysql
命令,以导入数据库转储文件。请注意,数据库 root 的密码现在是在 Docker 主机上的 .env 文件中设置的密码。
docker_admin> cd /opt/otobo-docker
docker_admin> docker-compose exec -T db mysql -u root -p<root_secret> otobo < /opt/otobo/<dump_dir>/otrs_pre.sql
docker_admin> docker-compose exec -T db mysql -u root -p<root_secret> otobo < /opt/otobo/<dump_dir>/otrs_schema_for_otobo.sql
docker_admin> docker-compose exec -T db mysql -u root -p<root_secret> otobo < /opt/otobo/<dump_dir>/otrs_data.sql
docker_admin> docker-compose exec -T db mysql -u root -p<root_secret> otobo < /opt/otobo/<dump_dir>/otrs_post.sql
要快速检查导入是否成功,可以运行以下命令。
otobo> mysql -u root -p<root_secret> -e 'SHOW DATABASES'
otobo> mysql -u root -p<root_secret> otobo -e 'SHOW TABLES'
otobo> mysql -u root -p<root_secret> otobo -e 'SHOW CREATE TABLE ticket'
或在 Docker 下运行时
docker_admin> docker-compose exec -T db mysql -u root -p<root_secret> -e 'SHOW DATABASES'
docker_admin> docker-compose exec -T db mysql -u root -p<root_secret> otobo -e 'SHOW TABLES'
docker_admin> docker-compose exec -T db mysql -u root -p<root_secret> otobo -e 'SHOW CREATE TABLE ticket'
数据库现已迁移。这意味着下一步我们可以跳过数据库迁移。注意相关复选框。