Миграция мнезия 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' или что-то в этом роде.
Другое дело, совершенно другое, что вы можете попробовать:
- У вас старый ejabberd работает правильно? Тогда прекрати это.
- Установите новый ejabberd по новому пути или, по крайней мере, убедитесь, что он не использует старые файлы конфигурации, старые файлы базы данных и старые журналы...
- Вы можете запустить новый ejabberd, чтобы он по крайней мере работал идеально. Конечно, у него нет ваших старых пользователей.
- Останови новый эджабберд.
- Удалите файлы в новом пути к базе данных. Скопируйте старые файлы базы данных в новый путь к базе данных.
- Если вы попытаетесь запустить новый ejabberd сейчас, он потерпит неудачу, поскольку имя узла erlang изменилось, поэтому перейдите к шагу 7:
- Настройте новый ejabberd для использования того же "имени узла erlang", что и для старого ejabberd. Эта опция находится в файле ejabberdctl.cfg, и вы хотите поместить что-то вроде: ERLANG_NODE=ejabberd@oldserver
- Теперь запустите новый ejabberd снова, как в шаге 6. Он должен использовать старые файлы базы данных, и теперь он должен принять их, потому что также использует старое имя узла.
- Кроме того, он должен автоматически определить, что схема базы данных очень старая, и должен начать обновлять ее до новых схем. В зависимости от размера вашей базы данных, это может занять несколько секунд или несколько минут. Этот процесс должен быть упомянут в файле журнала.
- После автоматического обновления схемы базы данных ejabberd наконец запускается и должен работать правильно.
Это много шагов, но единственными сложными для вас являются 5 (скопировать старую базу данных в новое место) и 7 (настроить старое имя узла в новой установке).