Миграция мнезия BD ejabberd v 2.1.5-3 -> 16.09-4

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

root @ 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 я попробую:

root @ 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 /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}]}]

root @ newserver: ejabberdctl import_dir /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.

1 ответ

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 (настроить старое имя узла в новой установке).

Другие вопросы по тегам