Moving mnesia schema to another node

Chandrashekhar Mullaparthi <>
Tue Dec 25 10:17:38 CET 2001


Look in the Mnesia user guide in Section 6.9.1

The following example illustrates how mnesia:traverse_backup can be used to
rename a db_node in a backup file: 

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).

view(Source, Mod) ->
    View = fun(Item, Acc) ->
                   io:format("~p.~n",[Item]),
                   {[Item], Acc + 1}
           end,
    mnesia:traverse_backup(Source, Mod, dummy, read_only, View, 0).

cheers,
Chandru

> -----Original Message-----
> From: Erik Pearson [mailto:]
> Sent: 25 December 2001 02:19
> To: 
> Subject: Moving mnesia schema to another node
> 
> 
> Hi,
> 
> I need to move a mnesia database from one node to another, 
> and haven't been 
> able to figure out how. Mnesia is okay if you move it around 
> on the same 
> machine (different directories), but doesn't like to be moved 
> to another 
> machine -- (e.g. tar it up and untar it somehwere else) -- 
> even if the 
> database directory is accessed via a generic directory name 
> through an 
> explicit -mnesia dir 'dirname' or -config configfile.
> 
> I've also tried restoring from a backup, but stopped that 
> after it ate up 
> all CPU on the server. I also tried using install_fallback, 
> but mnesia 
> complains with
> 
> {"No disc resident schema on local node", [myoldnode]}
> 
> The backup seems to keep a reference to the old node, and 
> doens't like to 
> be restored anywhere else...
> 
> Does anyone know how to do a "redirected backup and restore" 
> from one node 
> to another?
> 
> Thanks,
> 
> Erik Pearson
> 



NOTICE AND DISCLAIMER:
This email (including attachments) is confidential.  If you have received
this email in error please notify the sender immediately and delete this
email from your system without copying or disseminating it or placing any
reliance upon its contents.  We cannot accept liability for any breaches of
confidence arising through use of email.  Any opinions expressed in this
email (including attachments) are those of the author and do not necessarily
reflect our opinions.  We will not accept responsibility for any commitments
made by our employees outside the scope of our business.  We do not warrant
the accuracy or completeness of such information.




More information about the erlang-questions mailing list