Назад | Перейти на главную страницу

миграция mnesia BD ejabberd v 2.1.5-3 -> 16.09-4

У меня есть старый сервер с Debian 6, ejabberd v. 2.1.5-3 с mnesia BD, и мне нужно переместить пользователей и пароли на новый сервер с Debian 9.6, ejabberd 16.09-4 и mnesia BD. Узлы серверов разные. Я делаю ejabberd.dump, ejabberd.backup на oldserver. Когда я пробую на oldserver, делаю:

корень @ oldserver ejabberdctl export_piefxis / var / lib / ejabberd / 1 /

Problem 'throw {error,exmpp_not_installed}' occurred executing the command.
Stacktrace: [{ejabberd_piefxis,try_start_exmpp,0},
             {ejabberd_piefxis,export_hosts,2},
             {ejabberd_ctl,call_command,3},
             {ejabberd_ctl,try_call_command,3},
             {ejabberd_ctl,process2,3},
             {ejabberd_ctl,process,1},
             {rpc,'-handle_call_call/6-fun-0-',5}]

Я копирую каталог ejabberd.dump, ejabberd.backup, ejabberd со старого сервера в / var / lib / ejabberd_old / на новом сервере. В новом сервере я пытаюсь:

корень @ newserver: ejabberdctl load /var/lib/ejabberd/old/ejabberd.dump

Can't load dump in "/var/lib/ejabberd/old/ejabberd.dump" at node ejabberd@Public: open

root@newserver: ejabberdctl mnesia_change_nodename ejabberd@oldserver ejabberd@newserver /var/lib/ejabberd/old/ejabberd.backup /var/lib/ejabberd/old/ejabberd_new.backup

Error: {file_error,"/var/lib/ejabberd/old/ejabberd_new.backup.BUPTMP",eacces}

root @ newserver: ejabberdctl restore /var/lib/ejabberd/old/ejabberd.backup

Problem 'error {case_clause,
               {aborted,
                   {file_error,"/var/lib/ejabberd/old/ejabberd.backup",
                       eacces}}}' occurred executing the command.
Stacktrace: [{ejabberd_admin,restore_mnesia,1,
                             [{file,"src/ejabberd_admin.erl"},{line,491}]},
             {ejabberd_ctl,call_command,4,
                           [{file,"src/ejabberd_ctl.erl"},{line,324}]},
             {ejabberd_ctl,try_call_command,4,
                           [{file,"src/ejabberd_ctl.erl"},{line,298}]},
             {ejabberd_ctl,process2,4,
                           [{file,"src/ejabberd_ctl.erl"},{line,247}]},
             {ejabberd_ctl,process,2,
                           [{file,"src/ejabberd_ctl.erl"},{line,225}]},
             {rpc,'-handle_call_call/6-fun-0-',5,
                  [{file,"rpc.erl"},{line,187}]}]

корень @ новый сервер: ejabberdctl каталог_импорта / var / lib / ejabberd_old /

Problem 'error {badmatch,{error,eacces}}' occurred executing the command.
Stacktrace: [{jd2ejd,import_dir,1,[{file,"src/jd2ejd.erl"},{line,78}]},
             {ejabberd_admin,import_dir,1,
                             [{file,"src/ejabberd_admin.erl"},{line,436}]},
             {ejabberd_ctl,call_command,4,
                           [{file,"src/ejabberd_ctl.erl"},{line,324}]},
             {ejabberd_ctl,try_call_command,4,
                           [{file,"src/ejabberd_ctl.erl"},{line,298}]},
             {ejabberd_ctl,process2,4,
                           [{file,"src/ejabberd_ctl.erl"},{line,247}]},
             {ejabberd_ctl,process,2,
                           [{file,"src/ejabberd_ctl.erl"},{line,225}]},
             {rpc,'-handle_call_call/6-fun-0-',5,
                  [{file,"rpc.erl"},{line,187}]}]strong text

Что еще я могу сделать для переноса БД на новую версию ejabberd.

eacces означает, что у программы нет системного разрешения на чтение файла. Возможно, файл доступен только для чтения для root, но ejabberd запущен пользователем ejabberd или чем-то в этом роде.

Еще одна вещь, совершенно другая, которую вы можете попробовать:

  1. У вас старый ejabberd работает правильно? Тогда перестань.
  2. Установите новый ejabberd по новому пути или, по крайней мере, убедитесь, что он не использует старые файлы конфигурации, старые файлы базы данных и старые журналы ...
  3. Вы можете запустить новый ejabberd, чтобы убедиться, что он хотя бы работает идеально. Конечно, у него нет ваших старых пользователей.
  4. Остановите новый эджабберд.
  5. Удалите файлы по новому пути к базе данных. Скопируйте старые файлы базы данных в новый путь к базе данных.
  6. Если вы попытаетесь запустить новый ejabberd сейчас, это не удастся, потому что имя узла erlang изменилось, поэтому перейдите к шагу 7:
  7. Настройте новый ejabberd на использование того же «имени узла erlang», что и старый ejabberd. Эта опция находится в файле ejabberdctl.cfg, и вы хотите указать что-то вроде: ERLANG_NODE = ejabberd @ oldserver
  8. Теперь снова запустите новый ejabberd, как на шаге 6. Он должен использовать старые файлы базы данных, и теперь он должен их принять, потому что также использует старое имя узла.
  9. Кроме того, он должен автоматически определять, что схема базы данных очень старая, и начинать ее обновление до новых схем. В зависимости от размера вашей базы данных это может занять секунды или несколько минут. Этот процесс должен быть упомянут в файле журнала.
  10. После автоматического обновления схемы базы данных ejabberd, наконец, запустится и должен работать правильно.

Это много шагов, но единственные трудные шаги для вас - 5 (скопировать старую базу данных в новое место) и 7 (настроить старое имя узла в новой установке).