Обходной путь - миграция. Просто запустите кластер mnesia и перенесите все свои таблицы и схемы на другой узел. Чем удалить из оригинала и забыл.

дал базу данных / схему Mnesia на машине1. Узел был назван mypl @ machine1. Затем я переместил все файлы на machine2, потому что machine1 сломался. Все работает нормально, пока код работает с именем «mypl @ machine1». Очевидно, это несколько сбивает с толку, потому что теперь он работает на машине2.

Если я запускаю Erlang с именем узла "mypl @ machine2", база данных Mnesia окажется пустой.

Как переименовать узел в базе данных Mnesia с machine1 на machine2?

Ответы на вопрос(2)

все свои таблицы и схемы на другой узел. Чем удалить из оригинала и забыл.

Решение Вопроса

что это можно сделать онлайн на одном узле (кто-нибудь?), Но это можно сделать с помощью резервного копирования / восстановления в дополнение к запуску двух узлов и добавлению копий таблиц. вMnesia Руководство пользователя В разделе 6.9.1 вы найдете код, который использует mnesia: traverse_backup для изменения имен узлов в таблице схемы (показанной ниже) в файле резервной копии mnesia. Имя модуля, которое вы, вероятно, должны использовать:mnesia_backup.

С этим кодом вам нужно:

%% On [email protected]
mnesia:backup("/path/to/mnesia.backup").
change_node_name(mnesia_backup, [email protected], [email protected],
                 "/path/to/mnesia.backup", "/path/to/new.mnesia.backup").
%% On [email protected]
mnesia:restore("/path/to/new.mnesia.backup", []).

Я не уверен, если вам нужно сначала создать схему[email protected].

Код изменения имени узла из руководства пользователя:

change_node_name(Mod, From, To, Source, Target) ->
    Switch =
        fun(Node) when Node == From -> To;
           (Node) when Node == To -> throw({error, already_exists});
           (Node) -> Node
        end,
    Convert =
        fun({schema, db_nodes, Nodes}, Acc) ->
                {[{schema, db_nodes, lists:map(Switch,Nodes)}], Acc};
           ({schema, version, Version}, Acc) ->
                {[{schema, version, Version}], Acc};
           ({schema, cookie, Cookie}, Acc) ->
                {[{schema, cookie, Cookie}], Acc};
           ({schema, Tab, CreateList}, Acc) ->
                Keys = [ram_copies, disc_copies, disc_only_copies],
                OptSwitch =
                    fun({Key, Val}) ->
                            case lists:member(Key, Keys) of
                                true -> {Key, lists:map(Switch, Val)};
                                false-> {Key, Val}
                            end
                    end,
                {[{schema, Tab, lists:map(OptSwitch, CreateList)}], Acc};
           (Other, Acc) ->
                {[Other], Acc}
        end,
    mnesia:traverse_backup(Source, Mod, Target, Mod, Convert, switched).
 Zhenguo Yang24 июл. 2016 г., 15:39
Я следовал за шагами, но не смог восстановить, любое предложение? 1. сделать резервную копию исходной базы данных 2. изменить имя узла 3. скопировать bak на другой компьютер 4. восстановить новый файл резервной копии Сообщение об ошибке: {aborted, {'EXIT', {aborted, {bad_commit, {missing_lock, 'web_server @anothernode '}}}}}

Ваш ответ на вопрос