Erlang 将Mnesia备份转移到较小的群集

Erlang 将Mnesia备份转移到较小的群集,erlang,mnesia,Erlang,Mnesia,我有一个来自3节点Mnesia集群(生产集群)的备份,我想将其恢复到2节点集群(用于开发目的以重现bug)。如果集群具有相同数量的节点,那么将遵循所述的方法。如何从备份中删除节点?这可能吗 我尝试更改子句({schema,db_nodes,nodes},Acc)以返回较小的节点列表,但这似乎不起作用(或者可能起作用,但不够) 事实证明,这很容易做到: #!/usr/bin/env escript change_node_name(Mod, Source, Target) ->

我有一个来自3节点Mnesia集群(生产集群)的备份,我想将其恢复到2节点集群(用于开发目的以重现bug)。如果集群具有相同数量的节点,那么将遵循所述的方法。如何从备份中删除节点?这可能吗


我尝试更改子句({schema,db_nodes,nodes},Acc)以返回较小的节点列表,但这似乎不起作用(或者可能起作用,但不够)

事实证明,这很容易做到:

#!/usr/bin/env escript

change_node_name(Mod, Source, Target) ->

    % Change this to whatever you want the new node list to be,
    % with however many nodes, whatever names, etc.
    ChangeNodes =
        fun(_Nodes) ->
            ['node1@jamie.kingsbery.net','node2@jamie.kingsbery.net']
        end,

    Convert =
        fun({schema, db_nodes, Nodes}, Acc) ->
                {[{schema, db_nodes, ChangeNodes(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, ChangeNodes(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).

main(_Args)->
    change_node_name(mnesia_backup,"/tmp/source-backup","dest-backup").

事实证明,这很容易做到:

#!/usr/bin/env escript

change_node_name(Mod, Source, Target) ->

    % Change this to whatever you want the new node list to be,
    % with however many nodes, whatever names, etc.
    ChangeNodes =
        fun(_Nodes) ->
            ['node1@jamie.kingsbery.net','node2@jamie.kingsbery.net']
        end,

    Convert =
        fun({schema, db_nodes, Nodes}, Acc) ->
                {[{schema, db_nodes, ChangeNodes(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, ChangeNodes(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).

main(_Args)->
    change_node_name(mnesia_backup,"/tmp/source-backup","dest-backup").