Миграция базы OTRS

OTRS CloneDB database migration MySQL PostgreSQL

В один прекрасный день, один из наших клиентов столкнулся с необходимостью переноса OTRS с старой базы MySQL на PostgreSQL. После многочисленных самостоятельных (и безуспешных) попыток клиент обратился к нашей компании. К следующему утру миграция была завершена. Как это нам удалось? Садитесь, записывайте :)

  1. Шаг 1 - установка модуля CloneDB. Взять его можно тут.
    Установка производится либо традиционным способом (через веб-интерфейс), либо с использованием консоли:

    bin/otrs.Console.pl Admin::Package::Install
  2. Применить патч к Base.pm:

    patch < Base.pm.diff

    Листинг:
    
    --- Base.pm.old 2017-11-08 14:59:17.676848207 +0300
    +++ Base.pm 2017-11-08 15:09:14.560954253 +0300
    @@ -279,6 +279,7 @@
                 COLUMNVALUES:
                 for my $ColumnCounter ( 1 .. $#Columns ) {
                     my $Column = $Columns[$ColumnCounter];
    +       next COLUMNVALUES if ( $Self->{BlobColumns}->{ lc "$Table.$Column" } );
      
                     # get column value
                     my $ColumnValue = $Row[$ColumnCounter];
                
  3. Настроить модуль CloneDB: target DB, blob fields, и т.д. через конфигуратор.
  4. Получить перечень всех blob-полей.
    Пример для MySQL:
                    
    select table_name,column_name,data_type from INFORMATION_SCHEMA.COLUMNS where 
        data_type like '%blob%' and table_schema = 'otrs';
    
                
  5. Проверить содержимое полученных полей. Если они действительно бинарные (как, например, article_attachment.content) - указать их в настройке CloneDB::BlobColumns.
  6. Остановить службы:

    service apache2
    bin/otrs.Daemon.pl
                
  7. Запустить процесс клонирования. Время выполнения зависит от размеров базы. В нашем случае конвертация базы размером в 30 ГБ заняла менее часа.

    bin/otrs.Console.pl Maint::Database::Clone
                
  8. После завершения процесса миграции - изменить настройки подключения к базе в Kernel/Config.pm, указав целевую базу.
  9. Миграция завершена!
    Очистить данные сессий, кэш бэкенда, кэш CSS/JS, запустить веб-сервер и OTRS Daemon:

    bin/otrs.Console.pl Maint::Session::DeleteAll
    bin/otrs.Console.pl Maint::Cache::Delete
    service apache2 start
    bin/otrs.Daemon.pl start